3.1 WTL概述,简单使用和ATL概述,简单使用

本文介绍了WTL(Windows Template Library)和ATL(Active Template Library)的基础知识,包括它们在创建窗口、控件及GDI对象等方面的应用。通过示例代码展示了如何使用WTL创建主框架窗口,并实现消息映射和处理,以及如何将项目从控制台程序转换为窗口程序。此外,还探讨了WTL对模板编程的要求和ATL的轻量级特性。

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

总介绍

UI库是基于WTL ,WTL是基于ATL UI库可以自己制作
MFC 兼容性导致其性能下降 对大型项目影响很大 影响架构设计
有一定的基础封装不是mfc的框架,可以自己定制一些窗口行为(WTL)
WTL对模板编程有要求

WTL介绍

WTL Windows Template Library
WTL类的类型:

  1. 主框架窗口 CFrameWindowImpl CMDIFrameWindowImpl
  2. 控件 CButton,CListViewCtrl等等
  3. GDI对象 CDC、CMenu等等
  4. 特殊界面特性 CSplitterWindow, CUpdateUI, CDialogResize, CCustomDraw
  5. 实用的工具类和宏 CString, CRect, BEGIN_MSG_MAP_EX 等等

ATL介绍

ATL Activity Template Library .NET编程

ATL使用demo

代码 内存少

#include <iostream>
#include <atlbase.h>
#include <atlwin.h>
#include "resource.h"
using namespace std;
//在WinUser.h里面 或者 查询微软文档 F1
//代表窗口风格 
typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN  , WS_EX_APPWINDOW>TianchenTraits;
class TianchenWin 
    :public CWindowImpl<TianchenWin,CWindow,TianchenTraits>//可以通过句柄对CWindow进制操作
{
public:
    DECLARE_WND_CLASS(_T("Tianchen Window Class"));//窗口类定义
   
    BEGIN_MSG_MAP(TianchenWin);//消息映射表
        MESSAGE_HANDLER(WM_CLOSE,OnClose)
        MESSAGE_HANDLER(WM_DESTROY,OnDestroy)
        COMMAND_ID_HANDLER(IDR_ABOUT,OnAbout)
    END_MSG_MAP()

    LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {//bHandled TRUE 则不会调用WindoProc FALSE 会调用WindowProc来继续处理
        DestroyWindow();
        return 0;
    }
    LRESULT OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        PostQuitMessage(0);
        return 0;
    }
    LRESULT OnAbout(UINT wNotifyCode,WORD wID, HWND hWndCtrl, BOOL& bHandled)
    {
        OutputDebugString(_T("OnAbout called\r\n"));
        return 0;
    }
};
CComModule gModule;
int main()
{
    HRESULT hRes=gModule.Init(NULL, GetModuleHandle(NULL));//因为是命令行没有句柄
    if (hRes != 0)
    {
        cout << hRes << endl;
    }
    TianchenWin win;
    HWND hwnd=win.Create(NULL, TianchenWin::rcDefault, _T("Tian Chen Window"));
    if (hwnd == NULL)
    {
        cout << "create window failed\r\n";
    }
    win.ShowWindow(SW_SHOW);
    win.UpdateWindow();
    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    gModule.Term();
    return 0;
}

添加资源
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行效果
在这里插入图片描述

WTL使用demo

首先改造项目 是基于ATL进行的更改
1 链接器从控制台改为窗口
2 将预定义的_CONSOLE改为_WINDOWS
代码

int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdSHow)
{
	HRESULT hRes = gModule.Init(NULL, GetModuleHandle(NULL));//因为是命令行没有句柄
	if (hRes != 0)
	{
		cout << hRes << endl;
	}
	TianchenWin win;
	HWND hwnd = win.Create(NULL, TianchenWin::rcDefault, _T("Tian Chen Window"));
	if (hwnd == NULL)
	{
		cout << "create window failed\r\n";
	}
	win.ShowWindow(nCmdSHow);
	win.UpdateWindow();
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	gModule.Term();
	return 0;
}

效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天晨。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值