VC6中的多个模式对话框?

Posted

技术标签:

【中文标题】VC6中的多个模式对话框?【英文标题】:Multiple Modal Dialogs in VC6? 【发布时间】:2011-12-23 16:31:33 【问题描述】:

我正在开发一个应用程序,该应用程序允许用户编辑在应用程序的其他部分生成的发票。查看发票时,如果选择编辑>编辑发票,则会启动一个模式对话框

void CViewInvoiceView::OnEditEditinvoice() 

    CEditInvoiceDlg dlg;
    if (dlg.DoModal() == IDOK)
    
        // Do Stuff
    

这很好用。但是,由于最近的规范更改,我现在需要提取与运输信息相关的字段,并通过单击第一个对话框中包含的 Edit Shipping 按钮在一个单独的对话框中使它们可编辑。

void CEditInvoiceDlg::OnButtonEditshipping() 

    CEditInvoiceShippingDlg shippingDlg;
    shippingDlg.m_shipToList = &m_shipToList;

    if (shippingDlg.DoModal() == IDOK)
    
            // Do Stuff
    


我的问题是我无法打开第二个对话框 (CEditInvoiceShippingDlg)。消息映射看起来不错

BEGIN_MESSAGE_MAP(CEditInvoiceDlg, CDialog)
...
ON_BN_CLICKED(IDC_BUTTON_EDITSHIPPING, OnButtonEditshipping)
...
END_MESSAGE_MAP()

但是如果我在我的 OnButtonEditshipping() 函数中放置一个断点,它就永远不会停在那个点上。点击 Edit Shipping 按钮实际上会关闭它所在的对话框,而不是打开第二个对话框。

【问题讨论】:

【参考方案1】:

查看您的 resource.h 文件并确保没有将两个 ID 分配给同一个编号。您还应该检查以确保它们都不在保留范围内:MSDN TN020: ID Naming and Numbering Conventions

【讨论】:

啊,这就是问题所在!在规范更改之前,我使用按钮从发票中删除所有运输信息,所以当我开始处理新对话框时,我只是更改了 ID 和标题。从消息映射中删除 'ON_BN_CLICKED(IDC_BUTTON_CLEARSHIPPING, OnButtonClearshipping)' 解决了这个问题,但我也清理了我的 resource.h 文件。谢谢!

以上是关于VC6中的多个模式对话框?的主要内容,如果未能解决你的问题,请参考以下文章

VC6.0中基于对话框的MFC EXE中的Tab Control控件如何使用???

VC6.0把显示在对话框中的图像另存为bmp图片在电脑D盘

vc6.0 mfc窗口问题

MFC VC++6.0 对话框怎么获得文档类中的数据

VC6.0编程,新建了一个对话框,怎么在这个对话框里添加文字?

MFC 模式子对话框没有收到消息或覆盖