新版博客已经搭建好了,有问题请访问
本人是一个实践主义者,不罗嗦上一篇工程搭建好以后,这一篇就开始写代码,写之前再说几句,如果你熟悉MFC分析过MFC框架的话,你写起来就很顺手,其实我觉得WTL手动创建一个窗口比MFC简单多了,基本道理都是相同的,细节差异而已
新建一个WIN32空项目,添加新建项 main.h main.cpp
1.在main.h中引入需要使用的头文件
#include#include extern CAppModule _Module;#include #include #include #include
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) //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; }
就这样吧,细节不明白的留言,我比较懒,记录的东西只是用来回头看看复习的