2012-12-28 75 views
2

我一直在處理自定義GUI框架,因爲我無法處理需要通過標記(XAML)開發UI的託管廢話或本機代碼。我正在嘗試創建一個使用該GUI框架的應用程序的原型,但我在WinAPI中遇到了一個特定於平臺的問題。正確刪除窗口框架/邊框

DWM並不真正允許定製非浸入式客戶區域,它允許的唯一事情是擴展到客戶區域,以便給定製假象。

因此,最好的行動方式是重建客戶區(相對於WINAPI)內的「非客戶區」,這需要我去掉標題,最大化,最小化按鈕等。所以,我基本上列舉所有我想要的東西,並將它們排列在一起並翻轉所有的位,以便停用它們。

~(WS_CAPTION | WS_SYSMENU | WS_HSCROLL | WS_VSCROLL | WS_MINIMIZE | WS_MAXIMIZE | WS_THICKFRAME) 

一旦這些風格走了,我不能用正常的關機程序(Alt + F4鍵,或者在任務欄上右擊並準備「關閉」),因爲他們沒有工作。我不得不手動攔截VK_ESCAPE和PostQuitMessage(0),這樣我就可以退出而不會被迫終止進程。

這是爲什麼呢?我該如何解決這個問題?

回答

5

簡短的回答

替換:

~(WS_CAPTION | WS_SYSMENU | WS_HSCROLL | WS_VSCROLL | WS_MINIMIZE | WS_MAXIMIZE | WS_THICKFRAME) 

有了:

WS_POPUP 

並沒有更多的時髦行爲。應用程序響應正確。享受蛋糕。

長的答案

啊,因爲一切在MSDN最近,蛋糕是一個謊言。窗口風格不只是視覺。它們還指定了應用程序窗口可用的固有窗口功能。現在,這裏有相當多的技巧需要觀察。

首先,MSDN對於其窗口樣式定義表格來說並不是真的很有用。 Windows的默認行爲是典型的標題,關閉邊界確定其爲佔據最簡單的表達,0 WS_OVERLAPPEDWINDOW包(32位值,所有比特下來,00000000),所以有人希望通過事急着可以只在CreateWindow*函數中爲樣式設置0,它會產生一個經典窗口。

你想要的是一個裸露的,骯髒的空窗口。而微軟的得到正是你要找的東西 - WS_POPUP這臺最高位爲1,其他都是0。這將放棄所有花哨的自動調整,窗口字幕和可愛的最小化,最大化和關閉按鈕。這意味着你將不得不重新實現一切。但那就是你要去的,對吧?

只需翻轉所有位是不夠的,你將下降想要的選項,同時也激活導致應用程序行事滑稽的選項,您遇到什麼,現在休息。因此,你要麼與其他東西或使用微軟定義的東西 - WS_POPUP

再次。享受蛋糕和快樂的編碼。

+0

哈哈,它的工作,正確關閉!謝謝!我現在感覺非常愚蠢。 –