2013-02-12 153 views
2

如何使用文本自動換行(多行)來使CStatic垂直居中控制矩形的結果?MFC中多行cstatic文本的垂直居中

我試圖解決的問題是:我有一個CStatic控件旁邊的CComboBox更新信息文本取決於選擇。該文本可以是短文本或長文本,要求CStatic有時使用多行,有時不需要。我希望信息文本與CComboBox垂直居中對齊。

現在,這裏的問題是:

  • 如果我做了靜態控件只有1一個TextLine高,它看起來不錯1行文本,但多行不適合和不顯示。

  • 如果我讓CStatic更高以適合2行,它看起來不錯,對於長文本(2行),但1行文本向上移動,因爲CStatic對齊頂部的文本。一個靜態控件與問題會解決這個問題提到的行爲......

如果我不能很容易地得到一個垂直居中靜態控件的多線控制,替代將是調整控制矩形視它的文字量。但在這種情況下,我有一個不同的問題:

如何可以編程方式找出在一個CStatic的特定寬度中需要多少行文本?

回答

3

不幸的是,你不能在CStatic中創建多行文本。

您的下一個問題有一個解決方案,但使用起來有點痛苦。你所做的是使用帶有DT_CALCRECT標誌的CDC :: DrawTextEx來獲得想要格式化文本的大小(以像素爲單位)。通過除以文本行的高度(可以從DC獲得的字體信息中給出的高度,加上一些間距,我不確定這是多少 - 這可能是一個固定的數量,我不認爲你可以用DrawText指定行間距),你會得到(近似)你將得到的行數。然後您可以調整控制矩形。

仔細想想吧,你可能會更好過不轉換爲線,只是調整你的控制範圍從DrawTextEx :)

像這樣的事情得到通常需要一些實驗來獲得完全正確的,並有時在操作系統版本中表現不同。謹慎行事。

+0

將'SS_CENTERIMAGE'添加到'Create()'調用中的'dwStyle'中怎麼樣?這隻適用於MS Windows 7下。 – ulatekh 2013-11-22 23:02:19

+0

問題是關於多行文本。當您應用SS_CENTERIMAGE時,自動換行不再起作用。我只是在VS2008/WinXP上測試它,它有這種行爲。您是否嘗試使用多行文字?無論如何我都會更新我的答案。 – Roel 2014-01-07 20:50:24

+0

哎呀...的確,我沒有使用多行文本。我的錯。 – ulatekh 2014-01-09 16:46:16