ATL的GUI程序设计(2)[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

OK,上一章介绍过的_Module又出现在你的眼前了——不过还是没有什么特别的变化,仍然是那熟悉的Init和Term。而且,正如“山哟还是那座山”一样,消息循环哟也仍然是那个消息循环。当然,你肯定也发现了那寥寥的变化:CHelloATLWnd是什么?在我将它的代码展现给你之前,你可能会做出这样的猜想:

  • 这是一个C++类,它对Win32窗口类进行了封装。
  • 这个类封装了大多数窗口操作的API函数,诸如CreateWindow、ShowWindow、UpdateWindow。
  • 窗口类的注册可能也是在这个C++类中完成的。

好,打住,这就够了。让我们来撩开CHelloATLWnd那貌似神秘的面纱吧,赶紧着。

class CHelloATLWnd : public CWindowImpl< CHelloATLWnd, CWindow, CWinTraits< WS_OVERLAPPEDWINDOW > >
{
public:
    CHelloATLWnd()
    {
        CWndClassInfo& wci     = GetWndClassInfo();
        wci.m_bSystemCursor    = TRUE;
        wci.m_lpszCursorID     = IDC_ARROW;
        wci.m_wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
        wci.m_wc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
    }
public:
    DECLARE_WND_CLASS( _T("HelloATL") )
public:
    BEGIN_MSG_MAP( CHelloATLWnd )
        MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
        MESSAGE_HANDLER( WM_PAINT, OnPaint )
    END_MSG_MAP()
public:
    LRESULT OnDestroy( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& hHandled )
    {
        ::PostQuitMessage( 0 );
        return 0;
    }
    LRESULT OnPaint( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& hHandled )
    {
        HDC hdc;
        PAINTSTRUCT ps;

        hdc = BeginPaint( &ps );
        DrawText( hdc, _T("Hello, ATL!"), -1, &ps.rcPaint, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
        EndPaint( &ps );
        return 0;
    }
};

本文关键:ATL的GUI程序设计(2)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top