首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不激活子窗口

不激活子窗口
EN

Stack Overflow用户
提问于 2017-08-28 17:00:42
回答 1查看 296关注 0票数 0

我有一个普通窗口,我想添加一个按钮,它可以在我的窗口中按下,当它是不活动的,这将不会窃取当前活动窗口的焦点。

示例:Windows8/8.1/10的系统任务栏中的触摸键盘按钮,这个按钮:

请注意,当单击此按钮时,活动应用程序仍处于活动状态,但单击其空空间时焦点将转到任务栏。

经典解决方案:

  • 为了使整个顶层窗口不可激活,可以使用WS_EX_NOACTIVATE ex样式.不幸的是,这种样式在顶层窗口中造成了许多问题,并且不能应用于子窗口。
  • 通常推荐的方法是侦听WM_MOUSEACTIVATE消息,并在单击控件时回答MA_NOACTIVATE。这是可行的,但只是部分:在单击时窗口不会被激活,但是以前的活动窗口将失去活动状态,而GetForegroundWindow返回0。这可以通过记住最后一个活动窗口(通过定期轮询,或者通过监视EVENT_SYSTEM_FOREGROUND或HSHELL_WINDOWACTIVATED / HSHELL_RUDEAPPACTIVATED)和强制恢复来解决。其实头痛很厉害。
EN

Stack Overflow用户

发布于 2017-08-28 17:00:42

Win7 7-way:

从Windows7开始,就有了一个新的无文档的API--函数SetChildWindowNoActivate,在user32.dll中有序号2005。它可以这样声明(Delphi风格):

代码语言:javascript
运行
复制
function SetChildWindowNoActivate(ChildWnd: HWND): BOOL; stdcall;
  external 'user32.dll' index 2005;

此功能在Windows 8/8.1/10中用于制作触摸键盘、虚拟触摸屏和语言开关等非激活按钮。

下面是一个示例应用程序的屏幕截图,上面有一个按下的“不激活”按钮和一个活动资源管理器窗口:

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45924018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档