BOOL CdynamicApp::PreTranslateMessage(MSG* msg )
{
if(msg->message == WM_COMMAND)
{
if(LOWORD(msg->wParam) == ID_FILE_OPEN)
AfxMessageBox("OPEN!");
if(LOWORD(msg->wParam) == ID_FILE_SAVE)
AfxMessageBox("SAVE");
}
return CWinApp::PreTranslateMessage(msg);}
用上面的函数能够捕获用户选择菜单栏和加速健的消息,msdn上说WM_COMMAND是选择菜单栏和加速健后系统发送的消息 。拿用户单击工具栏後系统发送的消息名是什么呢?是不是PreTranslateMessage不捕获工具栏的消息阿,因为我用下面的函数处理的时候(没有判断),当单击菜单兰的时候还是没有反应。请指点阿,先谢乐!
BOOL CdynamicApp::PreTranslateMessage(MSG* msg )
{
if(LOWORD(msg->wParam) == ID_FILE_OPEN)
AfxMessageBox("OPEN!");
if(LOWORD(msg->wParam) == ID_FILE_SAVE)
AfxMessageBox("SAVE");
return CWinApp::PreTranslateMessage(msg);}
{
if(msg->message == WM_COMMAND)
{
if(LOWORD(msg->wParam) == ID_FILE_OPEN)
AfxMessageBox("OPEN!");
if(LOWORD(msg->wParam) == ID_FILE_SAVE)
AfxMessageBox("SAVE");
}
return CWinApp::PreTranslateMessage(msg);}
用上面的函数能够捕获用户选择菜单栏和加速健的消息,msdn上说WM_COMMAND是选择菜单栏和加速健后系统发送的消息 。拿用户单击工具栏後系统发送的消息名是什么呢?是不是PreTranslateMessage不捕获工具栏的消息阿,因为我用下面的函数处理的时候(没有判断),当单击菜单兰的时候还是没有反应。请指点阿,先谢乐!
BOOL CdynamicApp::PreTranslateMessage(MSG* msg )
{
if(LOWORD(msg->wParam) == ID_FILE_OPEN)
AfxMessageBox("OPEN!");
if(LOWORD(msg->wParam) == ID_FILE_SAVE)
AfxMessageBox("SAVE");
return CWinApp::PreTranslateMessage(msg);}
解决方案 »
- error LNK2005: _DllMain@12 already defined in LIBCMTD.lib
- vc++ winInet API 接收不到服务器返回数据
- 在VC6.0和vs 2008下采用同样的方式,给编辑框添加位图背景,却不能得到相同的结果,请高手指教。
- VC2008中访问数据库SQL2008出错
- 网络字节编码的问题(小问题100分)
- CTreeCtrl使用的一个问题
- 在线等待:菜鸟问题--关于数据库的连接
- 请教动态库函数名冲突的问题。
- 怎么改应用程序的标题?
- mfc编辑框变量转移问题
- 请问listctrl里怎样才能完成用鼠标拖动item来改变它的的排序?
- 【公开道歉】我是一个没有信誉的人
不过可以替换MainFrame的窗口过程截获到。
long OldProc = NULL;
LRESULT CALLBACK WindowProce(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if(uMsg == WM_COMMAND && wParam == ID_FILE_OPEN)
AfxMessageBox("Open");
return CallWindowProc((WNDPROC)OldProc, hWnd, uMsg, wParam, lParam);
}在CMainFrame::OnCreate里加上
OldProc = SetWindowLong(this->GetSafeHwnd(), GWL_WNDPROC, (long)(WindowProce));