2009-12-24 51 views
2

我有一個基於對話框的應用程序(MFC - VS 2008)。我有一個列表控件。我彈出其他對話框,但我也希望能夠回到父應用程序對話框。我可以回到父應用程序dilaog框,但問題是,即使我用鼠標點擊它,它仍然隱藏在「子」窗口後面。在MFC中,如何避免對話框停留在我的應用程序窗口之上?

我希望它來到前面。

有可能是一些明顯的我做錯了。我需要做什麼才能讓父窗口在焦點時出現在前面?我假設有一些屬性應該不在那兒,或者丟失了一些東西

如果有幫助,我可以發佈rc代碼。

編輯:

這裏是兩個對話框的.RC代碼。第一個是大型機窗口。

第二啓動用下面的代碼:

HistogramWindow *histwind; 

histwind = new HistogramWindow(this); 
histwind->Create(IDD_DIALOG_HISTOGRAM); 
histwind->ShowWindow(SW_SHOW); 

IDD_DTHISTOGRAMDLG_DIALOG DIALOGEX 0, 0, 320, 200 
STYLE DS_SETFONT | DS_FIXEDSYS | WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME 
EXSTYLE WS_EX_APPWINDOW 
CAPTION "dtHistogramDlg" 
FONT 8, "MS Shell Dlg", 0, 0, 0x1 
BEGIN 
    DEFPUSHBUTTON "OK",IDOK,209,179,50,14,NOT WS_VISIBLE 
    PUSHBUTTON  "Cancel",IDCANCEL,263,179,50,14,NOT WS_VISIBLE 
    CONTROL   "",IDC_LIST_SYMBOL_SETS,"SysListView32",LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,60,50 
END 

IDD_DIALOG_HISTOGRAM DIALOGEX 0, 0, 317, 184 
STYLE DS_SETFONT | DS_FIXEDSYS | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME 
EXSTYLE WS_EX_APPWINDOW 
CAPTION "Histogram" 
FONT 8, "MS Shell Dlg", 400, 0, 0x1 
BEGIN 
    DEFPUSHBUTTON "OK",IDOK,205,163,50,14,NOT WS_VISIBLE 
    PUSHBUTTON  "Cancel",IDCANCEL,260,163,50,14,NOT WS_VISIBLE 
    CONTROL   "",IDC_STATIC,"Static",SS_BLACKFRAME,7,7,20,20 
END 

回答

1

我的一個朋友建議以下(和它的工作)

  • 設定次DLG的風格WS_CHILD
  • histwind->的setparent(NULL);
  • histwind-> ModifyStyle(WS_CHILD,0);

這有效,但是當我從父子窗口移動父窗口時會出現一個奇怪的行爲。移動窗口時隱藏,直到我釋放鼠標。

這會工作。

感謝所有的幫助。

4

你可能通過調用DoModal使用一個模式對話框。
相反,您需要創建一個modeless dialog box

爲此,請使用CWnd::CreateCWnd::ShowWindow

實施例:

CMyDialog *m_pMyDialog = new CMyDialog(this); 
m_pMyDialog->Create(CMyDialog::IDD); 
m_pMyDialog->ShowWindow(SW_SHOW); 
+1

我已經這樣做。問題不在於我無法進入大型機父窗口 - 我可以,只是子窗口總是在前面 - 即使大型機具有焦點。 – Tim 2009-12-25 04:27:31

+0

您可以隨時爲SetWindowPos設置正確的z順序。 – 2009-12-25 05:15:48

1

嘗試使用第二對話除去EXSTYLE WS_EX_APPWINDOW

+0

好吧,我會嘗試。 – Tim 2009-12-26 19:54:41

1

我有同樣的問題,但第二個對話框運行在CWinThread內。

我的解決辦法是:

m_pDlg->創建(IDD_DIALOG,CWnd的:: FromHandle(GetDesktopWindow()));

我發現進一步的幫助hrer:http://www.codeproject.com/Articles/1651/Tutorial-Modeless-Dialogs-with-MFC

+0

您的答案危險地接近僅作爲鏈接的答案。請在您的回答中總結鏈接的主要內容,以便搜索引擎可以更好地編制索引,並且如果鏈接失效,仍然會提供有用的信息。 – 2016-08-29 14:22:41

+0

我沒有CWinThread,但這個答案適用於我以上都沒有。謝謝! (儘管我不需要添加額外的CWnd :: FromHandle調用。) – aquirdturtle 2018-01-08 05:48:27

相關問題