WTL之手动编写框架窗口
新版博客已经搭建好了,有问题请访问 htt://www.crazydebug.com
本人是一个实践主义者,不罗嗦上一篇工程搭建好以后,这一篇就开始写代码,写之前再说几句,如果你熟悉MFC分析过MFC框架的话,你写起来就很顺手,其实我觉得WTL手动创建一个窗口比MFC简单多了,基本道理都是相同的,细节差异而已
新建一个WIN32空项目,添加新建项 main.h main.cpp
1.在main.h中引入需要使用的头文件
#include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlframe.h> #include <atlmisc.h> #include <atlcrack.h>
2.框架窗口类的声明
//基本套路 class CMyWtlWindow : public CFrameWindowImpl < CMyWtlWindow> { public: //创建窗口类 DECLARE_FRAME_WND_CLASS(_T("CrazyWtl"),IDI_ICON1) //消息机制 ATL3.0必须用BEGIN_MSG_MAP_EX定义路由
//ATL7.0从CWindowImpl和CDialogImpl派生的类可以直接使用BEGIN_MSG_MAP定义消息路由
//其他消息必须以BEGIN_MSG_MAP定义消息路由
BEGIN_MSG_MAP() //消息链,我的理解就是让父窗口帮助处理消息 CHAIN_MSG_MAP(CFrameWindowImpl<CMyWtlWindow>) //wm_create消息 MSG_WM_CREATE(OnCreate); END_MSG_MAP() //create函数 如果不知道我们可以右键MSG_WM_CREATE看一下类型 LRESULT OnCreate(LPCREATESTRUCT lparam) { MessageBox(_T("hello wtl")); return 0; } };
程序的爆破点,类似MFC中的theApp;
CAppModule _Module;
WinMain函数,MFC连WinMain都不用写
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nShowCmd) { _Module.Init(NULL,hInstance); CMyWtlWindow wndMain; MSG msg; if (NULL == wndMain.CreateEx()) return 1; wndMain.ShowWindow(SW_SHOW); wndMain.UpdateWindow(); //消息循环 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } _Module.Term(); return msg.wParam; }
就这样吧,细节不明白的留言,我比较懒,记录的东西只是用来回头看看复习的