CDialogSK - 一个可皮肤化的对话框类






4.86/5 (35投票s)
2003年7月8日
3分钟阅读

228608

8823
本文讨论了 CDialogSK 类,该类扩展了 CDialog MFC 类,可用于创建可换肤的对话框。
引言
这个类派生自 MFC 的 CDialog
。它支持以下功能:-
- 如果在 Windows 2000 或 Windows XP 上运行,使任何一种颜色透明,以便您可以透过对话框的某些区域
- 如果在 Windows 2000 或 Windows XP 上运行,使整个对话框半透明
- 向背景添加一个位图。位图可以是资源、BMP 文件或
HBITMAP
- 设置背景样式:平铺、居中、拉伸,将对话框调整为位图的大小
- 可以启用/禁用通过在对话框内的任何位置单击来移动对话框
在 Windows 2000 之前,创建换肤对话框有点困难。您需要编写可以解析背景图像并创建定义皮肤形状的 CRgn
的函数。这可以通过使用对图像中您希望在对话框上看到的区域的 CRgn::CombineRgn
的重复调用来完成。在创建整个区域后,您需要使用组合的 CRgn
对象的句柄调用 CWnd::SetWindowRgn
。
从 Windows 2000 开始,一个新的 API SetLayeredWindowAttributes
被添加到 User32.dll 中。这个类使用它来创建换肤对话框。然而,背景位图功能不依赖于操作系统版本,可以在任何版本的 Windows 上使用。
使用代码
可以使用以下步骤使用该类
将文件 CDialogSK.h 和 CDialogSK.cpp 添加到您的项目中。
在您的对话框类的 .h 文件中包含 CDialogSK.h
在您的对话框类的 .h 和 .cpp 文件中将所有 "
CDialog
" 替换为 "CDialogSK
"如果您计划使用背景图像(位图),请转到对话框属性、样式选项卡,并将样式设置为“弹出”,边框设置为“无”,并取消选中“标题栏”复选框。
在您的对话框类的
OnInitDialog
结束时,添加对CDialogSK
中的相应方法的调用BOOL CSkinDialog_DemoDlg::OnInitDialog() { ... EnableEasyMove(); // enable moving of the dialog // by clicking anywhere in the dialog SetBitmap (IDB_BACKGROUND); // set background bitmap SetStyle (LO_RESIZE); // resize dialog to the size of the bitmap SetTransparentColor(RGB(0, 255, 0)); // set green as the // transparent color return TRUE; }
- 如果您想稍后更改窗口样式,您可以在代码中的任何地方在运行时调用这些方法中的任何一个。
- 例如,如果您想创建一个圆形对话框。创建一个图像,该图像具有一个绿色背景上的蓝色圆圈。然后使用图像的路径调用
SetBitmap
并调用SetTransparentColor
,传入背景色(绿色)。这将从视图中删除背景,您将获得一个圆形窗口。
方法
CDialogSK
类中存在以下方法
DWORD SetBitmap (HBITMAP hBitmap);
基于HBITMAP
设置背景位图。DWORD SetBitmap (int nBitmap);
基于资源 ID 设置背景位图。DWORD SetBitmap (LPCTSTR lpszFileName);
基于 Windows 位图 (.bmp) 文件设置背景位图。void SetStyle (LayOutStyle style);
设置位图布局样式。可以是LO_DEFAULT
、LO_TILE
(平铺图像)、LO_CENTER
(居中图像)、LO_STRETCH
(拉伸图像以适应对话框)、LO_RESIZE
(调整对话框大小以适应图像)中的任何一个。void EnableEasyMove (BOOL pEnable = TRUE);
如果使用 TRUE 调用,则可以通过单击对话框的客户区中的任何位置来移动对话框。BOOL SetTransparent (BYTE bAlpha);
将整个对话框设为透明。范围是 0(透明)- 255(不透明)。这仅适用于 Windows2000 及以上版本 (WinXP)。BOOL SetTransparentColor (COLORREF col, BOOL bTrans = TRUE);
使特定颜色透明。这仅适用于 Windows2000 及以上版本 (WinXP)。这可以用来创建对话框,在该对话框中您可以看到对话框的某些部分。
历史
- 这是初始版本。发布日期:2003 年 7 月 1 日