过年了,祝新年快乐!!散分!!! up 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Happy new year接分............ SetLayeredWindowAttributes 有大侠告诉我这个API的意义吗?谢谢! 接分。首先给出SetLayeredWindowAttributes()的函数原形:BOOL SetLayeredWindowAttributes(HWND hwnd, // handle to the layered windowCOLORREF crKey, // specifies the color keyBYTE bAlpha, // value for the blend functionDWORD dwFlags // action); 其中dwFlags有LWA_ALPHA(值为2)和LWA_COLORKEY(值为1)两种设置,如果LWA_ALPHA被设置的话,通过bAlpha参数指定窗体的透明度;如果LWA_COLORKEY标志被设置的话,则指定关键色为crKey,该颜色所覆盖的区域将从窗体去除,去除后的区域将不再进行点击检测,其他颜色则正常显示。如果阿尔法混合值设置为0,其窗口区域同样不进行点击检测。 前面说过,SetLayeredWindowAttributes()函数是Windows 2000新增的一个API函数,它所在的模块为USER32.DLL。在用GetModuleHandle()装载USER32.DLL模块并调用GetProcAddress()得到函数 SetLayeredWindowAttributes()在User32.dll中的指针后就可以通过SetLayeredWindowAttributes()函数将窗体设置为半透明了:// 全局变量typedef BOOL (WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);lpfn g_pSetLayeredWindowAttributes;……// 获取函数 SetLayeredWindowAttributes 在User32.dll中的指针HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, "SetLayeredWindowAttributes");if (g_pSetLayeredWindowAttributes == NULL)::PostQuitMessage(0);这段代码通常在程序初始化时运行以及时将USER32.DLL模块装载到诖娌⒒袢〉玫絊etLayeredWindowAttributes()函数指针。在程序退出前需要通过FreeLibrary()函数释放先前加载的模块:// 卸载模块if (m_hUser32 != NULL)FreeLibrary(m_hUser32); 在将窗体设置为半透明时,首先要获取得到该窗体的窗口句柄,以指明要操作的是哪一个窗口。如果是对本应用程序中的某个窗口进行设置,可以通过传递窗口句柄或是用GetSafeHwnd()来动态获取。如果要对本程序外的某个程序窗口进行设置,一般的做法是通过对FindWindow()函数的调用来获取指定窗口标题的窗口句柄。在得到窗口句柄之后并不能直接调用SetLayeredWindowAttributes()进行设置,需要在GetWindowLong()获取得到当前窗口风格设置后在其基础之上添加WS_EX_LAYERED扩展风格,并通过SetWindowLong()函数将其设置:// 半透明HWND hWnd = GetSafeHwnd();LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED;::SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong);g_pSetLayeredWindowAttributes(hWnd, 0, (BYTE)m_sldAlpha.GetPos(), 2);::RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); 为了能够使用该函数,还必须在上述语句之前添加预定义语句:#define WS_EX_LAYERED 0x00080000 异形窗体特效的实现 使用SetLayeredWindowAttributes()创建异形窗体是非常简单的,具体过程与半透明窗体的实现极为类似,所不同的只是将标志设置为LWA_COLORKEY并指定需要透明显示的关键色:// 指定关键色HWND hWnd = GetSafeHwnd();LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED;::SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong);g_pSetLayeredWindowAttributes(hWnd, RGB(255, 255, 255), 0, 1);::RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); 人气很旺啊.楼主好人.同祝楼主新年发财.!http://www.mndsoft.com/blog/default.asp New year!May you be happy 今天散分的真多。过年了,新年好阿!http://www.mndsoft.com/blog/default.asp 怎么将combox的选择的值和数据库中值对应的ID关联起来 关于更新本地本地日期和时间,使其与标准北京时间相同 散分:英雄救落水美女的注意事项 请教各位:关于treeview控件里的一个需求! ActiveReport 合计数不对急求解决办法 我动态做了个菜单,怎么得到菜单的名称? 小问题,关于用鼠标移动无标题栏窗体的问题! 播放媒体文件是,怎么样进行进度的控制?请高手赐教 如何得到一个目录中的所有文件名 数据相加接近设定值 怎么让程序暂停20秒再往下执行? 我打印第一页都是白页怎么解决?
接分............
HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function
DWORD dwFlags // action
); 其中dwFlags有LWA_ALPHA(值为2)和LWA_COLORKEY(值为1)两种设置,如果LWA_ALPHA被设置的话,通过bAlpha参数指定窗体的透明度;如果LWA_COLORKEY标志被设置的话,则指定关键色为crKey,该颜色所覆盖的区域将从窗体去除,去除后的区域将不再进行点击检测,其他颜色则正常显示。如果阿尔法混合值设置为0,其窗口区域同样不进行点击检测。 前面说过,SetLayeredWindowAttributes()函数是Windows 2000新增的一个API函数,它所在的模块为USER32.DLL。在用GetModuleHandle()装载USER32.DLL模块并调用GetProcAddress()得到函数 SetLayeredWindowAttributes()在User32.dll中的指针后就可以通过SetLayeredWindowAttributes()函数将窗体设置为半透明了:
// 全局变量
typedef BOOL (WINAPI *lpfn) (HWND hWnd, COLORREF cr, BYTE bAlpha, DWORD dwFlags);
lpfn g_pSetLayeredWindowAttributes;
……
// 获取函数 SetLayeredWindowAttributes 在User32.dll中的指针
HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));
g_pSetLayeredWindowAttributes = (lpfn)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
if (g_pSetLayeredWindowAttributes == NULL)
::PostQuitMessage(0);
这段代码通常在程序初始化时运行以及时将USER32.DLL模块装载到诖娌⒒袢〉玫絊etLayeredWindowAttributes()函数指针。在程序退出前需要通过FreeLibrary()函数释放先前加载的模块:// 卸载模块
if (m_hUser32 != NULL)
FreeLibrary(m_hUser32); 在将窗体设置为半透明时,首先要获取得到该窗体的窗口句柄,以指明要操作的是哪一个窗口。如果是对本应用程序中的某个窗口进行设置,可以通过传递窗口句柄或是用GetSafeHwnd()来动态获取。如果要对本程序外的某个程序窗口进行设置,一般的做法是通过对FindWindow()函数的调用来获取指定窗口标题的窗口句柄。在得到窗口句柄之后并不能直接调用SetLayeredWindowAttributes()进行设置,需要在GetWindowLong()获取得到当前窗口风格设置后在其基础之上添加WS_EX_LAYERED扩展风格,并通过SetWindowLong()函数将其设置:// 半透明
HWND hWnd = GetSafeHwnd();
LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED;
::SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong);
g_pSetLayeredWindowAttributes(hWnd, 0, (BYTE)m_sldAlpha.GetPos(), 2);
::RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN); 为了能够使用该函数,还必须在上述语句之前添加预定义语句:#define WS_EX_LAYERED 0x00080000 异形窗体特效的实现 使用SetLayeredWindowAttributes()创建异形窗体是非常简单的,具体过程与半透明窗体的实现极为类似,所不同的只是将标志设置为LWA_COLORKEY并指定需要透明显示的关键色:// 指定关键色
HWND hWnd = GetSafeHwnd();
LONG lWindowLong = GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED;
::SetWindowLong(hWnd, GWL_EXSTYLE, lWindowLong);
g_pSetLayeredWindowAttributes(hWnd, RGB(255, 255, 255), 0, 1);
::RedrawWindow(hWnd, NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
May you be happy
过年了,新年好阿!
http://www.mndsoft.com/blog/default.asp