65.9K
CodeProject 正在变化。 阅读更多。
Home

CGlassDialog

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.98/5 (22投票s)

2006年8月5日

CPOL

2分钟阅读

viewsIcon

107535

downloadIcon

1589

这是一个简单的类,可以使透明对话框以更平滑的方式显示。

Sample Image - CGlassDialog.jpg

引言

在介绍这个类之前,我想告诉大家我的英语不太好。而且,这是我的第一篇文章。我一直从这个网站得到很多帮助,所以我真的很想写一篇文章回馈社区。

无论如何,这是一个简单的类,可以使透明对话框以更平滑的方式显示。我制作这个的原因是……我一直在制作一个带有透明窗口的程序。我认为如果窗口能更平滑地显示出来,在视觉上会更好。然后我决定制作这个类。

如何制作这个?

这很简单,我使用 OnTimer() 来实现平滑显示。

首先,你必须在你的.h 文件中声明它

#define WS_EX_LAYERED   0x00080000
#define LWA_COLORKEY    0x00000001
#define LWA_ALPHA       0x00000002
#define ULW_COLORKEY    0x00000001
#define ULW_ALPHA       0x00000002
#define ULW_OPAQUE      0x00000004

typedef BOOL(WINAPI *SLWA)(HWND, COLORREF, BYTE, DWORD); 

然后,你可以使用这段代码

SLWA pSetLayeredWindowAttributes = NULL;  
HINSTANCE hmodUSER32 = LoadLibrary("USER32.DLL"); 
pSetLayeredWindowAttributes =(SLWA)GetProcAddress(hmodUSER32, 
           "SetLayeredWindowAttributes");
SetWindowLong(m_hWnd, GWL_EXSTYLE, 
           GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
pSetLayeredWindowAttributes(m_hWnd, 0, (255 * m_nGlass) / 100, LWA_ALPHA);

在这段代码中,m_nGlass 是透明度的等级,你可以将其设置为 0 到 100 之间。(如果将 m_nGlass 设置为 0,对话框将完全透明。如果将 m_nGlass 设置为 100,对话框将完全不透明。)

我使用了这一点。OnTimer()WM_TIMER 的事件函数,因此它会以规律的时间间隔执行该函数。

OnTimer() 中,你改变 m_nGlass 的值

(m_nGlass >= 70) ? ReleaseTimer() : m_nGlass += m_nStepUnit; 

如何使用这个?

如果你想使用这个类,首先,将 GlassiDialog.hGlassDialog.cpp 添加到你的项目中,并在需要的地方包含 #include GlassDialog.h。然后,在你的对话框类中继承 CGlassDialog 类。(例如,你应该将对话框的基础类从 CDialog 更改为 CGlassDialog。只需转到你的 .cpp.h 文件并使用你的代码编辑器的**“替换”**功能将所有 CDialog 替换为 CGlassDialog。)

现在,就完成了!你的对话框类已经准备好了。当你创建你的对话框对象时,你将能够看到一个平滑显示的对话框。

感谢阅读我的文章!! :)

© . All rights reserved.