Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

Перекрытие 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 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.023 c
7-5891
ram1987
2003-01-04 19:13
2003.03.03
Как определить запущенные приложения


3-5407
boa
2003-02-12 08:55
2003.03.03
Закрытие сессии по IdleTime


1-5616
Zn
2003-02-20 09:57
2003.03.03
Отображение текста в StatusBar - нет на других машинах.


14-5823
vell
2003-02-13 12:59
2003.03.03
Подскажите пожалуйста компоненты для


3-5412
msgipss
2003-02-10 19:00
2003.03.03
некоректное чтение .dbf созданного в foxpro (dos)