激活使用WS_EX_NOACTIVATE创建的窗口?

时间:2015-11-11 10:34:11

标签: c# winapi

我有一个在C#中使用以下CreateParams创建的窗口:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams ret = base.CreateParams;
        ret.ExStyle |= (int) Windows.WS_EX_NOACTIVATE;
        return ret;
    }
}

我想要的效果是它不会从其他窗口中窃取(键盘)焦点,但仍会响应鼠标输入。

问题:

当我想用鼠标移动它时,我怎么能从代码中激活,移动然后停用它?我正在覆盖WndProc并使用Windows消息。

必须有能够做到的窗口消息。 sys命令"Move"确实激活它,所以它应该是可能的。但是我需要它让用户更轻松地移动窗口。

修改

我设法使用以下代码激活和停用它,但它不随鼠标移动(仅在鼠标向上更改其位置)。键盘焦点(插入符号)保留在另一个窗口中。这就是我需要保持原样,重点放在另一个窗口。

SendMessage(m.HWnd, WM_NCACTIVATE, new IntPtr(1), IntPtr.Zero); // activate
SendMessage(m.HWnd, WM_NCACTIVATE, IntPtr.Zero, IntPtr.Zero); // deactivate

0 个答案:

没有答案