2012-10-25 29 views
1

我有一個基於MFC對話框的應用程序。用戶可以更改對話框的語言,我通過關閉現有對話框並使用更改後的語言打開另一個對話框。問題是,任務欄中的效果是一個圖標被刪除,另一個圖標被創建。如果我的應用程序的圖標不是任務欄中的最後一個圖標,它將被視爲移動到任務欄圖標集的末尾。保持任務欄圖標,替換MFC對話框

我想保留圖標在任務欄中的位置,而不是爲了防止圖標閃爍發生。我怎麼做?

的應用程序必須支持從Windows XP OS'es到Windows 7

編輯:另類的問題了,我會接受一個答案是如何創建一個在任務欄中顯示還是一個不可見的窗口,以及如何將相關窗口消息從該窗口轉發到我的主窗口?

+0

您是否嘗試過打開新的對話框關閉舊的過嗎? –

+0

我想過了,但不知道如何實現它。目前我在循環中調用DoModal。我將如何同時打開兩個模態對話框,然後關閉第一個對話框?另外,我認爲在短時間內,任務欄中會出現兩個圖標。我希望提供更有效的解決方案。 – Dialecticus

回答

1

使該對話框成爲另一個外部父窗口的子項。父母可以是對話框或任何其他類型的窗口;所有它將提供的是標題欄。如果用戶試圖調整它的大小,它將不得不將大小調整命令轉發到對話框,否則你不需要在父窗口中做很多事情。

+0

我會感激一個例子,或者一個例子的鏈接。例如,我不知道如何處理'm_pMainWnd'和'm_pActiveWnd',誰知道還有什麼等待下線。 – Dialecticus

+0

我正在嘗試隱藏窗口的方法,但是如何顯示隱藏窗口的任務欄按鈕?對於WS_EX_APPWINDOW風格的工作窗口必須是可見的。 – Dialecticus

+0

我從來沒有說過讓外窗看不見。保持可見狀態,並將其他對話框放入其中;在外部對話框的WM_INITDIALOG處理程序中使用'Create'而不是'DoModal'。 –

1

爲什麼不使用CFormView代替對話框?這樣就有一個框架窗口包圍對話框(嵌入在窗體視圖中),它是擁有任務欄圖標的框架窗口。

創建一個顯示CFormView的SDI應用程序。在初始化時以默認語言(或用戶以前選擇的任何語言)顯示對話框。當用戶選擇「更改語言」選項時,只需更改正在顯示的表單視圖即可。

獎勵功能:使用此設計,框架將爲您處理諸如語言特定的加速器和菜單等事情,而無需付出任何努力。

更多關於如何做到這一點,看看http://www.codeguru.com/cpp/w-d/doc_view/viewmanagement/article.php/c3341/Multiple-Views-Using-SDI.htm