对话框的添加
代码
#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;
}