【问题标题】:How do I display a CFormView in a mainframe?如何在大型机中显示 CFormView?
【发布时间】:2009-12-23 23:31:38
【问题描述】:

我创建了一个没有文档/视图支持的 SDI MFC 应用程序。 MFC 模板为我提供了一个带有空白窗口的应用程序(以及一个菜单等)

我想在那个主窗口上显示我的 CFormView 对象。 (基于gui编辑器中制作的dlg)

我该怎么做? CreateWindow 和 showwindow 似乎并不是所有需要的。我发现的所有网页似乎都在谈论 MDI 和其他不在我的应用程序中的内容。

  • 这种观点永远不会改变。它将有一个列表框控件,仅此而已。如何让新的表单视图出现?

  • 此外,如何让一个带有一个控件的浮动窗口也显示出来? (DLG 框和 DoModal() 在这里对我不起作用。)

【问题讨论】:

    标签: c++ visual-studio-2008 user-interface mfc


    【解决方案1】:
    • 为您的 CFormView 赋予 WS_CHILD 样式
    • 将其创建为以应用程序窗口为父窗口的 MODELESS 对话框
    • 调整其大小以适应父客户区,或调整父级以适应它。

    WS_CHILD 样式不是对话框模板的默认样式,但您可以添加它。 这将导致对话框在创建时显示在主框架窗口的客户区域内。

    您可能还想在消息泵中添加对IsDialogMessage() 的呼叫。这是需要让 TAB 键按照您期望的方式在对话框中执行的操作。

    编辑---- 我不是 MFC 程序员,所以我只能猜测您将如何在 MFC 中进行此操作。

    大概你还有对话模板,所以你会进入你的 .RC 文件 并删除 WS_POPUP 并将 WS_CHILD 样式添加到您的模板声明中。像这样:

    IDD_WHATEVER DIALOG DISCARDABLE  0, 0, 275, 217
    STYLE DS_MODALFRAME | DS_3DLOOK | WS_CHILD | WS_VISIBLE
    CAPTION "General"
    FONT 8, "MS Sans Serif"
    BEGIN
       // etc
    END
    

    在 Win32 中使用 CreateDialog 而不是 DialogBox 创建无模式对话框,在 MFC 使用Create() 而不是DoModal()

    【讨论】:

    • 谢谢 - 我会试试的。我不确定如何执行您提到的步骤。
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多