【发布时间】:2021-12-26 02:20:09
【问题描述】:
我正在尝试捕获WM_KEYDOWN 以在表单级别处理一些键盘事件。我知道我可以使用KeyPreview=true 并使用TForm 的OnKeyDown 事件。但是,我想在WndProc() 中执行此操作,以简化单个函数中的事件处理。问题是,它不会在WndProc() 中触发。有没有特别的原因?除了用BEGIN_MESSAGE_MAP处理WM_KEYDOWN,还有别的办法吗?
void __fastcall TForm1::WndProc(TMessage &fMessage)
{
switch (fMessage.Msg)
{
default: break;
case WM_KEYDOWN: {
TWMKeyDown KDMsg = reinterpret_cast<TWMKeyDown&>(fMessage);
TShiftState KDSs = KeyDataToShiftState(KDMsg.KeyData);
if (KDMsg.CharCode == 'C' && KDSs.operator ==(TShiftState() << ssCtrl))
{
// Process CTRL+C key
fMessage.Result = 1;
return;
}
}
break;
}
TForm::WndProc(fMessage);
}
【问题讨论】:
-
附带说明,
KDSs.operator ==(TShiftState() << ssCtrl)应该写成KDSs == (TShiftState() << ssCtrl)
标签: c++builder keydown wndproc