【问题标题】:How to make the text length of the title of a WPF Window greater 255 characters?如何使 WPF 窗口标题的文本长度大于 255 个字符?
【发布时间】: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 个屏幕扩展的窗口)。

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

我试过了

【问题讨论】:

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

标签: c# wpf windows xaml


【解决方案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 个字符。

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2010-10-20
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2017-08-31
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多