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