各位大神好,我想在MFC單檔案的右邊分割視窗中(使用CSplitterWnd實作)放上一個CFormView的視圖。再在其中創建一個CPropertySheet物件,在CFormView的OnCreate函式中執行CPropertySheet的Create函式總是出錯。
int CRightView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
m_sheet = new CPropertySheet(_T("Simple PropertySheet"));
ASSERT(m_sheet);
m_devInfo = new CDevInfo;
m_sheet->AddPage(m_devInfo);
m_sheet->Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
CRect rc;
GetClientRect(rc);
m_sheet->MoveWindow(rc);
return 0;
}
經跟跟蹤CPropertySheet的Create函式,在執行PropertySheet(&m_psh)時出錯
// hook the window creation process
AfxHookWindowCreate(this);
HWND hWnd = (HWND)PropertySheet(&m_psh);
//最終跟蹤到return :: CallWindowProc函式時出錯,此時處理的訊息是WM_INITDIALOG(從uMsg值),
LRESULT CWnd::DefWindowProc(UINT nMsg, WPARAM wParam, LPARAM lParam)
{
if (m_pfnSuper != NULL)
return ::CallWindowProc(m_pfnSuper, m_hWnd, nMsg, wParam, lParam);
WNDPROC pfnWndProc;
if ((pfnWndProc = *GetSuperWndProcAddr()) == NULL)
return ::DefWindowProc(m_hWnd, nMsg, wParam, lParam);
else
return ::CallWindowProc(pfnWndProc, m_hWnd, nMsg, wParam, lParam);
}
同樣的代碼,如果不用分割視窗,就沒問題。請各位賜教。
uj5u.com熱心網友回復:
m_sheet = new CPropertySheet(_T("Simple PropertySheet"));ASSERT(m_sheet);
m_sheet->Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
m_devInfo = new CDevInfo;
m_devInfo.Create......!!!!!
m_sheet->AddPage(m_devInfo);
uj5u.com熱心網友回復:
您好,沒太明白您的意思,是說m_sheet->Create(...)這條陳述句有錯?
我試過m_sheet->Create(this, WS_CHILD_WS_VISIBLE)這樣寫,是一樣的錯誤。
還是說要在創建sheet之后,再加頁面?
uj5u.com熱心網友回復:
見 紅的m_devInfo.Create......!!!!!
要 Create 再 加
uj5u.com熱心網友回復:
還是一樣報錯。
uj5u.com熱心網友回復:
windows 創建物件 分 2步1 構造一個物件 (定義 或 new)
2 Create 這個 物件
uj5u.com熱心網友回復:
這段代碼在不分割的CFormView內是沒有問題的,只是因為放到了分割視窗內,才有了這個問題。uj5u.com熱心網友回復:
CFormView 的 對話框 是 怎么 處理的不用 CFormView (派生一個 view)行不行 ?
uj5u.com熱心網友回復:
右邊的視圖是從CFormView派生的, 增加了屬性頁和對話框的指標成員:class CRightView : public CFormView
{
DECLARE_DYNCREATE(CRightView)
protected:
CRightView(); // 動態創建所使用的受保護的建構式
virtual ~CRightView();
public:
virtual void OnDraw(CDC* pDC); // 重寫以繪制該視圖
#ifdef _DEBUG
virtual void AssertValid() const;
#ifndef _WIN32_WCE
virtual void Dump(CDumpContext& dc) const;
#endif
#endif
protected:
CPropertySheet* m_sheet;
CDevInfo* m_devInfo;
....
};
uj5u.com熱心網友回復:
放 OnInitialUpdate() 中m_sheet = new CPropertySheet(_T("Simple PropertySheet"));
ASSERT(m_sheet);
m_sheet->Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
m_devInfo = new CDevInfo;
m_devInfo->Create......
m_sheet->AddPage(m_devInfo);
uj5u.com熱心網友回復:
謝謝您的熱心。
試過,不行的。
uj5u.com熱心網友回復:
你那個 CFormView 有沒有 對話框 資源 ?uj5u.com熱心網友回復:
vc6 上沒問題
void CView2::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
m_sheet = new CPropertySheet(_T("Simple PropertySheet"));
// 1st add page !
m_devInfo = new CDevInfo;
m_sheet->AddPage(m_devInfo);
//
m_sheet->Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
CRect rc;
GetClientRect(rc);
m_sheet->MoveWindow(rc);
}
class CDevInfo : public CPropertyPage
class CView2 : public CFormView
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/23454.html
標籤:基礎類
