本文主要是介绍使用ATL::CWindowImpl实现Win32窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
开发大型GUI界面程序MFC当仁不让,但如果是开发图形应用程序,并不需要大规模界面控件,没有必要链接庞大的MFC库,直接使用platform sdk会很麻烦,这时ATL中的关于Windows的封装就是最好的选择
- #include <atlbase.h>
- #include <atlwin.h>
- class CMyWindow
- : public CWindowImpl<CMyWindow, CWindow, CWinTraits<WS_OVERLAPPEDWINDOW, 0> >
- {
- public:
- DECLARE_WND_CLASS(_T("CMyWindow"))
- BEGIN_MSG_MAP(CMyWindow)
- MESSAGE_HANDLER(WM_PAINT, OnPaint)
- END_MSG_MAP()
- LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled)
- {
- PAINTSTRUCT ps;
- ::BeginPaint(m_hWnd, &ps);
- ::EndPaint(m_hWnd, &ps);
- bHandled = TRUE;
- return 0;
- }
- void OnFinalMessage(HWND hwnd)
- {
- ::PostQuitMessage(0);
- }
- };
- int APIENTRY _tWinMain(HINSTANCE hInstance,
- HINSTANCE hPrevInstance,
- LPTSTR lpCmdLine,
- int nCmdShow)
- {
- CMyWindow myWnd;
- myWnd.Create(NULL, CMyWindow::rcDefault, _T("Hello, world"));
- myWnd.ShowWindow(nCmdShow);
- myWnd.UpdateWindow();
- MSG msg;
- msg.message = ~(UINT)WM_QUIT;
- while(msg.message != WM_QUIT)
- {
- if(::GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
- return (int)msg.wParam;
- }
这篇关于使用ATL::CWindowImpl实现Win32窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!