主题:关于OnCommand函数的问题,初学mfc,多谢赐教。
看孙鑫书,第6章,最后个例子练习下。
问题是这样,在frame中重写了oncommand函数,来捕捉菜单消息,在客户区上显示一行字符串。代码如下。
我想在显示字符串之前,清空客户区以前显示的内容,于是就用了 updatewindow()函数,但是不起作用,
为什么?
然后改用,Invalidate() 函数,让整个客户区无效,使得下一次WM_PAINT时,能重绘整个客户区,结果发现
客户区就一直是白色的,dc.textout语句执行了,但是看不到任何我要显示的东西,为什么?
我该如何做,才是正确的?
最后一个问题,为什么 CMyView::OnCommand() 不能像 CMainFrame::OnCommand一样捕捉到 菜单命令?
先谢过了,望赐教
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
int MenuCmdUI = LOWORD( wParam );
Cmfc_phonebookdemoView *pView = dynamic_cast <Cmfc_phonebookdemoView *>( GetActiveView() );
if( MenuCmdUI >= IDM_PHONE1 && MenuCmdUI < pView->m_strArray.GetSize()+IDM_PHONE1 ) {
// MessageBox( "phone number clicked!" );
CString str;
str.Format( "phonenumber: %s", pView->m_strArray.GetAt( MenuCmdUI-IDM_PHONE1) );
//下面2种方法都不行:
//UpdateWindow();
//Invalidate();
CClientDC dc( pView );
dc.TextOut( 0, 0, str );
return true;
}
return CFrameWnd::OnCommand(wParam, lParam);
}
问题是这样,在frame中重写了oncommand函数,来捕捉菜单消息,在客户区上显示一行字符串。代码如下。
我想在显示字符串之前,清空客户区以前显示的内容,于是就用了 updatewindow()函数,但是不起作用,
为什么?
然后改用,Invalidate() 函数,让整个客户区无效,使得下一次WM_PAINT时,能重绘整个客户区,结果发现
客户区就一直是白色的,dc.textout语句执行了,但是看不到任何我要显示的东西,为什么?
我该如何做,才是正确的?
最后一个问题,为什么 CMyView::OnCommand() 不能像 CMainFrame::OnCommand一样捕捉到 菜单命令?
先谢过了,望赐教
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
int MenuCmdUI = LOWORD( wParam );
Cmfc_phonebookdemoView *pView = dynamic_cast <Cmfc_phonebookdemoView *>( GetActiveView() );
if( MenuCmdUI >= IDM_PHONE1 && MenuCmdUI < pView->m_strArray.GetSize()+IDM_PHONE1 ) {
// MessageBox( "phone number clicked!" );
CString str;
str.Format( "phonenumber: %s", pView->m_strArray.GetAt( MenuCmdUI-IDM_PHONE1) );
//下面2种方法都不行:
//UpdateWindow();
//Invalidate();
CClientDC dc( pView );
dc.TextOut( 0, 0, str );
return true;
}
return CFrameWnd::OnCommand(wParam, lParam);
}