Вопрос № 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 был взят для написания примера.
Заранее спасибо.
Отвечает: 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