Member 13089825 Ответов: 2

Выровнять текст справа на строке состояния


можем ли мы все перенести какой-то текст с левой стороны и какой-то текст с правой стороны в строку состояния в vc++

Что я уже пробовал:

я добавил пробелы с левой стороны после пробелов я добавил еще один текст, но когда приходит большой текст, пространство не отображается равным все время

2 Ответов

Рейтинг:
1

Richard MacCutchan

Вы должны получить фактическую ширину окна строки состояния, а затем настроить текст по размеру. Видеть CWnd:: GetWindowRect[^] и CDC:: GetTextExtent (MFC)[^].


Рейтинг:
0

Jochen Arndt

У вас есть два варианта, где оба требуют получения класса из Класс CStatusBar[^] или Класс CMFCStatusBar[^].

Измените тип m_wndStatusBar в вашем главном фрейме окна класса заголовочный файл к производному классу и включить заголовочный файл производного класса. При необходимости создайте и инициализируйте m_wndStatusBar в OnCreate класса основной рамы.

Первый метод-это переопределение CStatusBar::DrawItem соответственно. CMFCStatusBar::OnDrawPane сделать рисунок по мере необходимости. Это требует, чтобы переданная строка содержала делимер, который используется для разделения ее на левую и правую части.

Вторым методом будет добавление панели для выровненного по правому краю текста. Недостатком этого решения является то, что фиксированное пространство дополнительной панели больше не может использоваться самой левой панелью (при условии использования стиля SBPS_STRETCH что позволяет этой панели занимать оставшееся свободное пространство). Преимущество этого решения заключается в том, что вы можете установить левый и правый текст независимо. Но чтобы показать выровненный по правому краю текст, вы должны использовать ownerdraw и для этой панели.


Member 13089825

спасибо за ваш ответ.
не могли бы вы привести какой-нибудь пример, если это возможно

Jochen Arndt

Извините, у меня нет примеров.
Вы можете найти "cstatusbar ownerdraw" (или cmfcstatusbar). Попаданий не так уж много.

Способ рисования текста зависит от используемого типа строки состояния и выбранного метода.

Чтобы нарисовать текст, получите прямоугольник для панели и используйте DrawText.

Member 13089825

здесь мы используем (под названием cmainframe*)(AfxGetApp()-&ГТ;m_pMainWnd)-&ГТ;setmessagetext(л"строка")таким образом, используя это, как мы можем установить на правую сторону
здесь мы используем стандартную строку состояния
не могли бы вы помочь мне, если у вас есть какие-то идеи по этому поводу

Jochen Arndt

Как я уже писал:
Выведите класс из строки состояния C[MFC]и нарисуйте там владельца.
При вызове SetMessageText() из окна он будет перенаправлен в m_wndStatusBar член. В строке состояния производного класса нарисуйте сообщение самостоятельно.

Это требует некоторого времени и тестирования, что слишком много для быстрых ответов.
Также невозможно ответить, не зная типа вашей строки состояния и того, как должны быть нарисованы строки / Что такое passewd для SetMessageText().

Member 13089825

здесь мы используем (под названием cmainframe*)(AfxGetApp()-&ГТ;m_pMainWnd)-&ГТ;setmessagetext(л"строка")таким образом, используя это, как мы можем установить на правую сторону
здесь мы используем стандартную строку состояния
не могли бы вы помочь мне, если у вас есть какие-то идеи по этому поводу