gpt4 book ai didi

c# - native C++/MFC 所需的 C# 的 PreviewKeyDown 等效项

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:30 27 4
gpt4 key购买 nike

我在 C# Forms 应用程序中使用了一个 ActiveXControl,并且有可能为那个 ActiveXControl 实现一个 PreviewKeyDown 事件处理程序。需要指定它,例如[ALT]键,是输入键。

出于某些原因,我必须在 native C++/MFC 中重新实现应用程序,并且不知道如何指定此 [ALT] 键是输入键并由 ActiveXControl.

最佳答案

您可以使用 SetTimer 以每秒 20 次左右的频率生成 WM_TIMER 事件

SetTimer( NULL, kMyTimer, 50, MyTimerCallback );

然后实现一个功能如下。

 void CALLBACK MyTimerCallback( HWND hWnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime )
{
static short lastLeftAltPress = 0;
short thisLeftAltPress = GetAsyncKeyState( VK_LMENU );
if ( thisLeftAltPress != 0 && lastLeftAltPress == 0 )
{
CallAltHandlingCode();
}
thisLeftAltPress = lastLestAltPress;

// Handling code for other keys goes here.
}

然后这将每 50 毫秒轮询一次键盘以查明是否刚刚按下了左 alt 键,然后调用您的处理代码。如果你想在释放时触发处理程序,那么你将使用以下 if 语句

 if ( thisLeftAltPress == 0 && lastLeftAltPress != 0 )

或者如果您只是想看看它是否已关闭,那么您可以这样做

 if ( thisLeftAltPress != 0 )

GetAsyncKeyState 的文档声明您可以检查是否设置了最低位以查看是否刚刚按下该键,但它也指出这可能会在多线程环境中以意外的方式失败。上述方案应该始终有效。

关于c# - native C++/MFC 所需的 C# 的 PreviewKeyDown 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1770412/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com