0

MFCビューがあり、MFCダイアログを実装する別のプロジェクトがあります。ビューでダイアログをホストしたい。私のビューはクラスCFormViewです。

私は自分のビューコードでそのようにしました:

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

これでダイアログが表示されますが、フォーカスを設定できず、使用できません。

ビューでダイアログをホストし、ビューの一部として使用してフォーカスを設定できるようにするには、何を変更する必要がありますか?

ありがとう

4

1 に答える 1

0

これは数週間前のことですが、より多くのコードまたは何が起こっているかについてのより良いコンテキストを提供する必要があります。

私はあなた自身と同様の問題を抱えていて、私が最初にこれを試したとき、これについての情報を見つけるのは難しいと感じました。以下は私が使用したものの要約です。これを行うにはおそらくもっと良い方法があると思いますが、私はそれが私が望むように機能することを発見しました。

        //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

于 2012-10-18T11:30:50.223 に答える