【问题标题】:How to show a form with focused appearance but not focused?如何显示具有焦点外观但没有焦点的表单?
【发布时间】:2014-06-09 10:18:22
【问题描述】:

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

【问题讨论】:

  • 您必须更具体。仅仅要求颠覆标准的 Windows 行为将使您无处可去。确切地说,你会改变什么?我可以直接告诉你,你正在经历一些痛苦。在尝试将视觉效果分解为碎片之前,您可能需要重新考虑您的表单设计。

标签: c# .net winforms focus themes


【解决方案1】:

当然你的意思是激活,表单是一个几乎永远不会获得焦点的顶级窗口。它的客户端控件之一得到它。窗口激活会影响窗口标题栏的颜色,大概您总是希望用“我处于活动状态”的颜色来绘制它。旧版本的 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 事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2022-06-28
    • 1970-01-01
    相关资源
    最近更新 更多