如何使 WPF 窗口标题的文本长度大于 255 个字符?

Posted

技术标签:

【中文标题】如何使 WPF 窗口标题的文本长度大于 255 个字符?【英文标题】:How to make the text length of the title of a WPF Window greater 255 characters? 【发布时间】:2017-03-25 16:52:13 【问题描述】:

在 VS2015 中创建 WPF 应用程序。将窗口的标题设置为长度为 290 的字符串。

Title = "123456789 223456789 323456789 423456789 523456789 623456789 723456789 823456789 923456789 133456789 233456789 333456789 433456789 533456789 633456789 733456789 833456789 933456789 143456789 243456789 343456789 443456789 543456789 643456789 743456789 843456789 943456789 153456789 253456789 ";

当应用程序运行时,标题被截断为 255 个字符(最大化窗口和跨 2 个屏幕扩展的窗口)。

    如何增加显示字符数? WPF 窗口标题允许的最大长度是多少?

我试过了

How to set WPF Window's width equal to the content in its Title Bar? 在代码和 XAML 中设置标题栏文本。

【问题讨论】:

好问题。然而,你为什么要这样做?看起来您想通过窗口标题进行一些进程间通信... 在应用程序中显示标题,姓名+姓氏+参考号码+电话号码。当姓氏很长时,电话号码会被截断。用户想查看电话号码。 255/4 = 63 客户叫什么名字? 不知道。我刚刚被分配了错误:) 【参考方案1】:

似乎 255 个字符是 DefWindowProc() 原生窗口函数的内部限制。

WPF 使用对本机方法的调用来更改窗口的标题:

UnsafeNativeMethods.SetWindowText(new HandleRef(this, CriticalHandle), title);

此方法接受任何长度的字符串,因此应该可以正常工作。这不是 WPF 问题。

但是……

即使您创建一个使用DefWindowProc() 函数的标准和本机 Win32 窗口,您也会观察到相同的行为 - 窗口标题中最多 255 个字符。

Windows 绘制标题栏以响应WM_NCPAINT 消息(以及窗口框架、系统按钮等)。在处理WM_NCPAINT 消息的DefWindowProc() 代码中,代码调用GetWindowText() 来获取窗口的标题字符串。在对GetWindowText() 的调用中,缓冲区的大小似乎是 255 chars(在旧 Windows 中,缓冲区只有 79 bytes)。这将窗口标题的长度限制为 255 个字符。

【讨论】:

以上是关于如何使 WPF 窗口标题的文本长度大于 255 个字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过拖动扩展的窗口框架使 WPF 窗口可移动?

如何在 WPF 中使所有屏幕区域变暗并点亮我打开的窗口?

在 wpf 中,我如何使数据网格适合窗口高度

如何使用拇指使 WPF 弹出窗口可拖动?

如何使 WPF 窗口在任务栏上闪烁?

WPF实现消息提醒(广告弹窗)