3.2 ATL的进阶使用,对话框的添加,背景绘制

对话框的添加

代码

#include <iostream>
#include <atlbase.h>
#include <atlwin.h>
#include "resource.h"
using namespace std;
//在WinUser.h里面 或者 查询微软文档 F1
//代表窗口风格 
CComModule gModule;

typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, WS_EX_APPWINDOW>TianchenTraits;

class CAboutDlg :public CDialogImpl<CAboutDlg, CWindow>
{
public:
	enum { IDD = IDD_ABOUT };
	BEGIN_MSG_MAP(CAboutDlg);
		MESSAGE_HANDLER(WM_INITDIALOG, OninitDialog)
		MESSAGE_HANDLER(WM_CLOSE, OnClose)
		COMMAND_ID_HANDLER(IDOK, OnOk)
		COMMAND_ID_HANDLER(IDCANCEL, OnOk)
		//COMMAND_HANDLER(IDOK, BN_CLICKED, OnBnClickedOk)
	END_MSG_MAP()
	LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		DestroyWindow();
		return 0;
	}
	LRESULT OninitDialog(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		CenterWindow();
		return TRUE;
	}
	LRESULT OnOk(UINT wNotifyCode, WORD wID, HWND hWndCtrl, BOOL& bHandled)//可以对比下宏的定义 
	{
		EndDialog(wID);
		return 0;
	}
	LRESULT OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		PostQuitMessage(0);
		return 0;
	}
	//LRESULT OnBnClickedOk(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)


};

资源

追加资源
在这里插入图片描述
在这里插入图片描述

对About进行响应

拖一个按钮并改为IDOK
在这里插入图片描述

COMMAND_ID_HANDLER(ID_HELLO_WOLRD, OnAbout)

运行效果

在这里插入图片描述

背景的添加

代码

#define BACKGNDCLR RGB(255,255,0)
class TianchenWin
	:public CWindowImpl<TianchenWin, CWindow, TianchenTraits>//可以通过句柄对CWindow进制操作
	,public CPaintBackground<TianchenWin, BACKGNDCLR>
{
public:
	TianchenWin(){}
	~TianchenWin() {}
	DECLARE_WND_CLASS(_T("Tianchen Window Class"));//窗口类定义
	typedef CPaintBackground<TianchenWin, BACKGNDCLR> CPaintBkgnBase;
	BEGIN_MSG_MAP(TianchenWin);//消息映射表
		MESSAGE_HANDLER(WM_CREATE,OnCreate)
		MESSAGE_HANDLER(WM_CLOSE, OnClose)
		COMMAND_ID_HANDLER(ID_HELLO_WOLRD, OnAbout)
		MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
		CHAIN_MSG_MAP(CPaintBkgnBase)//加到循环列表里面
	END_MSG_MAP()

	LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{//bHandled TRUE 则不会调用WindoProc FALSE 会调用WindowProc来继续处理
		DestroyWindow();
		return 0;
	}
	
	LRESULT OnAbout(UINT wNotifyCode, WORD wID, HWND hWndCtrl, BOOL& bHandled)
	{
		OutputDebugString(_T("OnAbout called\r\n"));
		CAboutDlg dlg;
		dlg.DoModal();
		return 0;
	}
	LRESULT OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{
		HMENU hMenu = LoadMenu(gModule.GetResourceInstance(), MAKEINTRESOURCE(IDR_ABOUT));
		SetMenu(hMenu);
		return 0;
	}
	LRESULT OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
	{

		PostQuitMessage(0);
		return 0;
	}
};

效果
在这里插入图片描述

主函数

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天晨。

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

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

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

打赏作者

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

抵扣说明:

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

余额充值