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消息给窗口对象自己,它收到命令后,就会关闭.
(#)
|