windowsSDK利用子視窗控制項設定視窗透明

2022-07-16 12:06:11 字數 1179 閱讀 5749

在看對話方塊之前,還是覺得有必要先看一下子視窗控制項,很多對話方塊的知識點都涉及到子視窗控制項。

正好看到學長的一篇實現視窗透明化的文章,對它比較感興趣,於是就想拿這個例子來練練手

首先先介紹下視窗透明化的實現:

首先是下面這個函式

long setwindowlong(hwnd hwnd,int nlndex,long dwnewlong);

setwindowlong該函式改變指定視窗的屬性.函式也將指定的乙個32位值設定在視窗的額外儲存空間的指定偏移位置。

setwindowlong(hwnd,gwl_exstyle,ws_ex_layered);
上面這條**擴充套件了一種視窗風格,其中gwl_exstyle設定乙個新的擴充套件風格。

接下來我們就可以使用下面這個函式來實現視窗的透明化:

bool setlayeredwindowattributes(

hwnd hwnd, // handle to the layered window 透明窗體的控制代碼

colorref crkey, // specifies the color key 顏色值

byte balpha, // value for the blend function 透明度,取值範圍是[0,255]

dword dwflags // action 透明方式,可以取兩個值:

);當取值為lwa_alpha時,crkey引數無效,balpha引數有效; 

當取值為lwa_colorkey時,balpha引數有效,而窗體中的所有顏色為crkey的地方將變為透明。

其中dwflags有lwa_alpha(值為2)和lwa_colorkey(值為1)兩種設定,如果lwa_alpha被設定的話,通過balpha引數指定窗體的透明度;如果lwa_colorkey標誌被設定的話,則指定關鍵色為crkey,該顏色所覆蓋的區域將從窗體去除,去除後的區域將不再進行點選檢測,其他顏色則正常顯示。如果阿爾法混合值設定為0,其視窗區域同樣不進行點選檢測。

以上這些就是有關視窗透明度實現的方法了,好,現在我結合子視窗控制項來具體實現它。**如下:

在編輯框裡輸入0-255的任意數字,點選確定,視窗就能實現透明化的設定了。

接下來的任務我打算在看完對話方塊之後再用對話方塊實現視窗透明的效果,增加滾動條的實現,滑鼠的實現,更好地理解和學習對話方塊

我是乙個新手,希望大家能幫我指出錯誤我好加以改正,謝謝~~

利用委託讓子視窗操作父視窗或傳值

思路如下 首先在子視窗定義委託和事件,然後在父視窗呼叫子視窗時訂閱事件,並在事件中寫入想讓子視窗操作父視窗或傳值的具體內容。如下 子視窗namespace 定義委託 public delegate void changetexthandler string text chrild.xaml 的互動邏...

利用委託來實現關閉子視窗通知父視窗執行方法

子視窗 public partial class formsub form public delegate void updatedatadelegate 宣告乙個委託 public updatedatadelegate updatetextbox 定義委託 public formsub initi...

子視窗呼叫父視窗

相信學計算機的大學生都碰過這樣的程式設計作業吧 程式執行後主視窗隱藏,然後彈出登入框,輸入賬號密碼登陸成功後再關閉登陸框,然後讓之前隱藏的主視窗重新顯示。沒錯,我當時就是這麼笨,怎麼都想不到好的解決辦法 當時的同學都是不管之前隱藏的主視窗,而是直接新建了乙個主視窗 剛好昨晚在做專案時碰到類似的情況,...