【问题标题】:Set focus on a modeless dialogs hosted in an MFC view将焦点放在托管在 MFC 视图中的无模式对话框上
【发布时间】:2012-10-04 08:05:26
【问题描述】:

我有一个 MFC 视图,还有另一个实现 MFC 对话框的项目。 我想在我的视图中主持对话。 我的视图属于 CFormView 类。

我在视图代码中是这样做的:

m_myDialog->Create(myDialog::IDD, this);

现在,我看到了我的对话框,但我无法将焦点设置在它上面,也无法使用它。

为了在我的视图中托管我的对话框,并且能够使用它并将焦点设置为它,作为视图的一部分,我必须进行哪些更改?

谢谢

【问题讨论】:

    标签: c++ mfc dialog modal-dialog


    【解决方案1】:

    我知道这已经是几周前的事情了,但您需要提供更多代码或更好地了解正在发生的事情。

    我自己也遇到过类似的问题,我第一次尝试这个时发现很难找到相关信息。以下是我用过的东西的摘要。我确信可能有更好的方法来做到这一点,但我发现它按我想要的方式工作;

            //MyApp.h
    
            class MyDialogClass;
    
            class MyApp : public CWinAppEx
            {
            public:
                MyApp();
                virtual BOOL InitInstance();
                //code etc
                MyDialogClass *p_myDlg;
            };
    
    
            //MyApp.cpp
            #include "MyApp.h"
            #include "CMyView.h"
            #include "mydialogclass.h"
    
    
            BOOL MyApp::InitInstance()
            {
            //code etc
    
                p_myDlg = CMyView::GetView()->p_myDlg;  
    
            //can be used here or elsewhere. I have mine linked with a button
                p_myDlg->ShowWindow(true);
    
            };
    
    
            //CMyView.h
    
            class MyDialogClass;
    
            class CMyView : public CFormView
            {
             protected: // create from serialization only
                CMyView();
                DECLARE_DYNCREATE(CMyView)
    
             public:
                enum{ IDD = IDD_CMyView_VIEW };
    
                    static CMyView* GetView();
                    MyDialogClass *p_myDlg;
                afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
            };
    
    
            //CMyView.cpp
            #include "MyApp.h"
            #include "CMyView.h"
            #include "mydialogclass.h"
    
            int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
            {
                if (CFormView::OnCreate(lpCreateStruct) == -1)
                    return -1;
    
                p_myDlg = new MyDialogClass(this);
    
                return 0;
            }
    
            void CMyView::DisplayDialogFoo()
            {
    
               //can be used here or elsewhere. I have mine linked with a button
               p_myDlg->ShowWindow(true);
    
            }
    
            //mydialogclass.h
            class MyDialogClass : public CDialog
            {
                DECLARE_DYNAMIC(MyDialogClass)
             public:
                MyDialogClass(CWnd* pParent /*= NULL*/);
                enum { IDD = IDD_MyDialog_DLG };
            };
    
            //mydialogclass.cpp
            #include "mydialogclass.h"
    
            MyDialogClass::MyDialogClass(CWnd* pParent /*=NULL*/)
                : CDialog(MyDialogClass::IDD, pParent)
            {
                Create(IDD, pParent);
            }
    

    这里还有一篇我刚刚找到的文章: http://www.codeproject.com/Articles/1651/Tutorial-Modeless-Dialogs-with-MFC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多