我有一個很奇怪的問題。我在Win7平臺上使用D2007。windows的哪個外部函數啓動一個WM_SIZE?
我的應用程序在第一臺Win7機器(我的)上運行良好,但UI在第二個Win7系統(三星平板電腦)上沒有正確刷新它。
我在平板電腦上使用遠程調試。經過長時間的評估和調試後,我發現WM_SIZE
沒有出現在我的其中一個框架中。每個框架包含在她的父母和Align = alClient
。
在我的機器上,此消息發送得很好,當然,UI具有正確的行爲。
Windows單元的哪個外部函數發送WM_Size消息代碼?
我會用更多的細節來解釋問題。
當應用程序被最大化或調整大小時,我看到兩臺Win7機器之間的UI刷新行爲不同。
一些框架正確調整大小,但其中一個不是。結構如下:
MainForm - >某些框架 - > PageControl - > TabSheet - > Frame1 - > Frame2。
需要注意的是:
我的UI正確運行在大多數計算機。
我使用標準的Windows機制
在這種結構中,所有的幀直到標籤頁包括被調整,但幀1不是。幀在運行時創建。
因爲我知道TabSheet的名稱,所以我可以在斷點處停下並查看WMSize。
我在TWinControl.AlignControls
中使用了一些條件性的斷點並捕獲了Frame1
的句柄。
在Classes.StdWndProc
上有一個斷點,我可以按照發送給Frame1.Handle
的消息。
當一切都OK:
$ 0046:WM_WINDOWPOSCHANGING
$ 0083:WM_NCCALCSIZE
$ 0085:WM_NCPAINT
$ 0014:WM_ERASEBKGND
$ 0047:E WM_WINDOWPOSCHANGED
$ 0005:WM_SIZE
而當調整大小失敗:
$ 0046:WM_WINDOWPOSCHANGING
$ 0085:WM_NCPAINT
$ 0014: WM_ERASEBKGND
$ 0047:E WM_WINDOWPOSCHANGED
因爲,該代碼是相同的,操作系統是Win7的在這兩種情況下,我不明白的問題。 我只知道在第二種情況下絕不會發送兩條消息WM_NCCALCSIZE
和WM_SIZE
。
這就是爲什麼我尋找返回WM_SIZE
響應的函數。
WM_SIZE消息由系統窗口管理器發送。這是你的問題的答案,但很難看出它會如何幫助你。我想你提出了錯誤的問題。 –
我注意到有時候有相同的行爲;我的哈克解決方案是在顯示後1秒內最大化我的窗口。你可以使用一個計時器。這個問題並沒有太深入。黑客行得通,對我很好。 –
請看一下主題和窗口縮放(%75,%100,%125)。我有類似的問題,在我改變了主題(與我的相同)後,我的應用程序的比例因子達到了100%的要求。 –