Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.61 MB
Время: 0.053 c
1-5630
[HDD]John
2003-02-20 12:35
2003.03.03
Картинка как фон


1-5491
Silver_
2003-02-20 17:47
2003.03.03
TActionMainMenuBar


4-5922
Diamond Cat
2003-01-15 02:53
2003.03.03
Shell_NotifyIcon


3-5401
rom900
2003-02-10 13:42
2003.03.03
Можно ли в DBGrid выделить несколько записей ?


14-5710
alex_bredin
2003-02-12 10:41
2003.03.03
InstallShield Express for Delphi 6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский