- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个包含多个自定义控件的程序。这些自定义控件之一是文本输入控件。由于单击窗口时窗口不会自动接收键盘焦点,因此我在我的程序中创建了一个鼠标 Hook ,当用户单击该窗口时,它会在该窗口上调用 SetFocus()。但是,有一个问题。
如果当您单击我程序的窗口(或该窗口中的任何控件)时另一个程序获得焦点,SetFocus() 将失败。然后我必须再次单击才能成功。这是代码:
LRESULT CALLBACK kbfProc(int nCode, WPARAM wParam, LPARAM lParam) // Keyboard focus switching procedure
{
switch(nCode)
{
case HC_ACTION:
{
if(wParam == WM_LBUTTONDOWN || wParam == WM_NCLBUTTONDOWN)
{
MOUSEHOOKSTRUCT * mhs = (MOUSEHOOKSTRUCT*) lParam;
if(SetFocus(mhs->hwnd) == NULL)
{
printf("SetFocus(Hwnd = %.8x) failed. Error code: %lu\n", mhs->hwnd, GetLastError());
} else {
printf("SetFocus(Hwnd = %.8x) returned success.\n", mhs->hwnd);
}
}
}
break;
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
那些 printf 调用的输出是这样的:
SetFocus(Hwnd = 00410c06) failed. Error code: 87
SetFocus(Hwnd = 00410c06) returned success.
SetFocus(Hwnd = 01740fc8) failed. Error code: 87
SetFocus(Hwnd = 01740fc8) returned success.
错误代码 87 是 ERROR_INVALID_PARAMETER,但我显然将有效的窗口句柄传递给该函数,那么为什么会失败?
最佳答案
无论何时调用 SetFocus,窗口都必须附加到调用线程的消息队列,否则 SetFocus 将返回无效。要解决此问题,请使用 SetForegroundWindow
首先是当鼠标移到您的窗口上时,然后再调用 SetFocus
。
关于c++ - SetFocus() 因有效的窗口句柄而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9643536/
我设置了 Helm 柄和 Helm 柄。我有tiller-deploy。昨天,我可以定期运行了。但今天我收到此错误消息 Error: could not find a ready tiller pod
我以前已将分er安装到特定的 namespace 中。 我设置了一个环境变量来设置'tiller'命名空间-但我不记得该环境变量的名称-而且似乎无法通过网络搜索找到它。 这是什么 key ? 最佳答案
当我在 View 模型中使用如下界面时 class MainViewModel @ViewModelInject constructor( private val trafficImagesR
我正在尝试找到如何在某个 fragment 相关场景中定义 Hilt 的解决方案。我有以下设置: Activity 父 fragment 1 子 fragment 1 子 fragment 2 ...
Hilt 指出如果没有@Provides 注解就不能提供这个接口(interface): interface PlannedListRepository { fun getAllLists()
我的问题非常简单明了:两个注释/示例之间有什么区别: 例子一 @Singleton class MySingletonClass() {} @Module @InstallIn(FragmentCom
我是一名优秀的程序员,十分优秀!