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; 
}

就这样吧,细节不明白的留言,我比较懒,记录的东西只是用来回头看看复习的

 

posted @ 2016-09-29 10:40  IT莽撞人  阅读(674)  评论(0编辑  收藏  举报