0

3 つの CPropertyPages を持つ CPropertySheet を MFC アプリケーションに追加しようとしています。私の問題は、プロパティ シートが 1 秒未満しか表示されずに閉じてしまうことです。CPropertySheet を作成した後に別のモーダル ダイアログを開くと、CPropertySheet は開いたままになり、問題なく使用できます。これが私のコードです:

BOOL CSLIMOptCplusplusApp::InitInstance()
{

CWinApp::InitInstance();
SQLHENV m_1;
EnvGetHandle(m_1);


Login lgn;
lgn.DoModal();




CImageSheet*      imagedlg            = new CImageSheet("Image Capture Dialog" );
CImageDisplay*    pageImageDisplay    = new CImageDisplay;
CImageDimensions* pageImageDimensions = new CImageDimensions;
ListOption*       pageListOption      = new ListOption;

ASSERT( imagedlg );
ASSERT( pageImageDisplay );
ASSERT( pageImageDimensions );  
ASSERT( pageListOption );

imagedlg->AddPage( pageListOption);
imagedlg->AddPage( pageImageDimensions );
imagedlg->AddPage( pageImageDisplay );

imagedlg->Create( NULL,
              -1,
              WS_EX_CONTROLPARENT | WS_EX_TOOLWINDOW ); 

imagedlg->ShowWindow( SW_SHOW );

最初のパラメーターとしてimagedlg->Create(使用するときに問題が発生する可能性があると思います。NULL私がフォローしていたチュートリアルはthis、の代わりに使用されましたNULL。ただし、次のエラーが発生します。

IntelliSense: 型 "CSLIMOptCplusplusApp *" の引数は、型 "CWnd *" のパラメーターと互換性がありません

私も試しimagedlg->Create();てみましたが、これも一瞬しか点滅しません。CPropertySheet が閉じられるまで開いたままにしたいと思います。助けてくれてありがとう!

編集: これは、プロパティシートをどのように見せたいかのイメージです。最初のタブでは ListControl を使用してデータベース オプションを変更しましたが、他の 2 つのタブでは別のことを行います。私の意図は、ダイアログ/プロパティシートを現在と同じように見えるようにすることですが、閉じるのではなく開いたままにすることです。 Cプロパティシート

4

1 に答える 1

1

あなたの問題は、ダイアログ ベースのアプリケーション内でプロパティ シートを作成しようとすることにあります。実際、InitInstance 内ですべてを実行するという選択は、問題になる場合があります。

まず、すべてのオブジェクトをヒープ上に作成する必要はありません (つまり、'new' を使用します)。でも、それがあなたの望みなら、OK。シートが一瞬しか表示されないという元の問題については、 InitInstance は、特に指示がなければすぐに戻るように設計されています。したがって、インスタンスのシートが表示されます。これは、MFC が ' m_pMainWnd ' (実際には CWinThread::m_pMainWnd) と呼ばれる CWinApp クラスの派生メンバー変数への有効なポインターを期待しているためです。InitInstance 内からプロパティ シートまたはメイン ダイアログを開始する場合は、その変数を有効なウィンドウに設定する必要があります。ここに私が書いた簡単なサンプルがあります:

CPropertySheet* m_pdlgPropertySheet = new CPropertySheet(_T("Simple PropertySheet"));
    ASSERT(m_pdlgPropertySheet);

    // Add three pages to the CPropertySheet object.  Both m_pstylePage,  
    // m_pcolorPage, and m_pshapePage are data members of type  
    // CPropertyPage-derived classes in CView-derived class.
    Page1* m_pstylePage = new Page1;
    m_pstylePage->Construct(IDD_DIALOG1);
    Page2* m_pcolorPage = new Page2;
    m_pcolorPage->Construct(IDD_DIALOG2);
    m_pdlgPropertySheet->AddPage(m_pstylePage);
    m_pdlgPropertySheet->AddPage(m_pcolorPage);

    m_pMainWnd = m_pdlgPropertySheet;
    INT_PTR nResponse = m_pdlgPropertySheet->DoModal();

DoModal の上の行に注意してください。追加情報が必要な場合は、CPropertySheet を使用して完全なアプリケーションを作成するをご覧ください。最後に、MFC がどのようにアプリケーションを起動するか、および何が期待されるかについてお読みください。

于 2015-03-13T16:12:12.633 に答える