首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

VC中PreTranslateMessage这个函数功能上相当于CB中哪个函数?该如何处理

2012-03-15 
VC中PreTranslateMessage这个函数功能上相当于CB中哪个函数?在CB中直接用PreTranslateMessage不行啊?[解决

VC中PreTranslateMessage这个函数功能上相当于CB中哪个函数?
在CB中直接用PreTranslateMessage不行啊?

[解决办法]
看你如何用VC中PreTranslateMessage有时拦截消息,
如果是PreTranslateMessage拦截KeyUp等消息BCB是相当与窗口的KeyUp属性.....
[解决办法]
其实是可以用Form的Key相关事件的,不过要设置Form的“KeyPreview”属性为true
那么就可以拦截到键盘消息了

另外,你也可以重载窗口过程函数:
先在Form类的声明中声明一下窗口过程函数:
void __fastcall WndProc(TMessage &Msg);
然后定义如下:
void __fastcall TForm1::WndProc(TMessage &Msg)
{
if(Msg.Msg == WM_KEYDOWN)
{
ShowMessage( "拦截到了KeyDown事件 ");
}
TForm::WndProc(Msg);
}

以上的代码是手写的,不知有没有手误。。。:)
[解决办法]
VC里用PreTranslateMessage
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg-> message==WM_KEYDOWN)
{
if(pMsg-> wParam==VK_F4)
PostMessage(WM_COMMAND,ID_MENU_DL); //相应菜单ID或快捷键ID

}
return CFrameWnd::PreTranslateMessage(pMsg);
}
[解决办法]
VC里PreTranslateMessage是用hook和subclass的
你自己写hook也可以

热点排行