2012-12-12 65 views
2

好吧。就在你認爲你已經把所有東西都弄清楚的時候,你沒有。Windows Form Appbar桌面調整大小

我已經編碼和測試了一個功能性的appbar類。當我使用一個簡單的Windows窗體來擴展和測試這個類時,它在XP(SP 3,32位)和Windows 7(64位)中都沒有問題。其他窗口都可以訪問,並且它們都可以適當地最大化但是,當我將我的「複雜」Windows窗體(即它是一個應用程序)從appbar類派生出來時,桌面似乎「踢出」它。通過這個,我的意思是說,所有事物的尺寸都是最初適合的尺寸,但是桌面尺寸會恢復到原來的尺寸。有時,在將表單放入應用程序模式後發生這種情況的速度很快,其他時候發生在單擊表單之外(例如打開瀏覽器)時發生,以及在表單調用MessageBox時發生其他情況。我已經把所有的Forms函數放在後臺工作者的角度考慮可能是問題,但結果是一樣的。我已經在下面發佈了三張圖片。第一個將應用程序顯示爲其初始的WinForm。第二個顯示appbar「正在運行」。最後一個顯示appbar不「運行」。如果您遇到問題,請注意回收站。有任何想法嗎?

enter image description here enter image description here enter image description here

編輯: 我發現通過記錄這些調用。每次桌面調整到「正常」時,它們都會啓動。現在我試圖看看在「簡單」版本中是否存在類似的模式。

  • 味精= 0x6從(WM_ACTIVATE)HWND = 0x1e03ea WPARAM =爲0x0 LPARAM =爲0x0結果=爲0x0
  • 味精=爲0x1C(WM_ACTIVATEAPP)HWND = 0x1e03ea WPARAM =爲0x0 LPARAM = 0x1a90結果=爲0x0
  • MSG = 0X1A(WM_WININICHANGE)HWND = 0x1e03ea WPARAM =值爲0x2F LPARAM = 0x9fe048結果=爲0x0
  • 味精= 0X1A(WM_WININICHANGE)HWND = 0x1e03ea WPARAM =爲0x18 LPARAM = 0x9fe038結果=爲0x0
+0

關於上面的四條消息,我已經將其縮小到最低的兩個。在簡單的形式中,這些只在appbar被解除連接時觸發。本來四個小時之前我們會很高興地發現這些,哈哈。 – Tebc

+0

這只是讓人更加困惑。 FYI,這裏是層次結構:Form - > AppBar - > Application。這在工作和非工作版本中都是一樣的。我注意到在工作版本中,WININICHANGE從不顯示,因爲appbarHandle變量等於調用的hWnd參數。但是,在非功能版本中,這是不正確的。這裏,應用程序句柄就是發送的內容。唉,我通過將appbarHandle變量設置爲受保護的內部(與私有相對)並在應用程序構造函數中分配它來糾正此問題,但問題仍在繼續。哎呀。仍在搜索... – Tebc

+2

在附註中,如果您打算標記此,請告訴我爲什麼。我在這裏很新,所以這些信息會是有建設性的。謝謝。 – Tebc

回答

1

因此,這是一個徒勞無益的。如果我最後的評論聽起來很荒謬,那就是。雖然我對這個理論還沒有100%的確定(有人請在你的閒暇時間證明/反駁),但這兩個不同的句柄來自(1)表單實例化和(2)表單裝入時的實際句柄。我認爲API遵循與QUERY_POS和SET_POS相同的概念,即最初檢查並分配有效句柄。然後,在顯示錶單之前,它會重新檢查句柄值。長篇故事,一行代碼來驗證Load事件中的句柄值解決了整個問題。

編輯: 更好的是,HandleCreated事件是不可替代的。