mfc設置半透明對話框


 
        
 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 在失去焦點時也顯示當前選中的結點

LVS_SINGLESEL 同時只能選中列表中一項

 

返回值

如果函數成功,返回值是指定的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參數確定透明度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM