分享

MFC窗口类函数的概括

 9loong 2010-12-26
 

SDK写程序时,main()的地位被WinMain()取代了.

类CWinApp表示应用程序本身.

类关系结构图

CObject
   |--- CCmdTarget
   |--- CWinThread
   |--- CWinApp
  
          CObject
                |--- CCmdTarget
              |--- CWnd
                |--- CFrameWnd

一、virtual BOOL CWinApp::initlnstance();
声明Initstance(),就是自己写一段InitInstance()来重载CWinApp提供的那段程序.

二、主窗口通常是CFrameWnd或者其派生类,先设置从CFrameWnd派生的新类MyFrameWindow.
生成主窗口对象后,必须将它赋给CWinApp的成员变量:m_pMainWnd再调用CFrameWnd::Create()创建主窗口.
在程序中创建一个MFC对象并不等于要求Windows系统创建一个接口对象,必须等到调用Create()后,
MFC才要求Windows系统创建相对的接口对象.
所以Create()的第一个参数是NULL,第二个参数是将该窗口的标题文字设置为"Hello".

三、调用CWnd::ShowWindow()要求Windows将这个显示在屏幕上.

四、类MyFrameWindow重载了CFranmeWnd的成员函数OnPaint(),

当被遮盖的部分再次显示在屏幕上时,系统会给该窗口发出WM_PAINT消息,
告诉此窗口:工作区哪些部分需要重绘.
处理消息:写一个消息映射表将消息交付给指定函数处理.
创建映射表的类中加上这条语句
DECLARE_MESSAGE_MAP()

在程序的其它部分声明一个符合下列格式的表格:
BEGIN_MESSAGE_MAP(类名称,父类的名称)
......
END_MESSAGE_MAP()

要处理WM_PAINT在BEGIN与END之间加ON_WM_PAINT()
还要替换MyFrameWindow加上OnPaint()成员函数才行.

五、设置窗口的图标.

设置图标的程序代码集中于 ?App::InitInstance()中

★ HICON CWinApp::Loadicon(LPCTSTR lpszResourceName)const;
★ HICON CWinApp::Loadicon(UINT nIDResource)const;
图标的名称(字符串)后者以id为参数,要把这个图标赋给哪个窗口,
调用CWnd::SetIcon() 就可以了 。

★ HICON CWnd::Setlcon(HICON hIcon,BOOL bBigIcon)
第一个参数是要赋给该窗口的图标的句柄,第二参数图标是否为大图标16*16 FALSE,32*32设为TRUE.

载入光标资源
★ HCURSOR CWinApp::LoadCursor(LPCTSTR lpszResourceName)const;
★ HCURSOQR CWinApp::LoadCursor(UINT nIDResource)const;

载入标准光标资源
★ HCURSOR CWinApp::LoadStandardCursor(LPCTSTR lpszCursorName)const;

载入标准图标资源
★ HICON CWinApp::LoadStandardIcon(LPCTSTR lpszIconName)const;

六、设置窗口主菜单:

在创建窗口对象之前,MFC核心会先跳到虚函数
CWnd::PreCreateWindow()执行,
参数写在结构CREATESTRUCT因此只要在CWnd::PreCreateWindows()中修改CREATESTRUCT的参数,
LoadMenu()以便载入菜单资源.
HMENU LoadMenu(HINSTANCE hInstance,LPCTSTR lpMenuName);
第一个参数标示应用程序实例句柄,通常用NULL表示当前这个应用程序,
第二个图标资源的名字,不过是数字.常量表示资源,
因此要用MAKEINTRESOURCE()将常量转换成它可接收的格式.
LPTSTR MAKEINTRESOURCE(WORD winteger);

七、关闭窗口及结束程序的执行

成员函数MyFrameWindow::OnFileExit()必须负责结束应用程序的执行,
只要向它发送一个消息WM_CLOSE就可以了.
除了Windows操作系统可以发出消息外,还可以给窗口发送消息.
PostMessage()发送一个WM_CLOSE消息给窗口对象自己,它收到命令后,就会关闭.

(#)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多