过年了,祝新年快乐!!散分!!!
up 问题点数:100、回复次数:41Top
1 楼ljhdi( )回复于 2005-01-31 13:10:24 得分 1
1Top
2 楼AndyFunction(开心)回复于 2005-01-31 13:10:26 得分 26
新年快了!Top
3 楼ljhdi( )回复于 2005-01-31 13:10:48 得分 1
嘿嘿,刚好赶上一楼Top
4 楼zxsjs(拐角)回复于 2005-01-31 13:16:03 得分 2
Happy new year
接分............
Top
5 楼yangao(人品决定一切,相貌决定人品!)回复于 2005-01-31 13:23:38 得分 2
Happy new year!Top
6 楼cindytsai(笨笨的蔡鸟)回复于 2005-01-31 13:25:55 得分 2
年年快乐!Top
7 楼viena(维也纳N02)回复于 2005-01-31 13:34:20 得分 2
谢谢,接分~Top
8 楼hdhai9451(☆新人类☆)回复于 2005-01-31 13:35:25 得分 2
Happy new year!
Top
9 楼tztz520(午夜逛街)回复于 2005-01-31 13:39:29 得分 2
现在都没心思上班了Top
10 楼viena(维也纳N02)回复于 2005-01-31 13:58:09 得分 2
现在都没心思灌水了~Top
11 楼gxgyj(杰克逊)回复于 2005-01-31 13:59:24 得分 2
jfTop
12 楼ldms1980(头等菜)回复于 2005-01-31 14:02:10 得分 2
SetLayeredWindowAttributes 有大侠告诉我这个API的意义吗?谢谢!Top
13 楼cobrastudio(老汉我)回复于 2005-01-31 14:14:15 得分 2
接分。
首先给出SetLayeredWindowAttributes()的函数原形:
BOOL SetLayeredWindowAttributes(
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);
Top
14 楼xiaoxiaoP(每天都是重新开始)回复于 2005-01-31 14:21:35 得分 2
接分,祝所有好人新年新气象
Top
15 楼ljhdi( )回复于 2005-01-31 14:22:46 得分 0
哎!想回家了!哪来的那么多心思呀Top
16 楼truewill(无处不在)回复于 2005-01-31 15:02:37 得分 2
upTop
17 楼CatchWind(追風少年)回复于 2005-01-31 15:14:07 得分 2
接分. 祝大家新春快樂.Top
18 楼myhgyp(也许是这样的,信不信由你)回复于 2005-01-31 15:54:50 得分 2
Happy new year!
接分有理Top
19 楼RUKYO(蠢蠢的男子汉 - 恋星夜柔光,舔烈酒豪情)回复于 2005-01-31 19:00:48 得分 2
祝大家新年快乐!
Top
20 楼aohan(aohan)回复于 2005-01-31 19:04:30 得分 2
接分先Top
21 楼mndsoft(枕善居(http://www.mndsoft.com/)回复于 2005-01-31 19:05:18 得分 2
人气很旺啊.楼主好人.同祝楼主新年发财.!
http://www.mndsoft.com/blog/default.aspTop
22 楼BRITZ(AZAZ FIGHTING!)回复于 2005-01-31 19:30:51 得分 2
新年快乐!!!Top
23 楼hanaichun(晕。。。。)回复于 2005-02-02 12:22:23 得分 0
谢谢各位!祝大家新年快乐!!!!Top
24 楼Leftie(左手,为人民币服务)回复于 2005-02-02 12:32:41 得分 2
大家同乐!!Top
25 楼hdhai9451(☆新人类☆)回复于 2005-02-02 12:45:23 得分 2
jfTop
26 楼qrlvls( 空 气 )回复于 2005-02-02 12:55:37 得分 2
New year!
May you be happyTop
27 楼laisiwei(.:RNPA:.刺猬)回复于 2005-02-02 13:56:47 得分 2
upTop
28 楼Hideal((努力學習VB.NET))回复于 2005-02-02 14:04:48 得分 2
純接分Top
29 楼Kshape(C/C++初学者~~~~)回复于 2005-02-03 02:34:58 得分 2
大家都快乐
过年好Top
30 楼sxycgxj(云中客)回复于 2005-02-03 09:32:23 得分 2
大家都快乐
过年好Top
31 楼wzzwwz(皮皮鲁)回复于 2005-02-03 09:38:34 得分 2
过年好
Top
32 楼domhuang(不名)回复于 2005-02-03 09:39:51 得分 2
upTop
33 楼yangao(人品决定一切,相貌决定人品!)回复于 2005-02-03 09:43:15 得分 2
upTop
34 楼mndsoft(枕善居(http://www.mndsoft.com/)回复于 2005-02-03 09:57:43 得分 2
今天散分的真多。
过年了,新年好阿!
http://www.mndsoft.com/blog/default.aspTop
35 楼sytzql(看窗)回复于 2005-02-03 10:16:57 得分 2
大家新年快乐哈!顶一个Top
36 楼pikachu8guan(30度仰角 (www.vbgood.com 新手学堂 Manager))回复于 2005-02-03 10:31:05 得分 2
汗 第三个新年散分的帖子Top
37 楼GHOSTSEA(GHOST SEA)回复于 2005-02-03 10:38:45 得分 2
使劲顶使劲顶!!!!!Top
38 楼tntzbzc(华裔大魔王—抗日要从娃娃抓起)回复于 2005-02-03 10:40:38 得分 2
接分是种好习惯Top
39 楼wanglei_qiu(王磊)回复于 2005-02-03 10:53:24 得分 2
接分Top
40 楼pcm112(独孤成明)回复于 2005-02-03 11:47:06 得分 2
我要分,呵呵!Top
41 楼axiang80(四月风)回复于 2005-02-03 12:16:10 得分 2
upTop




