WTL之手动编写框架窗口

本文介绍了如何使用WTL(Windows Template Library)从零开始搭建一个简单的窗口程序。主要内容包括:项目初始化、必要的头文件引入、窗口类声明及实现、消息映射机制说明,以及WinMain函数的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新版博客已经搭建好了,有问题请访问 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; 
}

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

 

转载于:https://www.cnblogs.com/crazydebug/p/5919019.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值