我最近的工作在MFC编程,以下是这一段时间来在MFC编程方面获取的一些东西:
一.菜单上的关闭与窗口右上角的关闭按钮
如果想让点击菜单的关闭添加一些你想做的事情,在类CxxxAPP中添加对点击ID_APP_EXIT的消息的响应:
ON_COMMAND(ID_APP_EXIT, OnAppExit)
void CxxxAPP::OnAppExit()
{
// TODO: Add your command handler code here
CWinApp::OnAppExit();
}
如果想让点击窗口右上角关闭按钮做添加自己的事情,在类CMainFrame中添加对WM_CLOSE消息的响应:
ON_WM_CLOSE()
void CMainFrame::OnClose()
{
// TODO: Add your message handler code here and/or call default
CFrameWnd::OnClose();
}
上述代码通过MFC ClassWizard来添加比较快捷(CTRL+W)
二.CPropertySheet 怎么让它不能页切换
如果想让它在某页上的数据不合法时,不能进行页切换,方法如下:
CPropertySheet有两种模式,一种是属性页模式,另一种是向导模式,两种模式适合不同的应用,默认是属性页模式。
属性页模式:在页类CxxxPropertyPage重写OnKillActive函数,让其返回FALSE
BOOL CxxxPropertyPage::OnKillActive()
{
// TODO: Add your specialized code here and/or call the base class
if (不让页切换的条件)
{
return FALSE;
}
return CPropertyPage::OnKillActive();
}
向导模式:在页类CxxxPropertyPage重写OnWizardNext函数,让其返回-1
LRESULT CxxxPropertyPage::OnWizardNext()
{
// TODO: Add your specialized code here and/or call the base class
if (不让页切换的条件)
{
return -1;
}
return CPropertyPage::OnWizardNext();
}
三.CTreeCtrl 怎么做能使鼠标选择不到别的节点
当某节点的数据不合法时,不让进行节点切换,方法如下:
为CTreeCtrl添加TVN_SELCHANGING事件处理,返回*pResult = 1。
ON_NOTIFY(TVN_SELCHANGING, IDC_TASK_TREE, OnSelchangingTaskTree)
void CxxxView::OnSelchangingxxxTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if (不让节点切换的条件)
{
*pResult = 1
return;
}
*pResult = 0;
}
四.为窗体上的所有EDIT控件写唯一数据改变消息响应函数
当窗体上有很多EDIT控件时,如果不需要为每个EDIT控件添加数据改变响应函数,可以修改消息响应函数为同一函数:
ON_EN_CHANGE(IDC_XXX1, OnChangeEdit)
ON_EN_CHANGE(IDC_XXX2, OnChangeEdit)
……
ON_EN_CHANGE(IDC_XXXN, OnChangeEdit)
void test_page::OnChangeEdit()
{
// TODO: Add your control notification handler code here
}