删除窗口的标题栏文本但保留状态栏文本

时间:2009-04-02 11:51:44

标签: c# .net winforms

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

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

感谢您的帮助。

** 我知道约翰的建议,但仍然寻求更明确的方向,任何人都可以随意提出你的想法 **

2 个答案:

答案 0 :(得分:9)

这应该这样做:

[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)));

答案 1 :(得分:-1)

您所谈论的内容需要子类化才能进入应用程序的内容。从本质上讲,你会通过拦截某些消息(如WM_PAINT等)来为你的表单着色。如果你以前从未在那个级别工作过,这不是一件简单的事情。