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

RusFAQ.ru: Win API


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

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

Выпуск № 327
от 23.10.2006, 19:05

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


Вопрос № 59266: Здравствуйте, Уважаемые Эксперты. Помогите разобраться с процедурами. Вот пример на Delphi: <hr> procedure TForm1.Button1Click(Sender: TObject); var mydc:integer; begin mydc:=GetDC(form1.Handle); Rectangle(mydc,10,10,2...
Вопрос № 59329: Задача: при двойном щелчке мыши в любом месте экрана считать координаты мыши. Почему-то функция SetCapture не срабатывает. Приложение написано в Visual C++ 6.0 (Win32 Application)...

Вопрос № 59.266
Здравствуйте, Уважаемые Эксперты.
Помогите разобраться с процедурами.
Вот пример на Delphi:


procedure TForm1.Button1Click(Sender: TObject);
var mydc:integer;
begin
mydc:=GetDC(form1.Handle);
Rectangle(mydc,10,10,20,20);
floodfill(mydc,11,11,clBlack);
end;


Не могу понять как закрасить. В описании FloodFill написано что надо установить цвет кисти но я не могу найти какой процедурой это делать. Если можно то сделайте свой пример. Без разницы на каком языке. Delphi был взят для написания примера.
Заранее спасибо.
Отправлен: 17.10.2006, 19:32
Вопрос задал: Чурсанов Евгений Ильич (статус: Студент)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: n0name
Здравствуйте, Чурсанов Евгений Ильич!
Создать кисть - CreateSolidBrush(). В качестве параметра функция получает цвет кисти, а возвращает HBRUSH. Далее вам необходимо SelectObject(), и которая вернёт вам предыдущий выделенный объект вам его надо сохранить, чтобы позже могли восстановить его и удалить кисть - DeleteObject.
Ответ отправил: n0name (статус: 7-ой класс)
Ответ отправлен: 17.10.2006, 19:39

Отвечает: Tek
Здравствуйте, Чурсанов Евгений Ильич!
У контекста устройства, которое Вы получили: mydc - есть множество настроек и выбранных по умолчанию объектов. Настройки обычно изменяются отбельными функциями, а вот графические объекты, такие как кисть, перо, битмап, регион и шрифт - выбираются в контекст при помощи функции SelectObject(HDC, HGDIOBJ) - которая возвращает дескриптор предыдущего выбранного объекта того же типа (за исключением выбора регионов - см. MSDN)
После использования этой функции - все операции, которые используют объекты контекста будут использовать ваш новый выбранный объект.
Выбираемый объект можно взять стандартный - получать дескриптор с помощью GetStockObject() или создавать собственный с помощью функций типа Create...
В вашем случае CreateSolidBrush(), CreatePatternBrush() и CreateHatchBrush() - кисти
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано
Ответ отправил: Tek (статус: 1-ый класс)
Ответ отправлен: 18.10.2006, 09:23


Вопрос № 59.329
Задача: при двойном щелчке мыши в любом месте экрана считать координаты мыши. Почему-то функция SetCapture не срабатывает. Приложение написано в Visual C++ 6.0 (Win32 Application)

Приложение:

Отправлен: 18.10.2006, 11:16
Вопрос задал: Bimonna (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Tek
Здравствуйте, Bimonna!
Чем не устраивают параметры сообщения
Цитата из MSDN по WM_LBUTTONDBLCLK:
lParam
The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано
Ответ отправил: Tek (статус: 1-ый класс)
Ответ отправлен: 18.10.2006, 11:25

Отвечает: Sergey A. Wedensky
Здравствуйте, Bimonna!

Все правильно, сообщение WM_LBUTTONDBLCLK Вам просто не приходит, если клик не в Вашем окне. А SetCapture Вы вызываете в обработчике этого сообщения.
Да и врядли Вам поможет в такой задаче SetCapture: даже если Вы поставите ее вызов в начале оконной функции, другим приложениям перестанут приходить сообщения от мыши (до тех пор, пока кто-то другой не перехватит Capture или система у Вас его не отберет, что, кстати, произойдет довольно скоро - например, при активации другого окна).
Так что единственный вариант, имхо - хуки.
См. в сторону SetWindowsHookEx с параметром WH_MOUSE, притом хук должен быть глобальным (т.е. в DLL).
Удачи!
Ответ отправил: Sergey A. Wedensky (статус: 5-ый класс)
Ответ отправлен: 18.10.2006, 11:32

Отвечает: ENS
Здравствуйте, Bimonna!
Понятия не имею, что это за функция, но координаты можно считать и так.Обрабатывайте WM_LBUTTONDBLCLK, а lParam будут координаты.
Верхнее слово Y нижнее X.

---------
Если нет выхода ищу вход.
Ответ отправил: ENS (статус: 7-ой класс)
Ответ отправлен: 18.10.2006, 14:16


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное