Форум: "WinAPI";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];
ВнизПерекрытие WndProc для стандартных виндовых контролов Найти похожие ветки
← →
cult (2003-01-08 16:24) [0]Вот в чем проблема. Имею я, скажем, ComboBox и хочу у него перекрыть WndProc и самостоятельно обрабатывать мышиные клики. Но при клике на области, где в комбобоксе вводится текст, перехватывания этого события не происходит, и даже, кажется, в WndProc ничего не приходит. С чем это связано и как с этим бороться?
Спасибо.
← →
Игорь Шевченко (2003-01-08 16:50) [1]
> области, где в комбобоксе вводится текст
Это совершенно другое окно, от класса EDIT. Надо еще и у него перехватывать оконную процедуру. Это окно искать по
GetDlgItem(ComboBox.Handle, $03E9);
При этом надо убедиться, что ComboBox содержит окно Edit (по крайней мере, сравением результат вызова функции с нулем).
← →
cult (2003-01-14 17:35) [2]Во, добрался наконец-то!
>GetDlgItem(ComboBox.Handle, $03E9);
А откуда взялась эта цифра?($03E9) Как ее получить для поля класса Edit и для других классов, напр., scrollbar?
← →
MBo (2003-01-14 17:50) [3]см. GetComboBoxInfo в msdn
ограничения:
Minimum operating systems Windows 98, Windows NT 4.0 with Service Pack 6
← →
cult (2003-01-14 18:13) [4]так а нельзя ли для абстрактного WinControl"a (сейчас в качестве таковых рассматриваются Grid"ы со скроллбарами и ComboBox"ы со своими Edit"ами) получить список "дочерних" контролов? А то как-то неуниверсально получается
← →
Diamond Cat (2003-01-15 03:13) [5]enumchildwindows вроде высвечивает все подряд, но точно не помню надо проверить
← →
Игорь Шевченко (2003-01-15 09:55) [6]А Scrollbar - это не дочерний контрол. Это кусок неклиентской области, точно так же, как область меню, заголовка, и т.д.
Как узнавать дочерние контролы - запустить WinSight или Spy++
С уважением,
← →
pirat (2003-01-15 11:49) [7]Игорь Шевченко
Почему это скроллбар не контрол? :(
hwnd:=CreateWindow("scrollbar",...)
На самом деле он может быть и отдельным контролом, и принадлежать неклиенткой области.
← →
Игорь Шевченко (2003-01-15 12:07) [8]pirat © (15.01.03 11:49)
Внимательно читаем вопрос:
> (сейчас в качестве таковых рассматриваются Grid"ы со скроллбарами
> и ComboBox"ы со своими Edit"ами)
← →
cult (2003-01-15 13:59) [9]>Игорь Шевченко
Наверное, я чего-то не понимаю - растолкуйте, если не лень.
Должны же эти скроллбары у кого-то Child"ами быть? То есть, их кто-то держит в списке?
А кто это и как с ним поговорить? :)
Спасибо.
← →
Игорь Шевченко (2003-01-15 14:20) [10]cult © (15.01.03 13:59)
Стандартные Scrollbar"ы - это не окна. И Child"ами следовательно, быть ни у кого не могут. Это такая же стандартно рисуемая часть окна, как заголовок или строка меню. Их наличие/отсутствие определяется стилями окна WS_VSCROLL/WS_HSCROLL, а позиция ползунка и прочие параметры
Get/SetScrollInfo
Поговорить - ShowScrollbar, EnableScrollbar, Get/SetScrollInfo и много всего другого в Win32.hlp
С уважением,
← →
arcoant (2003-01-15 14:23) [11]fsdfsdfsdfddf Sorry!!!
← →
cult (2003-01-15 14:36) [12]>Игорь Шевченко
То есть, универсального рецепта нет, для скроллящихся контролов одно, для контролов с EditBox"aми - другое. Жаль...
Но все равно спасибо, я получил большую пищу для размышлений и массу полезной информации :)
← →
Diamond Cat (2003-01-15 14:58) [13]почти все окна можно отскролить с помощью WM_MOUSEWHEEL в msdn пишут что это сообщение проходит всю цепочку (родительских) окон !? пока не будет найдено то которое его обрабатывает, в случае неудачи возвращает 0.
Но у него есть недостаток , может прокручивать только вертикальный скрол, по крайней мере в word, я не смог прокрутить окно по горизонтали, причем вообще никаким способом из перечисленных выше Игорем Шевченко
← →
cult (2003-01-15 15:34) [14]Diamond Cat © (15.01.03 14:58)
Спасибо, но мне крутить ничего не надо, наоборот - надо, чтобы ничего не крутилось :)))
← →
Игорь Шевченко (2003-01-15 15:45) [15]Diamond Cat © (15.01.03 14:58)
SetScrollPos не помогает ? (Для Word"a, кстати, все по-другому,
у него Scrollbar"ы могут быть отдельными дочерними контролами).
Кроме того, ни разе не встречал на своей жизни окна, которое можно было бы прокрутить колесом в горизонтальном направлении.
← →
cult (2003-01-15 16:29) [16]
Кстати, по теме:
стал пользовать enumchildwindows и добился непонятного глюка:
после того, как срабатывает EnumChildProс, контрол, у которого мы искали Child"ы, перестает быть доступен, такое впечатление, что он просто рушится :( что это такое вообще?
код:
function ChildsCallBack(hndl: HWND; par: LPARAM):boolean;
begin
Showmessage(inttostr(Hndl));
Result:=True;
end;
.......
if newcontrol is tWinControl then
enumchildwindows(TWinControl( newcontrol).Handle,@ChildsCallback,s);
Вот NewControl, кажись, и разрушается...
← →
pirat (2003-01-15 19:02) [17]Игорь Шевченко и Diamond Cat
Имел я недавно дело с мышкой у которой вместа колеса - шарик. Такой трекбол, в сильно уменьшенном варианте. Так вот с помощью ее можно было крутить в Excel окно во всех напрвлениях. А вот в word - низзя. И вот я теперь думаю, как бы эту мышу и к ворду приспособить, какое же сообщение нужно перехватить (наверняка нестандартное, драйвер_мыши->окна) и что передать ворду для горизонтальной прокрутки.
← →
Игорь Шевченко (2003-01-16 09:40) [18]cult © (15.01.03 16:29)
stdcall на конце функции забыл.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c