头文件:
#include<atlbase.h>
#include<atlwin.h>
#include"resource.h"
1.定义自己的窗口类
(1)注册窗口 ; (2)消息映射表(需要响应的消息); (3)响应的消息执行对应函数
//样式,风格
//WS_OVERLAPPEDWINDOW:各种风格的窗体 WS_CLIPCHILDREN:可点击 APP(应用程序)
typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CAPTION, WS_EX_APPWINDOW> MyTraits;
class MyWindow :public CWindowImpl<MyWindow, CWindow, MyTraits>
{
public:
DECLARE_WND_CLASS(_T("MyWindow!")); //注册窗口
//消息映射表 消息处理
BEGIN_MSG_MAP(MyWindow)
MESSAGE_HANDLER(WM_CLOSE,OnClose) //关闭窗口
MESSAGE_HANDLER(WM_DESTROY,OnDestroy) //销毁窗口
COMMAND_ID_HANDLER(IDR_ABOUT,OnAbout) //菜单处理
END_MSG_MAP()
//消息对应函数
//bHandled TRUE:则不会调用WindowProc消息 FASLSE:会调用WindowProc(继续处理)
LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam,BOOL& bHandled)
{
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;
}
};
2.建立窗口
(1)初始化CComModule; (2)注册; (3)创建窗口类; (4)建立消息循环
int main()
{
CComModule gModule;
//初始化.com
HRESULT hRes = gModule.Init(NULL, GetModuleHandle(NULL));
if (hRes != 0)
{
cout << hRes << endl;
}
MyWindow win;
//创建窗口
HWND hWnd = win.Create(NULL, CWindow::rcDefault, _T("MyATLWind!!!"));
if (hWnd == NULL)
{
cout << "create window failed!:" << hWnd << endl;
}
win.ShowWindow(SW_SHOW); //显示窗口
win.UpdateWindow(); //刷新窗口
//建立消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
gModule.Term();
return 0;
}
全部代码如下
#include <iostream>
#include<atlbase.h>
#include<atlwin.h>
#include"resource.h"
using namespace std;
//样式,风格
//WS_OVERLAPPEDWINDOW:各种风格的窗体 WS_CLIPCHILDREN:可点击 APP(应用程序)
typedef CWinTraits<WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CAPTION, WS_EX_APPWINDOW> MyTraits;
class MyWindow :public CWindowImpl<MyWindow, CWindow, MyTraits>
{
public:
DECLARE_WND_CLASS(_T("MyWindow!")); //注册窗口
//消息映射表 消息处理
BEGIN_MSG_MAP(MyWindow)
MESSAGE_HANDLER(WM_CLOSE,OnClose) //关闭窗口
MESSAGE_HANDLER(WM_DESTROY,OnDestroy) //销毁窗口
COMMAND_ID_HANDLER(IDR_ABOUT,OnAbout) //菜单处理
END_MSG_MAP()
//消息对应函数
//bHandled TRUE:则不会调用WindowProc消息 FASLSE:会调用WindowProc(继续处理)
LRESULT OnClose(UINT nMsg, WPARAM wParam, LPARAM lParam,BOOL& bHandled)
{
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;
}
};
int main()
{
CComModule gModule;
//初始化.com
HRESULT hRes = gModule.Init(NULL, GetModuleHandle(NULL));
if (hRes != 0)
{
cout << hRes << endl;
}
MyWindow win;
//创建窗口
HWND hWnd = win.Create(NULL, CWindow::rcDefault, _T("MyATLWind!!!"));
if (hWnd == NULL)
{
cout << "create window failed!:" << hWnd << endl;
}
win.ShowWindow(SW_SHOW); //显示窗口
win.UpdateWindow(); //刷新窗口
//建立消息循环
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
gModule.Term();
return 0;
}