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

总介绍

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

添加资源
3.1 WTL概述,简单使用和ATL概述,简单使用_第1张图片
3.1 WTL概述,简单使用和ATL概述,简单使用_第2张图片
在这里插入图片描述
运行效果
3.1 WTL概述,简单使用和ATL概述,简单使用_第3张图片

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

效果
3.1 WTL概述,简单使用和ATL概述,简单使用_第4张图片

你可能感兴趣的:(大型聊天项目,mfc,c++,WTL,ATL,自定义窗口)