2012-06-05 124 views
1

我的應用程序使用堆疊對話框在多個位置的選項之間進行選擇。例如,下面的對話框使用兩個堆疊的對話框:MFC子對話框意外更改大小

  1. 要選擇「拍攝方法」,用戶可以從右下角的下拉列表中進行選擇。這改變了它上面的一個子對話框。
  2. 「高級選項」框(位於子對話框中)在簡化的界面和更完整的界面之間進行選擇。

correct dialog

在每種情況下,堆疊的對話框是使用圖像對象作爲父對話框的佔位符來實現。選擇頁面時,將調用SetWindowPos來移動/調整子對話框(pNewPage)的大小以適應佔位符。

// Show the newly selected page 
pNewPage->ShowWindow (SW_SHOW) ; 
pNewPage->SetFocus() ; 

// Position the newly selected page 
CRect rcDlgArea ; 
GetDlgItem (IDC_DLG_AREA)->GetWindowRect (&rcDlgArea) ; 
ScreenToClient (&rcDlgArea) ; 

pNewPage->SetWindowPos (this, 
    rcDlgArea.left, rcDlgArea.top, rcDlgArea.Width(), rcDlgArea.Height(), 
    SWP_NOACTIVATE) ; 

這工作得很好,直到如今,我卻在德國的用戶之一是有一個問題,我無法解釋。當他打開工具,層疊的頁面出現這樣看:

incorrect dialog

注意,子窗口被拉伸,這樣在孩子對話文本顯示比父文本大。

除了可視化佈局問題之外,子對話框還似乎「覆蓋」右下角(位於父對話框中)的選擇下拉列表。儘管下拉列表仍然可見,但在單擊下拉列表時,不會收到CBN_SELCHANGE消息。

我無法解釋爲什麼子對話框正在重新調整比例。正如你上面看到的,我試圖非常明確地調整對話框的大小,但這似乎不起作用。

任何人都可以想到爲什麼子對話框可能會在某些系統上重新調整比例而不是在其他系統上?任何幫助將不勝感激。

謝謝

邁克爾

回答

1

好像該用戶擁有比是在第一張截圖選擇使用較大的字體。請注意,對話框大小在DLU中指定,其大小與用戶爲字體選擇的大小一致。您可以顯式縮放您的對話框,以像素爲單位(壞的解決方案,這會使您的應用在某些配置上看起來更糟糕),或者在DLU的任何地方進行計算。你的第二張截圖似乎也表明,子對話框使用的字體與嚮導的字體不同。我不確定這是爲什麼,我想這是你創建它時傳遞給嚮導的窗口樣式中的東西。

+0

這對我來說似乎很奇怪 - 兩種不同的尺寸。我認爲DLU在整個系統中是一致的。用戶似乎認爲該系統是存貨,但似乎不太可能。我假設這是孩子對話字體大小錯誤,但我會檢查用戶哪一個匹配系統的其餘部分。 –