创建类似于输入法窗口的非激活窗口

原文:创建类似于输入法窗口的非激活窗口

创建类似于输入法窗口的非激活窗口

周银辉

我们注意到输入法的候选词窗口是不会被激活而获得输入焦点的, 一个很明显的现象是当你用鼠标点击该窗口时, 系统焦点不会转移到该窗口上, 原来获得焦点的窗口不会失去焦点. 这很棒, 如何实现呢?

很简单, 只要将窗口的ExStyle设置为WS_EX_NOACTIVATE(0x8000000)即可. (另外, 值得注意的是, 如果窗口在任务栏显示图标的话, 仍可以通过任务栏图标来激活它)

方式1, winform窗口中, 通过重写CreateParams属性来修改ExStyle:

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->        protected override CreateParams CreateParams

{

get

{

CreateParams cp = base.CreateParams;

cp.ExStyle |= WS_EX_NOACTIVATE;

return cp;

}

}

方式2, 通过SetWindowLong函数来设置窗口的ExStyle

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->        public const int GWL_EXSTYLE = -20;

public const int WS_EX_NOACTIVATE = 0x8000000;

[DllImport("user32.dll")]

public static extern int SetWindowLong(IntPtr window, int index, int value);

[DllImport("user32.dll")]

public static extern int GetWindowLong(IntPtr window, int index);

static void Test(IntPtr hwnd)

{

SetWindowLong(hwnd, GWL_EXSTYLE,

             GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_NOACTIVATE);

}

调用上面的Test(IntPtr hwnd)方法就可以了, 对于WPF程序, 可以通过new WindowInteropHelper(myWindow).Handle来获取窗口句柄

原文地址:https://www.cnblogs.com/lonelyxmas/p/10761766.html

时间: 2024-10-07 16:14:28

创建类似于输入法窗口的非激活窗口的相关文章

非激活窗口中响应鼠标滚动之理论篇

在最近工作中有一个优化交互的需求,分析后得知,其核心功能为能在非激活窗口中响应鼠标滚动消息,先就该需求进行前期方案验证. 同类产品实现 参照现有软件行为,操作系统为Win7.以notepad++,Chrome两款软件为例. 当鼠标选中notepad++后,然后将鼠标转移到Chrome界面后,上下滚动鼠标,Chrome页面能够同步滚动. 当鼠标选中Chrome后,然后将鼠标转移到Notepad++界面,上下滚动,Notepad++不能同步滚动. 猜测是Chrome对滚轮滚动消息进行了额外处理.既然

Android下创建一个输入法

输入法是一种可以让用户输入文字的控件.Android提供了一套可扩展的输入法框架,使得应用程序可以让用户选择各种类型的输入法,比如基于触屏的键盘输入或者基于语音.当安装了特定输入法之后,用户即可在系统设置中选择个输入法,并在接下来的输入场景中使用该输入法.不过在任一时刻,只能使用一个输入法. 为了在安卓系统下创建一个输入法,需要新建一个包含扩展了InputMethodService类的安卓应用,并创建一个用于设置的activity,用户可以通过它将设置选项传给输入法的service,因此,你还需

5.窗口类和窗口的附加数据

附加数据的作用: 注册窗口时,设置这两个数据的大小,可以提供窗口类和窗口存放自己的数据的空间. 1.窗口类附加数据 int cbClsExtra    //窗口类附加数据buff大小 (1)用法: a.申请缓冲区 窗口对象.cbClsExtra = 200;  //一般赋4的倍数 b.写入数据 DWORD SetClassLong( HWND  hWnd;         //窗口句柄 int       nIndex;        //字节索引号(从哪个字节开始存) LONG  dwNewL

子窗口与主窗口分开处理

#include <GUIConstantsEx.au3> $mainwindow = GUICreate("Hello World", 300, 200) GUICtrlCreateLabel("Hello world!", 30, 10) $okbutton = GUICtrlCreateButton("opened the subform", 20, 30, 150) 主窗口点击按钮后又创建了一个新的子窗口,在关闭子窗口时主窗口

windows 编程 —— 子窗口 与 子窗口控件

目录: 子窗口与主窗口的交互 子窗口控件 控件1 控件2 子窗口与主窗口的交互 创建窗口要:注册窗口类型 和 创造相应窗口实例 1 //注册窗口类型 2 wndclass.style = CS_HREDRAW | CS_VREDRAW ; 3 wndclass.lpfnWndProc = WndProc ; 4 wndclass.cbClsExtra = 0 ; 5 wndclass.cbWndExtra = 0 ; 6 wndclass.hInstance = hInstance ; 7 wn

JS 子窗口向父窗口传值

首先我们来了解下window对象的的方法open: 1,open() 方法用于打开一个新的浏览 window.open(URL,name,features,replace) 重要事项:请不要混淆方法 Window.open() 与方法 Document.open(),这两者的功能完全不同.为了使您的代码清楚明白,请使用 Window.open(),而不要使用 open(). 2,opener opener 属性是一个可读可写的属性,可返回对创建该窗口的 Window 对象的引用.---这句话怎么

mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别

mfc窗口,父窗口parentwindow,所有者窗口ownerwindow 区别 1.理解窗口之间的关系   2.   如何设置(创建)不同的窗口 一. parent:创建者,owner:所有者 小玉的父母生下小玉,养到8岁,卖给贾府当丫头小玉的父母是parent,贾府是owner 二. 1.Pop-up窗口: 一个弹出窗口是必须具有WS_POPUP属性的窗口,弹出窗口只能是一个Top-Level窗口,不能是子窗口,弹出窗口多用于对话框和消              息框,也可以用于应用程序的

MFC子窗口和父窗口

MFC子窗口和父窗口(SetParent,SetOwner) 分类: VC++学习2012-08-17 16:55 553人阅读 评论(0) 收藏 举报 mfclist数据结构nullwindowshierarchy 转自: http://hi.baidu.com/winnyang/blog/item/c4fdcd3698b33ad1a2cc2b79.html一.概念和区别 在windows系统中,每个窗口对象都对应有一个数据结构,形成一个list链表.系统的窗口管理器通过这个list来获取窗口

C#中父窗口和子窗口之间控件互操作实例

本文实例讲述了C#中父窗口和子窗口之间控件互操作的方法.分享给大家供大家参考.具体分析如下: 很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异: 第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如: 代码如下: public static yourMainWindow pCurrentWin = null