1 BOOL CDialog7::OnInitDialog() 2 { 3 CDialog::OnInitDialog(); 4 5 // TODO: 在此添加額外的初始化 6 7 ::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,::GetWindowLongPtr(GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_LAYERED); 8 this->SetLayeredWindowAttributes(0,(255*70)/100,LWA_ALPHA); 9 10 return TRUE; // return TRUE unless you set the focus to a control 11 // 異常: OCX 屬性頁應返回 FALSE 12 }
涉及到的函數如下:
1 SetWindowLong
2 GetSafeHwnd
3 GetWindowLongPtr
4 SetLayeredWindowAttributes
一、
LONG SetWindowLong(
HWND hWnd, int nIndex, LONG dwNewLong );
SetWindowLong是一個Windows API函數。該函數用來改變指定窗口的屬性.函數也將指定的一個32位值設置在窗口的額外存儲空間的指定偏移位置。
hWnd 窗口句柄及間接給出的窗口所屬的類。
nlndex
指定將設定的大於等於0的偏移值。有效值的范圍從0到額外類的存儲空間的字節數減4:例如若指定了12或多於12個字節的額外窗口存儲空間,則應設索引位8來訪問第三個4字節,同樣設置0訪問第一個4字節,4訪問第二個4字節。要設置其他任何值,可以指定下面值之一:
常量 |
常量值 | 意義 |
---|---|---|
GWL_EXSTYLE |
-20 | 設定一個新的擴展風格。 |
GWL_HINSTANCE |
-6 | 設置一個新的應用程序實例句柄。 |
GWL_ID |
-12 | 設置一個新的窗口標識符。 |
GWL_STYLE |
-16 | 設定一個新的窗口風格。 |
GWL_USERDATA |
-21 | 設置與窗口有關的32位值。每個窗口均有一個由創建該窗口的應用程序使用的32位值。 |
GWL_WNDPROC |
-4 | 為窗口設定一個新的處理函數。 |
GWL_HWNDPARENT | -8 | 改變子窗口的父窗口,應使用SetParent函數。 |
當hWnd參數標識了一個對話框時,也可使用下列值:
常量 |
常量值 | 意義 |
---|---|---|
DWL_DLGPROC |
DWLP_MSGRESULT + sizeof(LRESULT) (值:4) | 設置對話框過程的新地址。 |
DWL_MSGRESULT |
0 | 設置在對話框過程中處理的消息的返回值。 |
DWL_USER |
DWLP_DLGPROC + sizeof(DLGPROC) (值:8) | 設置的應用程序私有的新的額外信息,例如一個句柄或指針。 |
dwNewLong
指定的替換值。
dwNewLong中可以使用以下一些列表控件的專用風格:
LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT
這四種風格決定控件的外觀,同時只可以選擇其中一種,分別對應:
大圖標顯示,小圖標顯示,列表顯示,詳細報表顯示
LVS_EDITLABELS 結點的顯示字符可以被編輯,對於報表風格來講可編輯的只為第一列。
LVS_SHOWSELALWAYS 在失去焦點時也顯示當前選中的結點
返回值
如果函數成功,返回值是指定的32位整數的原來的值。如果函數失敗,返回值為0。若想獲得更多錯誤信息,請調用GetLastError函數。
如果指定32位整數的原來的值為0,並且函數成功,則返回值為0,但是函數並不清除最后的錯誤信息,這就很難判斷函數是否成功。這時,就應在調用SetWindowLong之前調用SetLastError(0)函數來清除最后的錯誤信息。這樣,如果函數失敗就會返回0,並且GetLastError。也返回一個非零值。
二、
GetSafeHwnd,計算機語言函數。用於得到窗口指針句柄。
四、
SetLayeredWindowAttributes
此函數用於設置分層窗口透明度,常和 UpdateLayeredWindow 函數結合使用。
BOOL SetLayeredWindowAttributes(
HWND hwnd, // 指定分層窗口句柄
COLORREF crKey, // 指定需要透明的背景顏色值,可用RGB()宏
BYTE bAlpha, // 設置透明度,0表示完全透明,255表示不透明
DWORD dwFlags // 透明方式
);
其中,dwFlags參數可取以下值:
LWA_ALPHA時:crKey參數無效,bAlpha參數有效;
LWA_COLORKEY:窗體中的所有顏色為crKey的地方將變為透明,bAlpha參數無效。
LWA_ALPHA | LWA_COLORKEY:crKey的地方將變為全透明,而其它地方根據bAlpha參數確定透明度。