Malaja
|
|
« : 09-09-2004 12:05 » |
|
Gospoda, pomogite pogalujsta ! U menja est Dialog, w kotorom w swoju ochered est CListCtrl (wnesennij s pomoshju Wizarda) s atributami LVS_REPORT , LVS_EDITLABELS , LVS_SHOWSELALWAYS (opjat ge wse eti swojstwa otmecheni w wizarde). Mne nugno imet wozmognost wnosit moj text w eti EditBoxi. I wse pochti uge rabotaet, no : perwaja bukwa wsegda propadaet! T.e ja w handlere OnKeydownList etogo CListCtrla otlawliwaju nagatie bukw i zifr i dlja nih zatem (CListCtrl*)GetDlgItem(IDC_LIST3)->EditLabel( nSelectedItemIndex ) Resultat - ja mogu pisat text w okoshke, no perwaja nagataja bukwa w okoshke ne wiswechiwaetsja ;-( A pochemu - nikak ne pojmu. Pitalas etomu EditBoxu SendMessage(WM_KEYDOWN, ..) posilat, a on wse rawno etu bukwu ne hochet
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
SOS
Гость
|
|
« Ответ #1 : 09-09-2004 16:47 » |
|
Привет Дело в том что в OnKeydownList приходит virtual key а не код буквы, т.е Shift, Ctrl, ... придут каждое нажатие отдельно. Буквы виртуальны и только заглавные. Если заглавные достаточно то проверь их так: // 0=48, 1=49,...,9=57 // A=65,...,Z=90 int iV_Kiey_Low = 65; int iV_Kiey_UP = 90;
if((pLVKeyDow->wVKey >= iV_Kiey_Low)&&(pLVKeyDow->wVKey <= iV_Kiey_UP)) { ...... }
При этом надо сохранить букву , а потом клеить к строке. Я бы начинал edit по NM_DBLCLK.
|
|
« Последнее редактирование: 01-12-2007 13:54 от Алексей1153++ »
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #2 : 10-09-2004 07:07 » |
|
SOS, ponimaesh, ja eto sdelala. Delo w tom, chto ja hotela, chtobi wse shlo po sledujushej sheme : - onclick na nugnoj stroke awtomaticheski ee wideljaet - a zatem pri nagatii ljuboj nugnoj bukwi srazu ge nachinaem redaktirowat T.e. eto imeet wid : void ListView::OnKeydownList3(NMHDR* pNMHDR, LRESULT* pResult) { bool bIsOk = true; LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; UINT nListSelectedItem = 0;
if ( (pLVKeyDow->wVKey >= 65 && pLVKeyDow->wVKey <= 90) || (pLVKeyDow->wVKey >= 49 && pLVKeyDow->wVKey <= 57) || (pLVKeyDow->wVKey >= 96 && pLVKeyDow->wVKey <= 105) ) { bIsOk = prepareForEdit(pLVKeyDow->wVKey); } else if (pLVKeyDow->wVKey == 46) { // if "delete" CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST3); nListSelectedItem = GetSelectedItem();
POSITION p = pList->GetFirstSelectedItemPosition(); if ( p ) { pList->DeleteItem( nListSelectedItem ); } } *pResult = 0; }
bool ListView::prepareForEdit(WORD nKeyCode) { int nCount = 0; UINT nListSelectedItem = 0;
CListCtrl* pList = (CListCtrl*)GetDlgItem(IDC_LIST3); pList->SetFocus();
// To Use EditCtrl on the ListView it must have the Style LVS_EDITLABELS if ( pList->GetStyle() & LVS_EDITLABELS ) { // don't do an Edit Label when the multiple Items are selected if( pList->GetSelectedCount( ) == 1 ) { nListSelectedItem = GetSelectedItem(); if ( pList->EditLabel( nListSelectedItem ) != NULL ) { m_nListSelectedItem = nListSelectedItem; } else { return false; } } else { return false; } } else { return false; } return true; }
T.e. pri nagatii bukwi ili zifri wiziwaetsja funkzija, aktiwirujushaja EditBox. No sama bukwa pri etom prozesse propadaet. Ja pitalas poslat etomu EditBoxu sama SendMessage(wm_keydown), no reakzija nulewaja
|
|
« Последнее редактирование: 01-12-2007 13:54 от Алексей1153++ »
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #3 : 14-09-2004 10:14 » |
|
No sama bukwa pri etom prozesse propadaet. Всё правильно, ты же её сама и проглатываешь: prepareForEdit(WORD nKeyCode) получает nKeyCode, но ничего с ним не делает. Можно сохранить его в мембере, а потом в OnBeginLabelEdit сразу вставить
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Malaja
|
|
« Ответ #4 : 14-09-2004 11:51 » |
|
Джон, spasibo! Ja pitalas etot simwol ispolzowat, poslaja SendMessage : pList->GetEditControl()->SendMessage(WM_KEYDOWN, nKeyCode, 10); prosto nado bilo wmesto WM_KEYDOWN poslat WM_CHAR No teper eshe odin woprosik : :oops: w void ListView::OnKeydownList3 opredelena LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR; Sama LV_KEYDOWN : typedef struct tagLVKEYDOWN { NMHDR hdr; WORD wVKey; UINT flags; } NMLVKEYDOWN, FAR *LPNMLVKEYDOWN; T.e u menja est tolko wVKey, a eto znachit, chto pri nagatii bukwi 'A' wVKey=65 wne zawisimosti ot registra, t.e. pri prostom ispolzowanii wVKey w okne wsegda budet stojat 'A'. Kak prowerit, kakoj registr na dannij moment wkljuchen, t.e. nagat li CapsLock ili Shift?
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #5 : 14-09-2004 13:12 » |
|
Посмотри ф-ю GetKeyState, параметр интересующая тебя клавиша
#define VK_NUMLOCK 0x90 #define VK_SCROLL 0x91 #define VK_LSHIFT 0xA0 #define VK_RSHIFT 0xA1 #define VK_LCONTROL 0xA2 #define VK_RCONTROL 0xA3 #define VK_LMENU 0xA4 #define VK_RMENU 0xA5
Кстати, немецкую "Alt Gr" я так и не знаю. :new_shot:
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Malaja
|
|
« Ответ #6 : 15-09-2004 06:54 » |
|
Джон, spasibo za pomosh - ja pro etu funkziju woobshe zabila :oops: Po powodu немецкую "Alt Gr"
posmotri : http://www.terms.de/german/97801/t_doku12/a2.htmJa prowerila - pri ee nagatii dejstwitelno prihodjat po ocheredi 2 wm_keydowm : odin raz s VK_Control (Ctrl) i zatem s VK_MENU (Alt). Kuda denesh'sja - bred polnij
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #7 : 15-09-2004 07:06 » |
|
"Что это за импровизация такая? Кто её выдумал? Наверное немцы. Вечно они чего нибудь придумают, а русскому человеку мучайся." (с) к/ф "Мы из джаза" Очень часто приходится убеждаться в справедливости вышесказанного. Ну вот надо было им всё переводить? И принтер, и клаву, и даже кнопки :new_shot:
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Malaja
|
|
« Ответ #8 : 15-09-2004 07:47 » |
|
Джон, polnostju soglasna. Uge 7 let postojanno ubegdajus w tom, chto oni wse ljubjat na swoj lad naziwat i perestraiwat. No samoe zabawnoe (i eto uteshaet :twisted: ), chto mestnie s etim toge muchajutsja i ja reguljarno slishu na etu temu wse, chto oni ob etom dumajut U menja tut eshe odin wopros nazrel - ne serdites wse :oops: Funkzija GetKeyState spasaet w sluchae, kogda ti nagal klawishu , a potom otpustil. Naprimer, dlja capslock - ok, esli ona nagata, to wse bukwi awtomatom perewodjatsja w bolshie i loword(GetKeyState) wozwrashaet 1. Esli ge rech idet o shift, to dlja poluchenija rezultat ee nado dergat w nagatom sostojanii. No funkzija wozwrashaet pri etom status=-127! t.e. proishodit perepolnenie... esli dergat capslock nagatoj, resultat takoj ge t.e. loword i hiword rawni kakim-to bredowim chislam. Wopros - chto wse eto znachit???
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #9 : 15-09-2004 10:16 » |
|
Ааа, ну так тебе надо анализировать возвращённое значение. MSDN есть? Ща выдержку приведу:
Return Value
The return value specifies the status of the specified virtual key, as follows:
If the high-order bit is 1, the key is down; otherwise, it is up. If the low-order bit is 1, the key is toggled. A key, such as the CAPS LOCK key, is toggled if it is turned on. The key is off and untoggled if the low-order bit is 0. A toggle key's indicator light (if any) on the keyboard will be on when the key is toggled, and off when the key is untoggled.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #10 : 15-09-2004 10:25 » |
|
Подожди, А почему они у тебя -127? ведь возвращаестя SHORT. Покажи код, как ты это делаешь.
зы Может так получится, что я тут сегодня больше не появлюсь, поэтому вот что я имею ввиду: у тебя должно получится что-нить типа
0хff81 1111 1111 1000 0001 - интересующие нас биты
SHORT sh = ::GetKeyState(VK_LCONTROL); if((sh&0x80)==0x80) // { // key down }
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Malaja
|
|
« Ответ #11 : 15-09-2004 12:05 » |
|
Джон, u menja bil wkljuchen pokaz w desjatichnoj sisteme, posemu pojawljalos -127, esli wkljuchit hex, to widen 0хff81. Ja sdelala tak : SHORT nState = GetKeyState(VK_SHIFT); if (HIWORD(nState) == 1) { bIsShift = true; } else { bIsShift = false; } t.k. naskolko ja ponimaju, LOWORD HIWORD prowerjajut nugnie nam biti (nu ne ljublju ja pobitowuju arifmetiku i wsju gizn s nej putajus ) S tem kodom, kotorij ti mne pokazal, wse horosho dlja caps locka (werhnij bit d.b. wkljuchen). Ja sdelala sama lja shifta (nam nugen mladshij bit) - ne rabotaet : if(nState == 0x80) bIsCapsLock = true; else bIsCapsLock = false; a chto tut ne tak - ponjatija ne imeju (widno opjat chto-to ne tuda sdwinula)
|
|
« Последнее редактирование: 01-12-2007 13:56 от Алексей1153++ »
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #12 : 15-09-2004 15:06 » |
|
Ошибка в том, что ты проверяешь результат, а не бит. SHORT nState = GetKeyState(VK_SHIFT); if (HIWORD(nState) == 1) .... работает только для toggle бита (см ниже) - 0х01 например будет фальш, если даже у тебя шифт находится в ON, но при этом ещё и нажат. те результат будет 0х81 != 1 или наоборот если он у тебя был "включен", то при послед. нажатии и ужержании он перейдёт в toggle off тогда будет ситуация 0х80!=1 хотя кнопка нажата. Для того, чтоб определить, нажат Shit или нет тебе нужен только старший бит - 0х80 Значица так, опрашиваем биты для Shift sh = ::GetKeyState(VK_LSHIFT); if((sh&0x80)==0x80) // проверка старшего бита - 1 кнопка нажата 0 - отпущена { TRACE0("Left Shift down\n"); } else { TRACE0("Left Shift button up\n"); } младший бит проверять у него не имеет смысла тк это переключатель - toggle. Те он переключается через 2 нажатия. Можешь посмотреть: if((sh&0x01)==0x01) // проверка состояния переключателя - toggle { TRACE0("Left Shift is ON\n"); } else { TRACE0("Left Shift is OFF\n"); } Для Caps совсем наоборот, от него нам нужен именно toggle бит, тк сама кнопка может быть отпущена в этот момент SHORT sh = ::GetKeyState(VK_CAPITAL); if((sh&0x80)==0x80) // просто посмотреть нажата ли кнопка или нет { TRACE0("CapsLock down\n"); } else { TRACE0("CapsLock up\n"); }
if((sh&0x01)==0x01) // !!!!! а здесь её состояние { TRACE0("CapsLock is ON\n"); } else { TRACE0("CapsLock is OFF\n"); } Но и опять таки НИ В КОЕМ СЛУЧАЕ НЕ ПРОВЕРЯТЬ на равенство 1. если он был выключен и кнопка отпущена - 0х00. Теперь нажимаем Caps и удерживаем - ситуация - 0х81 != 1 хотя он включен и буквы должны быть заглавными. Поэтому единственно правильным является использование бинарной И ну и чтоб совсем "чисто" было - сравнить результат с образцом.
|
|
« Последнее редактирование: 01-12-2007 13:58 от Алексей1153++ »
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash "Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman "All science is either physics or stamp collecting." Ernest Rutherford "Wer will, findet Wege, wer nicht will, findet Gründe."
|
|
|
Malaja
|
|
« Ответ #13 : 16-09-2004 12:46 » |
|
Джон, spasibochki, teper ponjala! Ja po swoej durosti dumala, chto eti funkzii sostojanie bitow oprashiwajut Wse rabotaet!
|
|
|
Записан
|
холоднокровней, Маня, Ви не на работе --------------------------------------- четкое определение сущности бытия: - А мы в прошлом или в будущем?- спросила Алиса. - Мы в жопе, - ответил кролик. - А "жопа" - это настоящее? - спросила Алиса. - А "жопа" - это у нас символ вечности.
|
|
|
|