MFC OnCommand 这个消息只是在鼠标左键单击控件的时候触发是吗?如果是控件双击或者右键的消息怎么触发呢?是所有的控件统一都会触发的,不是单独给某个控件,有这样的消息吗?我想在一个函数里统一处理所有的控件的各个消息,可能吗?MFC控件消息 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 MFC都封装好了的,是面向对象的,即是对感兴趣的消息处理就行,你所说的在SDK编程的情况下调用过程函数,然后对应用程序的消息队列中的消息进行分类处理,不过MFC下有个WindowProc这个可以重写的消息函数,建议看下windows程序设计,了解其内部工作原理 是所有的控件统一都会触发的,不是单独给某个控件。好像重写PreTranslateMessage(MSG* pMsg)函数,在这里进行处理在一个函数里统一处理所有的控件的各个消息,那么这个函数会很大,不利于管理 OnCommand或者OnNotify中处理,OnNotify比OnCommand中携带更多的信息 BOOL Cproduct1Dlg::OnCommand(WPARAM wParam, LPARAM lParam){ //AfxMessageBox(_T("hello"));// UINT nID = LOWORD(wParam); // HWND hWndCtrl = (HWND)lParam; // int nCode = HIWORD(wParam);// // if(nID >= 1000 && nID < 2000)// {// AfxMessageBox(_T("按钮"));// switch(lParam)// {// case WM_LBUTTONDBLCLK:// AfxMessageBox(_T("左键double"));// break;// case WM_LBUTTONUP:// AfxMessageBox(_T("左键up"));// break;// case WM_LBUTTONDOWN:// AfxMessageBox(_T("单击按钮"));// break;// case WM_RBUTTONUP:// AfxMessageBox(_T("右键up"));// break;// default:// break;// }// } return CDialog::OnCommand(wParam, lParam); }void Cproduct1Dlg::OnLButtonDblClk(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 int n = nFlags; CDialog::OnLButtonDblClk(nFlags, point);}BOOL Cproduct1Dlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult){ // TODO: 在此添加专用代码和/或调用基类 UINT nID = LOWORD(wParam); HWND hWndCtrl = (HWND)lParam; int nCode = HIWORD(wParam); if(nID >= 1000 && nID < 2000) { //AfxMessageBox(_T("按钮")); switch(lParam) { case WM_LBUTTONDBLCLK: AfxMessageBox(_T("左键double")); break; case WM_LBUTTONUP: AfxMessageBox(_T("左键up")); break; case WM_LBUTTONDOWN: AfxMessageBox(_T("单击按钮")); break; case WM_RBUTTONUP: AfxMessageBox(_T("右键up")); break; default: break; } } return CDialog::OnNotify(wParam, lParam, pResult);}我重载这两个函数,都收不到鼠标的消息啊?这样写有什么问题啊? 有没有专门介绍类库及函数方面的书 怎样判断控件有无group属性 如何删除编辑界面的查找标记(大圆点) ADO连接oracle问题 int a:1 是什么意思啊,那里有具体的说明 求VC6的下载地址?每粉了 谁有《vc网络高级编程光盘》这本书 安装vc6.0怎么会不能安装呢? 填充多边形时,如何把画刷中的位图,倾斜一个角度填充(百分吐血敬上。。。) 用ADO访问不同的数据库,代码不一样吗? 如何让一个线程充当读写角色 VS2010 导入 ado 编译不过
{
//AfxMessageBox(_T("hello"));
// UINT nID = LOWORD(wParam);
// HWND hWndCtrl = (HWND)lParam;
// int nCode = HIWORD(wParam);
//
// if(nID >= 1000 && nID < 2000)
// {
// AfxMessageBox(_T("按钮"));
// switch(lParam)
// {
// case WM_LBUTTONDBLCLK:
// AfxMessageBox(_T("左键double"));
// break;
// case WM_LBUTTONUP:
// AfxMessageBox(_T("左键up"));
// break;
// case WM_LBUTTONDOWN:
// AfxMessageBox(_T("单击按钮"));
// break;
// case WM_RBUTTONUP:
// AfxMessageBox(_T("右键up"));
// break;
// default:
// break;
// }
// }
return CDialog::OnCommand(wParam, lParam);
}
void Cproduct1Dlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
int n = nFlags;
CDialog::OnLButtonDblClk(nFlags, point);
}BOOL Cproduct1Dlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
// TODO: 在此添加专用代码和/或调用基类
UINT nID = LOWORD(wParam);
HWND hWndCtrl = (HWND)lParam;
int nCode = HIWORD(wParam); if(nID >= 1000 && nID < 2000)
{
//AfxMessageBox(_T("按钮"));
switch(lParam)
{
case WM_LBUTTONDBLCLK:
AfxMessageBox(_T("左键double"));
break;
case WM_LBUTTONUP:
AfxMessageBox(_T("左键up"));
break;
case WM_LBUTTONDOWN:
AfxMessageBox(_T("单击按钮"));
break;
case WM_RBUTTONUP:
AfxMessageBox(_T("右键up"));
break;
default:
break;
}
}
return CDialog::OnNotify(wParam, lParam, pResult);
}我重载这两个函数,都收不到鼠标的消息啊?这样写有什么问题啊?