从对话框窗口调用第二个对话框无法激活其中一个

时间:2010-02-22 19:49:47

标签: c++ winapi visual-c++ mfc dialog

抱歉愚蠢的问题,我正在做本教程中描述的所有事情: http://www.functionx.com/visualc/howto/calldlgfromdlg.htm

我创建了对话框窗口并尝试使用以下代码调用另一个对话框以响应按钮按下:

CSecondDlg Dlg;
Dlg.DoModal();

出现模态窗口但未激活,主窗口也不活动,一切都滞后。 这是一个截图:

Two dialogs interfering with each other http://img713.imageshack.us/img713/3919/63418833w.gif

以下是我的对话框的定义:

IDD_DIARY_TEST_DIALOG DIALOGEX 0, 0, 320, 200
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_APPWINDOW
CAPTION "diary_test"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "Second",IDC_SECOND_BTN,209,179,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,263,179,50,14
    CTEXT           "TODO: Place dialog controls here.",IDC_STATIC,10,96,300,8
END

IDD_SECOND_DLG DIALOGEX 0, 0, 195, 127
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_DISABLED | WS_CAPTION
CAPTION "Second"
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
    LTEXT           "TODO: layout property page",IDC_STATIC,53,59,90,8
    PUSHBUTTON      "Button1",IDC_BUTTON1,61,93,50,14
END

2 个答案:

答案 0 :(得分:4)

让我们只比较两个对话框的样式:

STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_DISABLED | WS_CAPTION

我已经指出粗体的差异,现在问题的原因应该是显而易见的:您的第二个对话框被禁用(WS_DISABLED),从而阻止它被激活!另一个区别是缺少DS_MODALFRAME样式,会导致它出现轻微异常(但不应该对行为产生很大影响);最终差异(WS_SYSMENU)仅阻止显示系统菜单(和左图标,右关闭按钮)。

屏幕截图中显示的另一个奇怪点,第二个对话框显示混合到第一个控件中,可能是由于您最初使用WS_CHILD as patriiice surmised ...

鉴于此以及您发布的其他代码,我怀疑您最初将其创建为属性页。属性页,而与普通对话框模板类似,旨在显示为子窗口;普通模态对话框

答案 1 :(得分:3)

您不显示源代码,但很可能您的第二个对话框被定义为子窗口而不是弹出窗口。只需在资源编辑器中验证即可。