本來是寫在CSDN上的,現在轉一下過來。
創建一個透明窗體,一種方法是設置windows下窗體的一個擴展窗口風格,在WINNT及以后,Windows開始支持用來創建透明窗體的一個API函數,先看一個效果圖:

這一個GDI繪圖的數字時鐘的窗口。實現了窗口的半透明效果。實現方法如下:
1
#define _WIN32_WINNT 0x5000 //定義WINNT的宏
2
//
3
hwnd = CreateWindow(szAppName,TEXT("Noble Qiao~"),
4
WS_POPUP | WS_SYSMENU | WS_VISIBLE ,
5
::GetSystemMetrics(SM_CXSCREEN)/2,
6
::GetSystemMetrics(SM_CYSCREEN)/2,
7
160,45,
8
NULL,NULL,hInstance,NULL);
9
//
10
::SetWindowLong(hwnd,GWL_EXSTYLE,GetWindowLong(hwnd,GWL_EXSTYLE)|WS_EX_LAYERED);
11
SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);
SetLayeredWindowAttributes(hwnd,0,(255*70)/150,LWA_ALPHA);設置了窗體的屬性,為透明效果,其中第二個參數為alpha值,即透明度。
另外,我在使用一個游戲引擎HGE做應用時,發現了關于這個API函數的一個問題,我把這個函數的調用放在初始化一些用于渲染場景的指針變量之前時,在 winxp下運行就會運行出錯,而在 Vista 下完全正常。
我猜想在XP下,這個函數被調用后,直接調用wndproc,此時如果游戲資源(如紋理)沒有被初始化,就會出錯;而在Vista中沒有這個問題,可能是Microsoft對這個API函數做了一定修改。
posted on 2010-01-28 22:41
喬寧博 閱讀(7585)
評論(3) 編輯 收藏 引用