C WinAPI: создание «статического» подобного класса, который позволяет мне обновлять заголовок

#c #winapi

#c #winapi

Вопрос:

Я пытаюсь создать небольшую программу на C и Windows API, и мне нужно обновить некоторый текст в статическом элементе управления. Я прочитал, что изменение текста static во время выполнения невозможно, и я должен дублировать класс и создавать его в соответствии с требованиями. Проблема в том, как мне дублировать класс. Я новичок, и ниже приведены текущие атрибуты класса, которые у меня есть (что, конечно, для окна!). Какие изменения необходимы для такого элемента управления? Или, если это слишком много работы, должен ли я вместо этого использовать текстовое поле (неизменяемое пользователем)?

 wc.style         = CS_HREDRAW | CS_VREDRAW;
wc.cbClsExtra    = 0;
wc.cbWndExtra    = 0;
wc.lpszClassName = TEXT( "Window" );
wc.hInstance     = hInstance ;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
wc.lpszMenuName  = NULL;
wc.lpfnWndProc   = WndLogProc;
wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
  

Комментарии:

1. Я кое-что обнаружил. Если я добавлю WS_DISABLED в редактор редактирования, это будет выглядеть как static! И редактирование его текста — это не ракетостроение! Итак, это сделано.

2. Вы можете опубликовать это как ответ и принять его, если это работает для вас.

3. Я новый пользователь, и он просит меня подождать 24 часа, прежде чем отвечать!

Ответ №1:

Кто вам сказал, что невозможно изменить текст статического окна? Если вы используете SetWindowText , вы можете изменить содержимое. Это не будет отображать это новое содержимое автоматически, но вы можете принудительно перерисовать окно с помощью RedrawWindow .

P.S. Вы должны использовать тип класса «static» для статического элемента управления, а не «Window». Список встроенных классов окон находится здесь, в MSDN.

Комментарии:

1. Я читал это в учебнике! Ну, я не знал о SetWindowText (я был в WIN Api всего 5-6 дней!). На данный момент я использую отключенные поля редактирования, поскольку они делают то же самое. Однако в следующий раз я рассмотрю SetWindowText. Спасибо за ответ!

2. @Ишан Шарма, отключенное окно редактирования — это не совсем то же самое. Он отображается другим цветом и позволяет выделять текст. Это особенно прискорбно, если вы привыкли использовать клавишу Tab для перехода от одного элемента управления к следующему, поскольку вы не ожидаете останавливаться на статическом тексте.

3. Да, я знаю, что у него другой цвет, но не знал, что текст можно выбрать. В моем приложении не так много полей, поэтому я пока пропущу SetWindowText.

4. @Ишан Шарма: И что бы это было за руководство?

5. @In Silico Извините, но я не помню! Прямо сейчас у меня открыто около 20 вкладок о Windows API, и определить точную из них было бы очень сложно!