WTL 学习笔记 -- 几则技巧

 

l         WTL项目中插入ATL控件。有点不明白,WTL本身就是扩展ATL,但WTL向导产生的工程,竟不能使用ATL控件。还得手工加一些东西来欺骗VS6VS6才让插入ATL控件。

1.         在工程增加一个Atl.idl文件,并排除在编译之外。

library Atl { };

 

2.         在源文件加入一个宏。

#if 0

   #include < atlcom.h >

   BEGIN_OBJECT_MAP(ObjectMap) END_OBJECT_MAP()

#endif

 

l         限制窗口的大小。

MESSAGE_HANDLER(WM_GETMINMAXINFO, OnGetMinMaxInfo)

LRESULT OnGetMinMaxInfo(UINT, WPARAM, LPARAM lParam, BOOL&)

{ // load size structure with lParam values

  LPMINMAXINFO lpMMI = (LPMINMAXINFO)lParam;

 

  // change the values in the size structure to desired values

  lpMMI->ptMinTrackSize.x = 200; // min width

  lpMMI->ptMinTrackSize.y = 150; // min height

  lpMMI->ptMaxTrackSize.x = 600; // max width

  lpMMI->ptMaxTrackSize.y = 450; // max height

 

  return 0;

}

 

 

l         修改对话框和背景的颜色。

MESSAGE_HANDLER(WM_CTLCOLORDLG, OnCtrlColor)

MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtrlColor)

LRESULT OnCtrlColor(UINT, WPARAM, LPARAM, BOOL&)

{ // set background mode and text color

  SetBkMode((HDC)wParam, TRANSPARENT); // transparent background

  SetTextColor((HDC)wParam, RGB(255, 255, 255)); // white text

 

  return (LRESULT)AtlGetStockBrush(BLACK_BRUSH);

}

 

 

l         让主窗口打开时就最大化。

wndMain.ShowWindow(nCmdShow | SW_SHOWMAXIMIZED);

 

l         让视图打开时就最大化。

         LRESULT OnFileNew(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)

         {

                   CChildFrame* pChild = new CChildFrame;

                   pChild->CreateEx(m_hWndClient);

                   pChild->ShowWindow(SW_SHOWMAXIMIZED);

                  

                   // TODO: add code to initialize document

 

                   return 0;

         }

l         渐变颜色填充。

         RECT rect;

         GetClientRect(&rect);

        

         TRIVERTEX tv[] =

         {

                   { rect.left, rect.top, 0xff00 },

                   { rect.right, rect.top + m_cxyHeader, 0, 0xff00 }

         };

         GRADIENT_RECT gr = { 0, 1 };

 

         dc.GradientFill ( tv, 2, &gr, 1, GRADIENT_FILL_RECT_H );