如何显示具有聚焦外观但不集中的表单?

时间:2014-06-09 10:18:22

标签: c# .net winforms focus themes

如果表单看起来不那么重要,怎么可能? 在我的代码中,表单无法集中,因此它总是看起来没有焦点,我的目标是以专注的风格展示它。 解决方案可能是在表单中应用特殊主题,但我不确定 (我正在使用c#.NET)

1 个答案:

答案 0 :(得分:3)

当然你的意思是激活,一个表单是一个几乎永远不会得到焦点的顶级窗口。其中一个客户端控件获取它。窗口激活会影响窗口标题栏的颜色,可能您总是希望它以“我是活动的”颜色绘制。旧版本的Paint.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);
    }

我不能保证这不会有任何副作用。 Afaik它只影响绘画,你仍然可以获得Deactivate事件。