已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
工具栏与状态栏,1、工具栏,1、1工具栏简介工具栏对象是一种窗口,其中包含一些水平排放的图形按钮。工具栏中的所有按钮的图形被存储在一个位图中,而该位图被定义在应用程序的资源文件中。工具栏按钮与菜单选项是类似的。单击工具栏按钮将产生相应的命令,应用程序通过提供消息处理函数来处理产生的命令。如果工具栏的某个按钮没有COMMAND或UPDATE_COMMAND_UI处理函数,那么框架自动使该按钮无效。工具栏和状态栏一般作为框架窗口类的成员变量声明,在创建框架窗口时自动创建它们,在销毁框架窗口时自动销毁所创建的控件栏对象。使用AppWizard创建应用程序基本框架时,可以得到初始的工具栏和状态栏。,1、2工具栏的创建,工具栏创建有两种方法,第一种是使用工具栏编辑器。基本步骤为:(1)创建工具栏资源(2)构造CToolBar对象,即在边框窗口类的声明中添加类似以下的声明:CToolBarm_wndToolBar。(3)调用Create或CreateEx创建工具栏,然后调用LoadToolBar装载工具栏资源,即在边框窗口类的OnCreate添加类似下面的代码:if(!m_wndToolBar.Create(this)|!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)TRACEO(“Faildtocreatetoolbarn”);Return-1;,(4)调用Create时还可以指定工具栏的风格,默认风格是WS_CHILD|WS_VISIBLE|CBRS_TOP。CBRS_TOP工具栏在边框窗口顶部CBRS_BOTTOM工具栏在边框窗口底部CBRS_NOALIGN边框窗口改变大小时,工具栏不重定位CBRS_TOOLTIPS使工具提示有效。CBRS_SIZE_DYNAMIC工具栏尺寸可变。CBRS_SIZE_FIXED工具栏尺寸固定。CBRS_FLOATLNG工具栏是浮动的。CBRS_FLYBY在状态栏中显示按钮的有关信息。CBRS_HIDE_INPLANE不显示工具栏。,如果创建后要改变工具栏的风格,则调用CControlBar:SetBarStyle来实现。工具栏创建的另一方法为:(1)构造CToolBar对象(2)调用Create或CreateEx创建工具栏。(3)调用LoadBitmap装载包含工具按钮图像的位图。(4)调用SetButton设置按钮并使每个按钮与位图图像相关。,所有工具栏按钮图像都保存在一个位图文件中,在AppWizard创建工程过程中,自动创建的工具栏位图文件名为ResToolBar.bmp,可以在资源编辑器中编辑该位图。每个图像都有相同的大小,默认为16像素宽,15像素高。CToolBar对象根据被单击按钮在工具栏中的位置来处理工具栏中的鼠标单击事件,并产生适当的命令。按钮通过控件ID数组与按钮所产生的命令相关,控件ID在数组中的位置与按钮图像在工具栏位图中的位置是一样的。数组中含有分隔符(ID_SEPARATOR),用于将按钮分组。在确定按钮位置时,分隔符是被忽略的。,工具栏按钮可以以按钮、复选框或单选框的形式出现和起作用,默认情况下以按钮形式出现。若想让工具栏按钮以复选框形式出现时,应将风格TBBS_CHECKBOX赋给该CToolBar对象或在一个ON_UNDATE_COMMAND_UI处理程序中使用某个CCmdUI对象的SetCheck函数;如果按钮为单选框形式,那么应在命令更新处理函数中调用CCmdUI:SetRadio。,1、3特殊形式的工具栏,(1)浮动式工具栏通过AppWizard创建的工具栏可以浮动。若要将工具栏移动到某个位置,可以调用框架窗口类的成员函数FloatControlBar来实现,该函数的原型如下:CFrameWnd*FloatControlBar(CControlBar*pBar,CPointpoint,DWORDdwstyle=CBRS_ALIGN_TOP);第一个参数是指向工具栏的指针,第二个参数说明工具栏在哪儿浮动,第三个参数指定工具栏与边框窗口的对齐方式。以下代码使工具栏在左上角浮动。FloatControlBar(,(2)船坞化工具栏要使工具栏为船坞化的,需要使用类似以下的代码:m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(首先要使工具栏能够船坞化,要通过调用CControlBar:EnableDocking来实现;然后应该确保边框窗口能够船坞化,这是通过调用CFrameWnd:EnableDocking来实现;最后调用CControlBar:DockControlBar使工具栏固定在边框窗口上。,例子,1、4类CToolBar,类CToolBar提供了带有位图按钮和可选分隔符的工具栏,工具栏按钮有下压式、复选框按钮或单选按钮。CToolBar对象通常被嵌入派生类CFrameWnd或CMDIFrameWnd的框架窗口对象的成员。利用AppWizard创建应用程序框架时,通常为框架类创建一个CToolBar对象。,(1)Create()函数Create()函数用于创建一个Windows工具栏,并将其连接到CToolBar对象上,同时设置工具条的默认高度。该函数的原型如下:BOOLCreate(CWnd*pParentWnd,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UINTNid=AFX_IDW_TOOLBAR);其中参数pParentWnd为指向父窗口CWnd对象的指针;dwStyle指定工具栏的风格,除了标准的Windows风格外,还可以是CBRS_BOTTOM(工具栏位于框架窗口的底部)、CBRS_NOALIGN(当父窗口改变时,工具栏不被重新定位);参数nID表示该工具栏的子窗口ID。,(2)LoadToolBar()函数该函数装载指定的工具栏资源,它的原型为:BOOLLoadToolBar(LPCTSTRlpszResourceName);BOOLLoadToolBar(UINTnIDResource);参数lpszResourceName指向被重载的工具栏资源名字的指针,参数nIDResource为被重载的工具栏资源的ID。,2状态栏,2、1状态栏简介状态栏是显示在框架窗口的多区域窗口,它由一行输出面板或指示器组成。输出面板通常用作消息行和状态指示符。大多数Windows应用程序都包括一个状态栏,在状态栏中显示诸如工具栏按钮帮助和应用程序的特殊信息(如在字处理软件中的CapsLock键的状态)。AppWizard创建应用程序时,一般自动添加状态栏,程序员在编程的过程中只需在原有的状态栏的基础上适当修改即可。,状态栏中的子窗口可以分为状态信息行和状态指示器。状态信息行显示应用程序动态提供的字符串,常见的为菜单命令的说明。状态指示器显示一些状态信息,如键盘状态,其标识符存放在一个数组中。例如,当创建应用程序的基本框架时,AppWizard会在主边框窗口类(CMainFram)中创建类似下面的提示符数组:staticUINTindicators=ID_SEPARATOR,/状态行指示器ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,提示符从左到右水平排列在状态栏中,往数组中添加更多的标识符就可以在状态栏增加更多的提示符,可以根据需要动态改变提示符的大小,通过增加ID_SEPARATOR元素还可增加分隔符。最左边的提示符(位置0)通常用作消息区,可以在其中显示命令提示之类的文本字符串。2、2创建状态栏创建状态栏的步骤:(1)构造CStatusBar对象。(2)调用Create创建状态栏并将其与CStatusBar对象联结。(3)调用成员函数SetIndicators,设置指示符的标识符为数组中相应元素指定的值,装载每个标识符指定的字符串资源并将字符串设为提示符文本。,2、3状态栏类CStatusBarMFC的CStatusBar类用来实现状态栏的功能。CStatusBar类CControlBar类的派生类,它定义了一个默认的构造函数和一个Create()成员函数。CStatusBar:Create()函数用于创建一个Windows状态栏(子窗口),并将其连接到CStatusBar对象上,同时设置初始字体和状态栏的高度,该函数原型为:BOOLCreate(CWnd*pParentWnd,DWORDdwStyle=WS_CHILD|WS_VISIBLE|CBRS_BOTTOM,UINTnID=AFX_IDW_STATUS_BAR);其中参数pParentWnd为指向父窗口CWnd对象的指针;dwStyle指定状态栏的风格,除了标准的Windows风格外,还可以是CBRS_TOP(状态栏,位于框架窗口的顶部)、CBRS_BOTTOM(状态栏位于框架窗口的底部)、CBRS_NOALIGN(当父窗口改变时,状态栏不被重新定位);参数nID表示该状态栏的子窗口ID。如果函数调用成功,则返回一个非0值,否则返回0。CStatusBar类还提供一系列成员函数来管理状态栏的指示器,主要有:1、SetIndIcators()函数函数SetIndIcators()用于设置指示器的ID,并装入由每个ID指定的字符串资源,然后将指示器的文字设置为该字符串,该函数的原型为:BOOLSetIndIcators(constUINT*lpIDArray,intnIDCount);参数lpIDArray为指向ID数组的指针,nIDCount为lpIDArray所指向的数组元素的个数。该函数按照数组lpIDArray中的对应元素的值设定标识符ID,的值,加载由每个ID所指定的字符串资源,并把字符串设置为标识符的文字。如果该函数操作成功,在返回一个非0值,否则返回0。2、SetPaneInfo()函数函数SetPaneInfo()用于设置给定索引值的指示器ID、风格和宽度。它的原型为:voidSetPaneInfo(intnIndex,UINTnID,UINTnStyle,intcxWidth);该函数给标识符栏设置一个新的ID、风格和宽度。可供选择的标识符风格有:SBPS_NOBORDERS指示器周围无3-D边界SBPS_POPOUT反转边界,以使文字突出SBPS_DISABLED不写文字SBPS_NORMAL一般方式,不扩展,有边界,文字突出,SBPS_STRETCH扩展指示器以填上不用的空间,在每一个状态栏中只有一个指示器可以使用这种风格3、SetPaneText()函数函数SetPaneText()用于设置给定索引值的指示器的文本。它的原型为:BOOLSetPaneText(intnIndex,LPCTSTRlpszNewText,BOOLbUpdate=TRUE);该函数用lpszNewText所指向的字符串来设置状态栏的文字。,2、4状态指示器的操作实例状态指示器总是与一个字符串相连的,该字符串是由资源来提供的,它是否被显示安全取决于相应的更新命令UI消息控制函数。指示器是由一个字符串资源ID来标识的,该ID也被用来传递更新命令UI消息。菜单的更新命令UI消息控制函数是在单击了顶层菜单后而被调用的;而状态栏的更新命令UI消息控制函数是在空阶段被调用的,这样就可以连续地更新状态栏。下面介绍如何在程序运行时控制消息行的信息显示以及如何在状态指示器中指示特殊键的状态。有三种方法可以更新状态栏指示器中的提示文本:调用Cwnd:SetWindowText更新最左边的指示符的文本。即该函数只能更新第一个指示器(索,引值为0)中的文字。在状态栏的命令更新(ON_UPDATE_COMMAND_UI)处理函数中调用CCmdUI:SetText来设置文本。调用CStatusBar:SetPaneText来更新任何指示器中文字。下面为在状态栏中显示“欢迎使用状态条”的典型的几行代码:CStatusBar*pStatus=(CStatusBar*)AfxGetApp()-m_pMainWnd-GetDescendantWindow(ID_VIEW_STATUS_BAR);pStatus-SetPaneText(0,“欢迎使用状态条”);首先通过调用AfxGetApp()函数获取指向应用程序的指针,指针具有这样的好处,只要获得了某,个对象的指针,就可以利用这个对象所隶属的类的一切公共数据成员和公共成员函数,而使用类的公共数据成员和公共成员函数就可以操纵该对象的一切。既然我们已经取得应用程序的指针,所以马上就能得到应用程序对象的公共数据成员m_pMainWnd,它是一个指向CWin(应用程序的主窗口)的指针,利用这个指针我们又可使用该指针所指向的对象(CWin对象)的成员函数GetDescendantWindow,这个函数的作用是求得某个子窗口,即状态栏这个窗口的指针。有了状态栏的指针,就可以使用状态栏的改变指示器的文本的成员函数SetPaneText。如果想给菜单项添加菜单提示,而菜单提示在状态栏的第一个指示器内显示,所以只需在菜单编辑器的菜单项属性对话框中的提示编辑框内添加菜单提示文字。系统自动管理显示在状态栏上的菜单是提示文字。,通过调用函数SetPaneText()还可以改变指示器的风格和宽度等。例如,为了使第一个指示器也像其他指示器一样具有立体边框,则只需在CmainFrame类的OnCreate()函数中加入下面一行代码即可(加在状态栏的Create()函数调用之后)。m_wndStatusBar.setPaneInfo(0,0,SBPS_STRETCH,0);状态指示器是否显示对应的字符串资源,由该指示器的ID的ON_UPDATE_COMMANDUI更新命令消息处理函数ONUpdate()决定。和工具栏按钮一样,ONUpdate()函数向pCmdUI发送Enable消息。状态栏的更新处理函数在系统空闲阶段被调用,因而状态栏在程序生命期中反复被更新。例如状态指示器指示系统键,ALT的状态:ON_UPDATE_COMMAND_UI(ID_INDICATOR_ALT,OnUpdatekeyAlt)/*消息映射,若系统产生消息ID_INDICATOR_ALT时,将调用映射函数OnUpdatekeyAlt去处理。下面为该处理函数的实现。*/VoidCmainFrame:OnUpdatekeyAlt(CcmdUI*pCmdUI)pCmdUI-Enable(:GetKeyState(VK_MENU)1000,classCMainFrame:publicCFrameWndprotected:/createfromserializationonlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)/*使用DECLARE_DYNCREATE宏以便允许CObject派生类的对象在运行时刻自动建立。主机使用此功能自动建立新对象,例如,当它在串行化的过程中从磁盘读一个对象时,文件、视图和框架应该支持动态建立,因为框架需要自动建立它们,把该宏加入类的.h模式中,然后在全部需要访问此类对象的.cpp模块中包含这一模式*/Attibutespublic:/Operationspublic:,/Overrides/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CMainFrame)virtualBOLLPreCreateWindow(CREATESTRUCT#endifprotected:/controlbarembeddedmembers,CStatusBarm_wndStatusBar;/状态条变量CToolBarm_wndToolBar;/工具条变量/Generatedmessagemapfunctionsprotected:/AFX_MSG(CMainFrame)afx_msgvoidOnUpdateLeft(CCmdUI*pCmdUI);/用户手工添加,响应点鼠标左键的函数afx_msgvoidOnUpdateKeyInsert(CCmdUI*pCmdUI);/用户手工添加,响应按Insert键的函数afx_msgvoidOnUpdateTime(CCmdUI*pCmdUI);/用户手工添加,在状态条上显示时间的函数Afx_msgintOnCreate(LPCREATESTRUCTlpCreateStruct);,afx_msgvoidOnDestroy();/AFX_MSGDECLARE_MESSAGE_MAP()/*用户程序中的每个CCmdTarget派生类必须提供消息图以处理消息。在类定义的末尾使用DECLARE_MESSAGE_MAP宏。接着在类成员函数的.cpp文件中使用BEGIN_MESSAGE_MAP宏,每个消息处理函数的宏入口下面的列表,以及END_MESSAGE_MAP宏。*/;/AFX_INSERT_LOCATION/MicrosoftVisualC+willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif,以下是MainFram.cpp的内容/MainFrm.cpp:implementationoftheCMainFrameclass#include“stdafx.h”#include“StatusBar.h”#include“MainFrm.h”#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CMainFrameIMPLEMENT_DYNCREATE(CMainFrame,CFrameWnd),/*通过DECLARE_DYNCREATE宏来使用IMPLEMENT_DYNCREATE宏以允许CObject派生类对象在运行时刻内自动建立。主机使用此功能自动建立新对象。例如,当它在串行化过程中从磁盘读取一个对象时。它在类工具中加入IMPLEMENT_DYNCREATE宏。BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)/*在定义用户类函数的工具(.cpp)文件中,以BEGIN_MESSAGE_MAP宏开始消息图,然后为每个信息处理函数增加宏入口,接着以END_MESSAGE_MAP宏完成信息图。*/AFX_MSG_MAP(CMainFrame)ON_UPDATE_COMMAND_UI(ID_INDICATOR_LEFT,OnUpdateLeft)ON_UPDATE_COMMAND_UI(ID_INDICATOR_VR,OnUpdateKeyInsert),ON_UPDATE_COMMAND_UI(ID_INDICATOR_TIME,OnUpdateTime)ON_WM_CREATE()ON_WM_DESTROY()/AFX_MSG_MAPEND_MESSAGE_MAP()staticUINTindicators=ID_SEPARATOR,/statuslineindicatorID_INDICATOR_CAPS,/判断是否是大写状态的资源IDID_INDICATOR_LEFT,/判断是否是按下鼠标左键的资源IDID_INDICATOR_OVR,/判断是改写态还是插入,态的资源IDID_INDICATOR_NUM,/判断NumLock键的状态的资源IDID_INDICATOR_SCRL,/判断ScrollLock键的状态的资源IDID_INDICATOR_TIME,/显示时间的资源ID;/CMainFrameconstruction/destructionCMainFrame:CMainFrame()/TODO:addmemberinitializationcodehereCMainFrame:CMainFrame(),intCMaimFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)if(CFrameWnd:OnCreate(lpCreateStruct)=-1)return-1;/创建工具栏if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT|TBSTYLE_TRANSPARENT,WS_CHILD|WS_VISIBLE|CBRS_BOTTOM|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)|!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)/*CBRS_BOTTOM含义为工具栏在框架窗口的底部,CBRS_TOOLTIPS为工具栏显示提示文本,,LoadToolBar是类CToolBar的成员函数,它加载工具栏资源IDR_MAINFRAME*/TRACE0(“Failedtocreatetoolbarn”);/*TRACE0与TRACE相似,通过把一个已格式化字符串送到转储设备,例如文件或调试监视器,而提供与printf相似的功能。同MS_DOS下C程序中的printf一样,TRACE宏是一个在程序运行时跟踪变量值的方便形式。在debug环境中,TRACE宏输出到afxDump。在release环境中,它不做任何工作*/return-1;/failtocreate/创建状态栏if(!m_wndStatusBar.Create(this)|,!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)/*SetIndicators的作用是按照Indicators数组中的对应元素的值设定标识符ID的值,加载由每个ID所指定的字符串资源,并把字符串设置为标识符的文字*/TRACE0(“Failedtocreatestatusbarn”);return-1;/failtocreate/指定工具栏可停靠在其父窗口的哪个位置m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);/指定框架窗口的任意位置都可以停放工具栏,EnableDocking(CBRS_ALIGN_ANY);/使得工具栏可以停靠在框架窗口中DockControlBar(,/*AssertValid()通过检查此类内部状态的方法来确定此对象的合法性。在此库中的debug版本中,AssertValid()可以维护且由此终止程序,当它维护失败时,终止程序并返回行号,文件名的列表信息。对自己编写的类,用户重载AssertValid()提供诊断服务。重载的AssertValid()函数常在检查派生类的成员数据前调用基类的AssertValid()。*/voidCMainFrame:Dump(CDumpContext/*把用户对象中的内容转向CDumpContext对象。用户编制自己的类时,重载Dump函数为自己和其,他用户提供此类的诊断服务,重载Dump常调用Dump函数作为其基本功能,在派生类打印数据成员之前,若用户类用IMPLEMENT_DYNAMI或IMPLEMENT_SERIAL宏,CObject:Dump打印类名。注意Dump调用仅在debug版本中使用。*/#endif/_DEBUG/CMainFramemessagehandlersvoidCMainFrame:OnUpdateLeft(CCmdUI*pCmdUI)pCmdUI-Enable(:GetKeyState(VK_LBUTTON)m_pMainWnd-GetDescendantWindow(ID_VIEW_STATUS_BAR);CStringContent;Content=(:GetKeyState(VK_INSERT)/*CommandToIndex()函数的作用为把一个给定的ID转换为其标识符索引,第一个标识符的索引(下标)为0。有一个函数GetItenID()的作用恰恰与它相反,它是由标识符索引求出标识符ID。*/voidCMainFrame:OnUpdateTime(CCmdUI*pCmdUI)pCmdUI-Enable(true);pCmdUI-SetText(CTime:GetCurrentTime().Format(“%H:%M:%S”);/SetText()为类CCmdUI的成员函数,调用它以设置用户界面文本。,voidCMainFrame:OnDestroy()CFrameWnd:OnDestroy();KillTimer(ID_INDICATOR_TIME);(2)视图类主要是处理工具条按钮、菜单和鼠标。下面是StatusBarView.h和StatusBarView.cpp的内容。StatusBarView.h的内容如下:/StatusBarView.h:interfaceoftheCStatusBarViewclass/#if!defined(AFX_STATUSBARVIEW_H_A93C5BA,C_D2AC_11D4_A6B0_444553540000_INCLUDED_)#defineAFX_STATUSBARVIEW_H_A93C5BAC_D2AC_11D4_A6B0_444553540000_INCLUDED_#if_MSC_VER1000#pragmaonce#endif/_MSC_VER1000classCStatusBarView:publicCViewprotected:/createfromserializationonlyCStatusBarView();DECLARE_DYNCREATE(CStatusBarView)/Attributespublic:,CStatusBarDoc*GetDocument();/Operationspublic:/Overrides/ClassWizardgeneratedvirtualfunctionoverrides/AFX_VIRTUAL(CStatusBarView)public:virtualvoidOnDraw(CDC*pDC);/overriddentodrawthisviewvirtualBOOLPreCreateWindow(CREATESTRUCT,virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);/AFX_VIRTUAL/Implementationpublic:virtualCStatusBarView();#ifdef_DEBUG()virtualvoidAssertValid()const;virtualvoidDump(CDumpContext#endifprotected:/Generatedmessagemapfunctionsprotected:/AFX_MSG(CStatusBarView)afx_msgvoidOnMouseMove(UINTnFlags,CPiontpoint);afx_msgvoidOnDestroy();afx_msgvoidOnQuitWindows();afx_msgvoidOnCartoon();/AFX_MSGDECLARE_MESSAGE_MAP();#ifndef_DEBUG/debugversioninStatusBarView.cppinlineCStatusBarDoc*CStatusBarView:GetDocument()return(CStatusBarDoc*)m_pDocument;#endif/AFX_INSERT_LOCATION,/MicrosoftVisualC+willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif/!defined(AFX_STATUSBARVIEW_H_A93C5BAC_D2AC_11D4_A6B0_444553540000_INCLUDED_)以下是StatusBarView.cpp的主要内容/StatusBarView.cpp:implementationoftheCStatusBarViewclass#include“stdafx.h”#include“StatusBar.h”#include“StatusBarDoc.h”#include“StatusBarView.h”#include“winuser.h”#pragmacomment(lib,”user32.lib”)/加载user.lib库#pargmacomment(lib,”winmm.lib”)/加载winmm.lib库#defineOCR_NORMAL32512/定义光标正常显示的常量值,#ifdef_DEBUG#definenewDEBUG_NEW#unfefTHIS_FILEstaticcharTHIS_FILE=_FILE_;#endif/CStatusBarViewIMPLEMENT_DYNCREATE(CStatusBarView,CView)BEGIN_MESSAGE_MAP(CStatusBarView,CView)/AFX_MSG_MAP(CStatusBarView)ON_WM_MOUSEMOVE()ON_WM_DESTROY()ON_COMMAND(ID_QUIT_WINDOWS,OnQuitWindows)ON_COMMAND(ID_CARTOON,OnCartoon)/AFX_MSG_MAP/StandardprintingcommandsON_COMMAND(ID_FILE_PRINT,CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:,OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:OnFilePrintPreview)END_MESSAGE_MAP()voidCStatusBarView:OnDraw(CDC*pDC)CSatusBarDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedatahereCStatusBarDoc*CStatusBarView:GetDocument()ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CStatusBarDoc);/*IsKindOf()是测试一个对象以确定其是否是一个特定类的对象,或看是否从一个特定的类继承的对象。使用RUNTIME_CLASS宏从C+类名中获取运行时刻类结构,它返回一指针到CRuntimeClass结构,只有以,DECLARE_DYNAMIC,DECLARE_DYNCREATE,DECLARE_SERIAL定义的CObject派生类才返回一个CruntimeClass结构的指针*/return(CStatusBarDoc*)m_pDocument;#endif/_DEBUG/CStatusBarViewmessagehandlersvoidCStatusBarView:OnMouseMove(UINTnFlags,CPointpoint)CStatusBar*p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年健身器材行业健身器材设计与耐用性研究报告及未来发展趋势预测
- 2025年传媒行业自媒体监管水平考试-内容审核技术的发展与监管考核试卷
- 2025年服装行业快时尚品牌跨界合作研究报告及未来发展趋势预测
- 2025年果园机械化采摘平台操作考核试卷
- 2025年互联网与信息技术专项能力测试元宇宙虚拟场景开发(AR环境实时空间锚定技术)考核试卷
- 2025中国邮政储蓄银行莆田市分行信用卡销售团队社会招聘考试笔试备考题库及答案解析
- 2025铜陵市义安区某企业招聘派遣制工作人员2人考试笔试模拟试题及答案解析
- 2025安徽材料工程学校招聘教师6人考试笔试备考试题及答案解析
- 2025年佳木斯富锦市高校现场公开招聘教师36人笔试考试参考题库及答案解析
- 2026浙江宁波市慈溪市招聘教师(第一批)88人考试笔试备考题库及答案解析
- 2026年畜牧业养殖公司屠宰设备使用与维护管理制度
- 2025高中英语短文改错专项训练80篇
- 北师大版(2024)2025-2026学年三年级下册期中调研试卷(含解析)
- 2025年四季度湖南海利高新技术产业集团有限公司招聘100人笔试考试参考试题及答案解析
- 2025江苏省大学生安全知识竞赛题库及答案
- 圆通快递车辆管理制度
- 2025年新教科版三年级上册科学期中测试卷
- 2025重庆双福农产品批发市场有限公司招聘综合办公室文员、冻库管理员、招商员等岗位22人考试参考题库及答案解析
- 万豪酒店管理集团介绍
- 2025-2030中国复合人工皮肤行业市场现状供需分析及投资评估规划分析研究报告
- 2025年口腔医学专升本考试重点突破练习试卷(含答案)
评论
0/150
提交评论