刚开始学习MFC单文档的使用,想在工具栏上添加一个按钮。在那个空白按钮上,画上图案,就会新增一个按钮。然后利用类向导添加响应消息。在“命令”中找到按钮的ID,添加COMMAND消息处理。这时,按钮就会由灰色,变成可用状态。编写事件处理函数如:
void CMainFrame::OnFormview1()
{
AfxMessageBox(_T("ok"));
m_bBtn1 = FALSE;
}
//如果想禁用此按钮,可以定义一个类成员变量,如下:
void CMainFrame::OnUpdateFormview1(CCmdUI *pCmdUI)
{
pCmdUI->Enable(m_bBtn1);
}
注意:事件处理类的为CMainFrame,如果添加到其他类中,就不起作用了。
要想到点击按钮时,实现视图切换。请先在资源中,添加一个FORMVIEW视图窗口,并添加一个相应的类。继承自CFormView类,如CMyView。
在CMainFrame类中,添加两个成员变量,如下:
//请包含两个视图类的.h文件
CMyView * m_pMyView;//新添加的视图
CMFCApplication1View * m_pNormalView;//原来默认视图
点击工具栏上的按钮,显示新视图,如下:
void CMainFrame::OnBtnStart()
{
CMFCApplication1Doc * pDoc = (CMFCApplication1Doc*)GetActiveDocument();
if (m_pMyView==0)
{
m_pNormalView = (CMFCApplication1View*)GetActiveView();
m_pMyView = new CMyView;
m_pMyView->Create(NULL, NULL, AFX_WS_DEFAULT_VIEW, rectDefault, this,
AFX_IDW_PANE_FIRST + 1, NULL);
}
pDoc->AddView(m_pMyView);
m_pNormalView->SetDlgCtrlID(AFX_IDW_PANE_FIRST + 1);
m_pMyView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pMyView->ShowWindow(SW_SHOW);
m_pNormalView->ShowWindow(SW_HIDE);
SetActiveView(m_pMyView);
pDoc->RemoveView(m_pNormalView);
this->RecalcLayout();
}
因为CFormView类中的Create函数为protected类型,所以CMyView须重载此函数:
BOOL Create(LPCTSTR, LPCTSTR, DWORD,const RECT&, CWnd*, UINT, CCreateContext*);
BOOL CMyView::Create(LPCTSTR a, LPCTSTR b, DWORD c, const RECT&d, CWnd*e,
UINT f, CCreateContext*g)
{
return CFormView::Create(a, b, c, d, e, f, g);
}
如果,要再切换回原来的视图,可以再添加一个按钮,点击事件处理函数,如下:
void CMainFrame::OnBtnShow()
{
CMFCApplication1Doc * pDoc = (CMFCApplication1Doc*)GetActiveDocument();
pDoc->AddView(m_pNormalView);
m_pNormalView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
m_pMyView->SetDlgCtrlID(AFX_IDW_PANE_FIRST+1);
m_pMyView->ShowWindow(SW_HIDE);
m_pNormalView->ShowWindow(SW_SHOW);
SetActiveView(m_pNormalView);
pDoc->RemoveView(m_pMyView);//文档绑定可以视需要而定
this->RecalcLayout();
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。