2015-03-13 133 views
0

我想添加一個CPropertySheet與三個CPropertyPages到我的MFC應用程序。我的問題是,屬性表只顯示不到一秒鐘,然後關閉。當我在創建CPropertySheet後打開不同的模式對話框時,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: argument of type "CSLIMOptCplusplusApp *" is incompatible with parameter of type "CWnd *"

我也試過imagedlg->Create();,它也只是一瞬間閃光。 我希望我的CPropertySheet保持打開狀態,直到它關閉。謝謝你的幫助!

編輯: 這是一個圖像,我希望我的屬性表看起來像。我的第一個選項卡使用ListControl來更改數據庫選項,另外兩個選項卡將執行其他操作。我的目的是保持對話框/屬性表看起來與現在一樣,但保持開放而不是關閉。 CPropertySheet

+1

我很困惑你正在使用的窗口樣式。你的意圖是什麼? – rrirower 2015-03-13 15:15:34

+0

我更新了圖片和說明。我的意圖是有三個選項卡在我的應用程序中執行三種不同的操作。我使用CPropertySheet而不是TabControl,因爲它允許我將設計器製作的對話框添加爲頁面。 – 2015-03-13 15:24:53

+1

那麼,爲什麼擴展窗口的樣式?你顯示的代碼的上下文是什麼?它如何適合整個應用程序? – rrirower 2015-03-13 15:28:28

回答

1

你的問題在於試圖在基於對話框的應用程序中構造屬性表。實際上,您在InitInstance中執行所有操作的選擇有時可能會有問題。

對於初學者來說,不需要在堆上創建所有對象(即使用'new')。但是,如果這就是你想要的,好的。至於你的原始問題只會顯示片刻,InitInstance被設計爲如果沒有告知其他情況立即返回。因此,您可以看到實例的工作表。這是由於MFC期望有一個有效的指向CWinApp類派生成員變量的名爲'm_pMainWnd'(實際上是CWinThread :: m_pMainWnd)的指針。如果您想從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上方的行。如果您需要更多信息,請參閱Creating a full application using the CPropertySheet。最後,您可能需要了解MFC如何啓動應用程序以及期望的內容。

+0

謝謝你你的答案。我在那裏犯了一個錯誤。我通過將'm_pMainWnd'設置爲屬性表並使用'INT_PRT nResponse ='進行了修改。窗口仍然打開,然後關閉。在進一步的研究中,可能需要至少一個模態窗口。我現在試圖找到如何設置窗口而不是無模式的模式。 – 2015-03-13 17:34:34

+0

將每個頁面的屬性「System Modal」設置爲true都不起作用。 – 2015-03-13 17:38:20

+0

我找到了一個解決方案,但對我來說沒有意義。在InitInstance()的末尾,我做了'返回TRUE'。當我使用'Create()'而不是'DoModal()'創建窗口時,這將保持我的窗口打開。 – 2015-03-13 17:50:01