powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / WINAPI мигают компоненты + жирные шрифты
16 сообщений из 16, страница 1 из 1
WINAPI мигают компоненты + жирные шрифты
    #36786642
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Есть несколько интересующих вопросов. Проект Win32 Project, чистый API.

1. Все элементы главной формы, как и ее параметры получаю динамически с сервера. На разных стадиях работы приложения появляются разные компоненты: картинки, текст, кнопки и т.д. Сразу создаю все компоненты скрытыми, а мотом делаю ShowWindow() для каждого в зависимости от стадии. Для отображения текста используется CreateWindow(). Задний фон для текста устанавливается прозрачным в case WM_CTLCOLORSTATIC, при этом когда делается hide\show появляются на мгновения серые фоны. Как исправить?

2. Использую манифест для стилей XP, компоненты стали привычного XP-шного вида, вот только шрифты какие-то нестандартные, жирные. Можно конечно для каждого отдельно установить, но интересно из-за чего проблема и как исправить?
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36786879
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_Dav wrote:

> 1. Все элементы главной формы, как и ее параметры получаю динамически с
> сервера. На разных стадиях работы приложения появляются разные
> компоненты: картинки, текст, кнопки и т.д. Сразу создаю все компоненты
> скрытыми, а мотом делаю ShowWindow() для каждого в зависимости от
> стадии. Для отображения текста используется CreateWindow(). Задний фон
> для текста устанавливается прозрачным в case WM_CTLCOLORSTATIC, при этом
> когда делается hide\show появляются на мгновения серые фоны. Как исправить?

В классе окна статика прописана кисть, которой стирается поверхность
окна перед WM_PAINT. Надо либо её убрать (что очень неправильно, поскольку
класс -- общий разделяемый ресурс), либо не использвать статик для этого дела,
а использовать свой класс. Можно ещё конечно попробовать переопределить
обработчик WM_ERASEBACKGROUND и ничего не делать.

> 2. Использую манифест для стилей XP, компоненты стали привычного
> XP-шного вида, вот только шрифты какие-то нестандартные, жирные. Можно
> конечно для каждого отдельно установить, но интересно из-за чего
> проблема и как исправить?

WM_SETFONT с нужным шрифтом. Шрифт вообще-то может лежать
в шаблоне диалога, тогда винда создаёт шрифт и рассылает всем
контролам WM_SETFONT.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36787489
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По поводу первого спасибо, попробую, по поводу второго - всем компонентам рассылать сообщения с WM_SETFONT или можно сделать чтото типа задать стандартный?
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36788058
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_Dav wrote:

> По поводу первого спасибо, попробую, по поводу второго - всем
> компонентам рассылать сообщения с WM_SETFONT или можно сделать чтото
> типа задать стандартный?

Можно и так, и так. Лучше просто задать шрифт в шаблоне диалога.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36790304
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что я не использую диалоги, если имелось ввиду Use System Font для MFC диалогов.
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36790329
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
window = CreateWindow( wcex.lpszClassName, TEXT(stages[ 0 ].header),
					 WS_OVERLAPPED|WS_CAPTION|WS_BORDER|WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE,
					 left_x, top_y, size_x, size_y,  0 ,  0 , hInstance,  0 );

все компоненты создаются через CreateWindow и WNDCLASS не содержит настроек для шрифтов
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36790504
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_Dav wrote:
> window = CreateWindow( wcex.lpszClassName, TEXT(stages[*0*].header),
> WS_OVERLAPPED|WS_CAPTION|WS_BORDER|WS_SYSMENU | WS_MINIMIZEBOX | WS_VISIBLE,
> left_x, top_y, size_x, size_y, *0*, *0*, hInstance, *0*);
>
>
> все компоненты создаются через CreateWindow и WNDCLASS не содержит
> настроек для шрифтов

Тогда создавай шрифт и рассылай WM_SETFONT сам.
Учти, что шрифт как объект WinGDI должен существовать всё время,
пока существует диалог (окно).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36791002
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv спасибо, первое помогло, правда не WM_ERASEBACKGROUND, а WM_ERASEBKGND. Не знаю от чего зависит, но все равно спасибо. По поводу второго сомнений и не возникало)
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36794233
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще один небольшой вопросик: один STATIC("Text") компонент обновляется несколько раз в секунду, точнее текст обновляется и при таком частом обновлении текст смазывается, такое ощущение, что рисуется один на другом. Как исправить?
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36795223
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_Dav wrote:

> Есть еще один небольшой вопросик: один STATIC("Text") компонент
> обновляется несколько раз в секунду, точнее текст обновляется и при
> таком частом обновлении текст смазывается, такое ощущение, что рисуется
> один на другом. Как исправить?

Не, вряд ли. Что-то сильно не так делаешь. Как смазывается -- может
картинку дашь?
И код ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36795503
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рисую фон и картинки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
case WM_PAINT:
		    PAINTSTRUCT ps;
	
			hdc = BeginPaint(hwnd, &ps);
			RECT R1, R2;
			R1.bottom = b_height;
			R1.left =  0 ;
			R1.right = b_width;
			R1.top =  0 ;
			DrawImg(hdc, R1, m_pImage);

			for (int i =  0 ; i < num_img; i++)
			{
				if (num == images[i].stad)
				{
								
					R2.bottom = images[i].height;
					R2.left = images[i].left;
					R2.right = images[i].width;
					R2.top = images[i].top;
					DrawImg(hdc, R2, images[i].m_pImage);
				}
			}
                                  EndPaint(hwnd, &ps);			
			return  0 ;
Создаю контрол в WM_CREATE:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
for (int i =  0 ; i <  2 ; i++)
	{
		progress_box.labels[i].label = CreateWindow(TEXT("STATIC"), progress_box.labels[i].text, 
				WS_CHILD | SS_LEFT ,progress_box.labels[i].left, 
                                             progress_box.labels[i].top, progress_box.labels[i].width,
                                             progress_box.labels[i].height,hwnd, (HMENU) progress_box.labels[i].index, NULL, NULL);
		SendMessage(progress_box.labels[i].label, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE);	
	}
Обновляю текст:
Код: plaintext
1.
2.
SendMessage(progress_box.labels[ 1 ].label, WM_SETTEXT,  0 , (LPARAM)pr_text);
InvalidateRect(window, &rc, false);
UpdateWindow(window);
window - хендл главного окна, rc - размеры STATIC

Код: plaintext
1.
case WM_ERASEBKGND:
      return false;
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36796761
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_Dav wrote:
> Автор: "Al_Dav"
> Рисую фон и картинки:
>
> case WM_PAINT:
> \t\t PAINTSTRUCT ps;
> \t
> \t\t\thdc = BeginPaint(hwnd, &ps);
> \t\t\tRECT R1, R2;
> \t\t\tR1.bottom = b_height;
> \t\t\tR1.left = *0*;
> \t\t\tR1.right = b_width;
> \t\t\tR1.top = *0*;
> \t\t\tDrawImg(hdc, R1, m_pImage);
>
> \t\t\tfor (int i = *0*; i < num_img; i++)
> \t\t\t{
> \t\t\t\tif (num == images[i].stad)
> \t\t\t\t{
> \t\t\t\t\t\t\t\t
> \t\t\t\t\tR2.bottom = images[i].height;
> \t\t\t\t\tR2.left = images[i].left;
> \t\t\t\t\tR2.right = images[i].width;
> \t\t\t\t\tR2.top = images[i].top;
> \t\t\t\t\tDrawImg(hdc, R2, images[i].m_pImage);
> \t\t\t\t}
> \t\t\t}
> EndPaint(hwnd, &ps);\t\t\t
> \t\t\treturn *0*;

Ну ты тут рисуешь несколько картинок, они друг над другом и рисуются.
Это и мигает. Такое лучше рисовать в memory DC, а затем копировать
в DC реальный.


>
> Создаю контрол в WM_CREATE:
>
> for (int i = *0*; i < *2*; i++)
> \t{
> \t\tprogress_box.labels[i].label = CreateWindow(TEXT("STATIC"), progress_box.labels[i].text,
> \t\t\t\tWS_CHILD | SS_LEFT ,progress_box.labels[i].left,
> progress_box.labels[i].top, progress_box.labels[i].width,
> progress_box.labels[i].height,hwnd, (HMENU) progress_box.labels[i].index, NULL, NULL);
> \t\tSendMessage(progress_box.labels[i].label, WM_SETFONT, (WPARAM)hFont, (LPARAM)TRUE);\t
> \t}
>
> Обновляю текст:
>
> SendMessage(progress_box.labels[*1*].label, WM_SETTEXT, *0*, (LPARAM)pr_text);
> InvalidateRect(window, &rc, false);
> UpdateWindow(window);

Вообще если ты уже послал WM_SETTEXT ничего
InvalidateRect и UpdateWindow уже не надо, если я правильно помню.

К тому же есть SetWindowText.

> window - хендл главного окна, rc - размеры STATIC

Что может быть со шрифтами я так и не понял. Где тут вывод текста ? Нету.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36797177
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Идет обновления текста в STATIC посылая ему сообщение WM_SETTEXT, при котором он мигает, а без
InvalidateRect(window, &rc, false);
UpdateWindow(window);
происходит наслаивание текста друг на друга
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36797398
Al_Dav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Со шрифтами все нормально уже, создал свой шрифт и всем его рассылаю
...
Рейтинг: 0 / 0
WINAPI мигают компоненты + жирные шрифты
    #36797755
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Al_Dav wrote:

> Идет обновления текста в STATIC посылая ему сообщение WM_SETTEXT, при
> котором он мигает, а без
> InvalidateRect(window, &rc, false);
> UpdateWindow(window);
> происходит наслаивание текста друг на друга

Так ты Erasebackground-то забанил, вот оно и не стирается.
как-то стирать всё же надо.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
WINAPI мигают компоненты + жирные шрифты
    #38326062
skylon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SendMessage(hMainWnd, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), 0);
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / WINAPI мигают компоненты + жирные шрифты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]