WTL 学习笔记 -- 几则技巧
l 在WTL项目中插入ATL控件。有点不明白,WTL本身就是扩展ATL,但WTL向导产生的工程,竟不能使用ATL控件。还得手工加一些东西来欺骗VS6,VS6才让插入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 ); |