Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 26.01.2002, 23:49   #1
Младенец
 
Join Date: 01 2002
Location: Home
Posts: 8
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Question CEdit's Event

Objasnite pls, kak mogno zaxvatit' event<BR>ONKEYPRESSED (esli voobs'e est' takoj <IMG SRC="confused.gif" border="0"> ) u CEdit control-a. Obichnim metodom is Class Wizard -a ne poluchaetsja <IMG SRC="redface.gif" border="0">

V Builder-e eto raz pljunut', neugeli tut nado gluboko kopat'?

WBR
Reply With Quote
Old 27.01.2002, 01:20   #2
Moderator
 
acid's Avatar
 
Join Date: 09 2001
Location: South Korea, Gumi
Posts: 7,699
Downloads: 102
Uploads: 34
Blog Entries: 16
Reputation: 561 | 6
Exclamation

ni znau kakie obychnye metody ty proboval, no esli postavish svoi obrabotchik na EN_CHANGE to vse budet rabotat. Vot tut example dlja tebja.

<A HREF="http://users.freenet.am/~acid/Areg1.zip" TARGET=_blank>EditBoxExample</A>
Reply With Quote
Old 27.01.2002, 06:33   #3
Дошкольник
 
Basil REX's Avatar
 
Join Date: 01 2002
Location: Yerevan
Age: 64
Posts: 78
Downloads: 1
Uploads: 0
Reputation: 0 | 0
Post

Ob"jasni po-podrobnee kakoj event (ne v smysle nazvanija, a po suti) i zachem ty khochesh perekhvatit' i ja navernoe smogu ob"jasnit' kak eto sdelat'. <BR>Delo v tom chto v CEdit dlja raznykh celej po-raznomu eto delaetsja -- ja kak raz nedavno etim zanimalsja vplotuju. Esli khochesh mogu dlja primera prislat' kusok kida, kotoryj immitiruet smenu keyboard layout. No dlja drugikh celej po-drugomu delaetsja.
__________________
Per aspera ad astra!
Reply With Quote
Old 27.01.2002, 20:37   #4
Младенец
 
Join Date: 01 2002
Location: Home
Posts: 8
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Question

Skoree problema v tom, kak uznat' kakaja<BR>imenno knopka bila naz'ata. Naprimer u dialog Window est' event WM_KEYDOWN,handler kotorogo v parametrax imeet podrobnuju informaciju o naz'atoj knopke. A u Edit boxa<BR>takogo netu(vo vsjakom sluchae v Class Wizard-e).

S drugoj storoni ne vse ge knopki<BR>vizivajut izmenenie EditBox-a (naprimer knopka 'Insert').
Reply With Quote
Old 28.01.2002, 01:11   #5
The Reloaded
 
Aram Hambardzumyan's Avatar
 
Join Date: 01 2002
Location: behind the flesh and gelatinе of soft dull eyes
Posts: 3,387
Downloads: 4
Uploads: 0
Reputation: 146 | 4
Post

по-моему, в разделе про ON_CONTROL_REFLECT в msdn - то что нужно
Reply With Quote
Old 28.01.2002, 02:04   #6
Moderator
 
acid's Avatar
 
Join Date: 09 2001
Location: South Korea, Gumi
Posts: 7,699
Downloads: 102
Uploads: 34
Blog Entries: 16
Reputation: 561 | 6
Post

Areg, u editbox-a imenno est' keydown, tol'ko on dal'she ne vsu informaciu posylaet svoemu roditelu, smotrit esli chto-to izmenilos' posylaet rodichu EN_CHANGE i vse. Samym pravil'nym na moi vzgljad budet <BR>sozdanie classa derived ot CEdit-a. Tam i lovish svoi WM_KEYDOWN skol'ko xochesh. Pervyi parametr funcii OnKeyDown tebe vydast virtual code tvoei knopki. Mozhesh eshe sostojanie knopok Shift, ALT itd. vyjasnit' ispol'zuja GetAsyncKeyState(...).

Code example-a lezhit na tom zhe meste.

Udachi.
Reply With Quote
Old 28.01.2002, 07:02   #7
Дошкольник
 
Basil REX's Avatar
 
Join Date: 01 2002
Location: Yerevan
Age: 64
Posts: 78
Downloads: 1
Uploads: 0
Reputation: 0 | 0
Post

2 Areg

Здесь вопрос в следующем. Если ты привязываешь Edit control непосредственно к классу CEdit, то сообщение WM_KEYDOWD будет обрабатываться default имплементацией функции OnKeyDown класса CEdit, которая просто переадресует его родителю, т.е. основному Dialog box-у. В этом случае сделать прегрузку этой функции невозможно -- перегрузка делается в унаследованном классе -- в этом и смысл перегрузки. Если в диалоге нет других controls или не имеет значения какой из control-ов диалога имеет фокус в момент нажатия клавиши, то перехват можно сделать функцией OnKeyDown самого диалога. Для этого просто открой ClassWizard для основного диалога и добавь handler для сообщения WM_KEYDOWN.

Если принципиально важно определить нажатую клавишу именно в момент, когда фокус у конкретного Edit control-а, то надо поступать следующим образом:<BR> -- создай свой класс, унаследованный от CEdit (например пусть он называется AEdit).<BR> -- переключись на ClassView и для своего класса (AEdit) добавь handler сообщения WM_KEYDOWN (он будет в списке). Для этого делаешь правый клик на классе AEdit и выбираешь пункт Add Windows Message Handler... и в полученную заготовку впиши свой код. Первый параметр этой функции даст тебе виртуальный код клавиши, а если захочешь опредеть состояние Shift или CapsLock в этот момент, то используй функцию GetAsyncKeyState( vKey )внутри своего OnKeyDown, где вместо vKey подставь VK_SHIFT или VK_CAPITAL соответственно - детали посмотришь в MSDN.<BR> -- для своего Edit control-а создай переменную (обычным образом, с помощью ClassWizard), но при этом Category установи в Value, а из списка Variable type выбери свой класс (AEdit) он там уже будет.

Вот и все. Если что-то не так будет - пиши.<BR>Удачи!
Reply With Quote
Old 28.01.2002, 18:21   #8
Младенец
 
Join Date: 01 2002
Location: Home
Posts: 8
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Talking

Sbpasibo vsem, no especially Basil REX-u,<BR>za intimnie podrobnosti nasledovanija CEdit-a<BR>... <IMG SRC="smile.gif" border="0"><BR>Teper' vsjo OK!

WBR
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 09:23.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.