MFC view 不调用OnInitialUpdate
时间: 2024-01-28 13:03:11 浏览: 162
VC MFC 在DOC-VIEW中实现全屏幕显示
MFC中的View类的OnInitialUpdate函数是在视图被创建后首次显示前被调用的。如果你的MFC View类没有调用OnInitialUpdate函数,可能是以下几个原因之一:
1. 你没有在创建视图后调用CView类的OnInitialUpdate函数。通常在视图类的Create函数中调用OnInitialUpdate函数,例如:
```
BOOL CMyView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
if (!CView::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext))
return FALSE;
OnInitialUpdate(); //调用OnInitialUpdate函数
return TRUE;
}
```
2. 你没有在创建视图时指定正确的创建上下文(CCreateContext)。在创建视图时,需要指定正确的创建上下文,包括文档对象指针等信息。如果创建上下文不正确,OnInitialUpdate函数可能不会被调用。例如:
```
CMyView* pView = new CMyView;
CCreateContext* pContext = new CCreateContext;
pContext->m_pCurrentDoc = pDoc; //指定文档对象指针
pView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE, rect, pParentWnd, nID, pContext);
```
3. 你在重写OnInitialUpdate函数时没有调用基类的实现。如果你重写了OnInitialUpdate函数,需要在自己的实现中调用基类的实现,以确保MFC框架能够正确处理视图的初始化过程。例如:
```
void CMyView::OnInitialUpdate()
{
CView::OnInitialUpdate(); //调用基类的实现
//自己的初始化代码
}
```
阅读全文