使用 SB_SETTEXT 的状态栏中显示的字符数是否有限制



我正在尝试使用 MFC 代码在状态栏中显示一个长字符串,如下所示:

// i've set only one pane in the status bar using CStatusBar::SetIndicators()
pFrameWnd->m_wndStatusBar.SetPaneText( 0, szText, TRUE );

但是状态栏中显示的字符串被截断为 127 个字符。

由于 MFC 类成员 CStatusBar::SetPaneText() 在内部使用消息SB_SETTEXT,我想知道我们可以使用 SB_SETTEXT 在状态栏中显示的字符数是否有任何限制?

我用谷歌搜索并找到一些论坛,指出确实存在限制,但没有一个论坛引用MSDN文档说明相同。

那么,如果字符数存在限制,任何人都可以提供MSDN链接来支持他们的答案吗?

另外,如果确实存在限制,有没有办法解决这个问题并在状态栏的单个窗格中显示更多字符数?

一个有根据的猜测:问题是这些控件在内部限制为32K个字符,因为它们在内部限制为 64K 个字节。这是显示 Win3.1 旧版(或 Win95)的几种情况。当时Windows支持实模式,它从称为本地堆的东西中获取内存。我找不到您的实际控制的信息,但这是另一个。

请注意,SB_SETPARTS将状态栏的部分数限制为 255,因此简单的数学将表明127 = 32K/256是每个部分的合理限制。人们可以想象他们可以处理更动态的分配交易,但人们也可以想象可能导致的各种极端情况。

我的猜测是,使用此控件无法绘制更多内容。我建议你自己滚动,可能是子类化的"静态"。

好的,还有一件事你可以尝试踢。尝试使用 ANSI 程序,每个窗格可能执行 255 个 ANSI 字符。

最新更新