如何显示一个有焦点的外观,但没有焦点的形式

本文关键字:焦点 外观 一个 何显示 显示 | 更新日期: 2023-09-27 18:07:32

如何使窗体看起来集中,当它不是?在我的代码中,表单不能聚焦,所以它总是看起来不聚焦,我的目标是用聚焦的风格来展示它。解决方案可能是在表单中应用一个特殊的主题,但我不确定。(我使用c# .NET)

如何显示一个有焦点的外观,但没有焦点的形式

您的意思肯定是激活,窗体是一个几乎永远不会得到焦点的顶层窗口。它的一个客户端控件得到它。窗口激活会影响窗口标题栏的颜色,想必您总是希望它以"I'm active"的颜色绘制。旧版本的油漆。. NET将此hack用于其工具窗口。

Windows发送WM_NCACTIVATE消息到一个窗口,让它显示正确的激活状态。消息的wparam表示它的标题栏应该使用什么系统颜色,TRUE表示活动状态。您可以简单地修改消息并始终强制使用wparam值。这是一行代码,将此代码粘贴到表单类中:

    protected override void WndProc(ref Message m) {
        if (m.Msg == 0x86) m.WParam = (IntPtr)1;
        base.WndProc(ref m);
    }
我不能保证这不会有任何副作用。例如,如果它只影响绘画,您仍然会得到Deactivate事件。