【问题标题】:Remove title bar text of a window but keep status bar text删除窗口的标题栏文本但保留状态栏文本
【发布时间】:2010-10-17 02:25:02
【问题描述】:

我正在使用 Windows 窗体,是否可以创建一个在状态栏中有文本但在应用程序顶部的标题栏中没有文本的窗口? (很大程度上是因为打印在我实施的 Aero 玻璃上的标准标题文本看起来很糟糕,因为它太高了,而且我正在绘制自己的文本标题,显然不希望翻倍)。

这个解决方案 (How to make a window have taskbar text but no title bar) 并不令人满意,因为我仍然希望保留一个 FixedDialog 窗框。

感谢大家的帮助。

** 我知道John的建议,但仍在寻求更清晰的方向,任何人都可以提出你的想法 **

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    您所说的需要子类化才能进入应用程序的核心。本质上,您将通过拦截某些消息(如 WM_PAINT 等)来对表单进行蒙皮。如果您以前从未在该级别工作过,这可不是一件简单的事情。

    【讨论】:

    • 好吧,我已经深入了解使用 DWM API 调用非托管库了。所以我很高兴听到所有的解决方案。
    • 如果您还没有接触过 Windows 深层内部的子类化或开发,这里有一个介绍:support.microsoft.com/kb/815775
    【解决方案2】:

    应该这样做:

    [DllImport("uxtheme.dll")]
    public static extern int SetWindowThemeAttribute(IntPtr hWnd, WindowThemeAttributeType wtype, ref WTA_OPTIONS attributes, uint size);
    
    public enum WindowThemeAttributeType : uint
    {
        /// <summary>Non-client area window attributes will be set.</summary>
        WTA_NONCLIENT = 1,
    }
    
    public struct WTA_OPTIONS
    {
        public uint Flags;
        public uint Mask;
    }
    public static uint WTNCA_NODRAWCAPTION = 0x00000001;
    public static uint WTNCA_NODRAWICON = 0x00000002;
    
    WTA_OPTIONS wta = new WTA_OPTIONS() { Flags = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON, Mask = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON };
    
    SetWindowThemeAttribute(this.Handle, WindowThemeAttributeType.WTA_NONCLIENT, ref wta, (uint)Marshal.SizeOf(typeof(WTA_OPTIONS)));
    

    【讨论】:

    猜你喜欢
    • 2015-09-13
    • 2012-02-13
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2014-11-01
    • 1970-01-01
    • 2018-08-12
    相关资源
    最近更新 更多