Win32API不規則視窗製作

2022-10-11 16:12:15 字數 2074 閱讀 1604

一、前述

也許您在其他軟體中經常看到下面這樣的介面,除了感嘆視覺設計的絢麗外,也注意到了和其他軟體的不同,視窗不是正規的正方形。這就是傳說中的非規則窗體,也叫多邊形視窗、不規則窗體(=。=名字夠俗的)

2. 建立乙個程式

為了方便學習起見,我們並不推薦您建立乙個空工程從頭作起,直接建立乙個win32專案的例項還是比較好的。

3. 新增需要的變數

這部分的**新增位置在顯示視窗之前。

通過loadimage載入bmp影象,也許您有更好的讀取影象的方法,但值得注意的是蒙板檔案一定要使用沒有損傷的單色影象格式,這對顏色判斷非常有用,例如bmp、gif等,在這裡我們使用了的是乙個bmp的。

5. 最後的準備

寫上一些應用變數,在**我已經寫好了注釋。

6. 具體實現**片斷

實現方式為,判斷蒙板影象的每乙個點,如果這個點是需要鏤空的顏色,那麼就將它建立成為乙個rng(多邊形),並且使用combinergn組合到整合的多邊形中,最後使用setwindowrgn來設定整合多邊形為視窗區域。

在這裡值得一提,這部分還可以優化,您知道,一般來講鏤空的都是乙個區域而不是乙個點,那麼,我們或許可以做一點什麼東西就可以讓程式少執行幾次combinergn^_^

7. show一下效果

這就是依據蒙板建立出來的特殊視窗,上圖的效果為用滑鼠拖動時候的效果,您會發現:

標題欄是存在的

選單欄也是存在的

視窗的大小仍然存在問題

下一步來解決這個問題

8. 解決上面的問題

第一步,移動建立視窗**片斷到實際實現**的下面,讓我們先將鏤空區域設定好

第二步,修改createwindow特定引數,請閱讀注釋說明

第三步,將視窗的選單引數設定為空,這樣就可以去掉了選單欄

最終效果:

現在可以看到這個視窗已經變成了我們需要的樣子,下面就要為它畫上**,值得注意的是,此時,您需要使用alt+f4來關閉視窗。

9. 為視窗畫上影象

新增如下**到wm_paint訊息處理中

繪製的**位置您可以自定,例如您自己的迴圈邏輯上,現在只是將顯示到窗體的hdc上而已。

10. 執行一下效果看看

哈哈,我們得到了乙個漂亮的影象,簡直和真正的手機一樣懸浮在您的桌面上面,好了,從現在開始您可以套用上面的方法,為自己開發開發乙個特別效果的介面。

11. 如何拖動

您或許已經發現了仍然存在的重大問題,就是這個視窗沒有標題欄,怎麼才能拖動呢,總不能讓它永遠放在乙個地方,那麼我們下面就來解決這個問題。

解決的方法並不難,請在參照下面的**,新增wm_lbuttondown訊息,並增加一行sendmessage函式。

本文出自 「十五英吋的世界」 部落格,請務必保留此出處

用Win32 API建立不規則視窗

win32 api 支援建立不規則視窗,現在很多軟體使用這個技術,如 quicktime,windows media player 7等。a b使用api建立不規則視窗主要有兩種方式,即向量形狀疊加 布林運算 和點陣圖區域兩種。無論哪種方式,都可以實現上面兩圖的效果。在編寫這樣的視窗 前,我們必須清...

Win32 API講座 視窗函式

位。windows是用乙個長整形的資料的位設定方式來記錄類和視窗的樣式的。其中,視窗樣式由乙個32位樣式以及另乙個32 位擴充套件樣式來構成。類樣式操作由上述列表中的getclasslong以及getclasslong來進行,視窗樣式操作由getwindowlong 以及setwindowlong來...

視窗啟動特效,使用win32 api

一段使用api的視窗特效 自己可以試下,是不是在視窗顯示的時候會顯示各種特殊效果.有點驚喜的感覺 system.runtime.interopservices.dllimport user32 private static extern bool animatewindow intptr hwnd,...