您的位置:首页 > 其它

WTL 学习笔记 -- 几则技巧

2009-03-08 16:12 169 查看
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 );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: