Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 457
от 05.09.2007, 14:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 409, Экспертов: 39
В номере:Вопросов: 1, Ответов: 2


Вопрос № 100345: Здравствуйте. Сделал прозрачный фон на надписях (static), но при изменении значения - текст накладывается один на другой. Пытаюсь исправить функцией InvalidateRect, но вручную RECT получать не хочется, т.к. много надписей а следующий код находит RECT...

Вопрос № 100.345
Здравствуйте. Сделал прозрачный фон на надписях (static), но при изменении значения - текст накладывается один на другой. Пытаюсь исправить функцией InvalidateRect, но вручную RECT получать не хочется, т.к. много надписей а следующий код находит RECT не там где нужно а правее и ниже, подскажите как исправить?

Приложение:

Отправлен: 31.08.2007, 12:56
Вопрос задал: Geograph (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Aristos
Здравствуйте, Geograph!

Подскажу как разобраться с координатами RECT'a.
Функция GetWindowRect возвращает значение RECT в экранной системе координат. А InvalidateRect принимает координаты в оконной (относительно hwndMain). Необходимо преобразовать из экранной в оконную с помощью функции MapWindowPoints, которая преобразует оконные координаты от одного окна к другому. Применительно к вашему коду:

RECT rt;
HWND hwndRect;
hwndRect = GetDlgItem(hwndMain,IDC_OBJECTS);
GetWindowRect(hwndRect,&rt);
MapWindowPoints(HWND_DESKTOP, hwndMain, (LPPOINT)&rt, 2);
InvalidateRect(hwndMain,&rt,true);

ps: Здесь мы пользуемся тем, что координаты для HWND_DESKTOP совпадают с экранными, а так же тем, что RECT это 2 точки - (left, top) и (right,bottom) - и их можно преобразовать одним вызовом функции.
Ответ отправил: Aristos (статус: 5-ый класс)
Ответ отправлен: 31.08.2007, 13:26
Оценка за ответ: 5
Комментарий оценки:
Aristos огромное спасибо за подробный, внятный ответ и особенно за пример! Все работает.

Отвечает: Shurka
Hi! Geograph!
Думаю проще и быстрее сделать надпись ненадолго непрозрачной,
а потом прозрачной снова.
Ответ отправил: Shurka (статус: 2-ой класс)
Ответ отправлен: 31.08.2007, 15:41
Оценка за ответ: 3
Комментарий оценки:
Да действительно я тоже пытался сначала так сделать. Делал
SetBkMode(hwnd,TRANSPARENT);
потом
SetBkMode(hwnd,OPAQUE);
но ничего не вышло надписи превратились в полностью булые прямоугольники.
Хотя может я что-то не правильно сделал :)


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.58 от 30.08.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное