WEB开发网
开发学院软件开发VC ATL的GUI程序设计(4)ATL的窗口类 阅读

ATL的GUI程序设计(4)ATL的窗口类

 2006-04-11 22:54:24 来源:WEB开发网   
核心提示: 组合葫芦兄弟单打独斗都不是蛇精的对手,所以葫芦山神就会派仙鹤携带七色彩莲找到他们,ATL的GUI程序设计(4)ATL的窗口类(6),最后七个葫芦娃合体成为威力无比的葫芦小金刚,消灭了妖精,模板让我们能够将它们灵活地组合(所谓“灵活地组合”,即是在CWindowImp

组合

葫芦兄弟单打独斗都不是蛇精的对手,所以葫芦山神就会派仙鹤携带七色彩莲找到他们,最后七个葫芦娃合体成为威力无比的葫芦小金刚,消灭了妖精,人世间重获太平……

这自然是一个非常老套的故事,但想必如我一样的80s生人看到后仍然会感慨不已。在那个少儿的精神食粮异常匮乏的年代,这部有些程式化脸谱化的动画片告诉了我们一个简单的道理:只有团结起来,才能发挥最大的力量。

ATL的窗口类也是如此,单凭CWinTraits、CWindow、CMessageMap这哥仨单打独斗是不可能成就大气候的。我们需要做的,就是使用某种方法来将它们组合起来。感谢C++为我们带来的多重继承和模板——多重继承让我们能够将它们组合,模板让我们能够将它们灵活地组合(所谓“灵活地组合”,即是在CWindowImpl层通过填入模板参数来决定继承链的顶层CWindowImplRoot的多重继承情况)。那么,再回到上一章的窗口类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;
  }
};

上一页  1 2 3 4 5 6 7 8  下一页

Tags:ATL GUI 程序设计

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接