2016-01-27 49 views
1

我試圖使用像這樣MFC代碼中的狀態欄中顯示一個長字符串:使用SB_SETTEXT在狀態欄中顯示的字符數是否有限制?

// 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鏈接來支持他們的答案,如果存在對字符數量的限制嗎?

另外,如果確實有限制,是否有辦法解決這個問題,並在狀態欄的單個窗格中顯示更多數量的字符?

+0

據我所知,字符串的長度沒有記錄的限制。您是否嘗試發送[WM_SETTEXT](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632644.aspx)消息(如[狀態欄文本操作](https:// msdn .microsoft.com/en-us/library/windows/desktop/bb760728.aspx#Status_Bar_Text_Oper)),並且行爲是否改變?爲了確保這不是狀態欄大小的問題,請嘗試將文本設置爲「L」Left \ tCenter \ tRight「'。這樣做將幫助您查看狀態欄的幾何圖形。 – IInspectable

+2

這不是一個記錄的限制,但'DrawStatusText'函數似乎在內部使用大小爲128的靜態緩衝區,並且在繪製每個狀態欄部分的文本時默認使用此函數。所以你可以使用所有者繪製來解決它。 –

+0

我試過使用CWnd :: SetWindowText()(它反過來發送一個WM_SETTEXT味精),但它沒有奏效。 狀態欄大小正常,因爲顯示「Left \ tCenter \ tRight」會在狀態欄的各自位置顯示左邊,中間和右邊的字符串。 此鏈接指向文件的字符數限制: https://social.msdn.microsoft.com/Forums/vstudio/en-US/1082b08e-6efa-46c8-9382-36e51247e1ba/status-bar-text-長度限制??論壇= vclanguage –

回答

0

有教養的猜測:問題是這些控件在內部限制爲32K個字符,因爲它們在內部限制爲64K個字節。這是Win3.1遺留(或Win95)出現的少數情況。當時Windows支持真實模式,它從本地堆中獲取內存。我找不到你的實際控制信息,但這裏是another之一。

SB_SETPARTS將狀態欄的部件數量限制爲255的通知,如此簡單的數學表明127 = 32K/256是每個部件的似是而非的極限。人們可以想象他們可以處理更動態的分配協議,但也可以想象可能會導致的各種角落案例。

我的猜測是沒有辦法使用這個控件繪製更多。我建議你推出自己的,可能是分類「靜態」的。

好的,還有一件事你可以嘗試踢。嘗試一個ANSI程序,你可能能夠在每個窗格中執行255個ANSI字符。

+0

謝謝你的回覆AlienRancher。 我想你是正確的 - 這是一個無證的東西,儘管有限制。 嘗試ANSI並沒有幫助。 最後,正如Jonathan Potter所建議的,我嘗試所有者爲staus bar繪製陷印WM_DRAWITEM,並能夠解決127字符的限制。 –

+0

聽起來不令人信服。這不是需要截斷的內部存儲(您的計算意味着這一點)。它是截斷窗格文本的**渲染**。您可以調用'SetPaneText'後跟'GetPaneText',不會看到任何截斷,無論字符串長度如何。 – IInspectable