[ darkosos @ 13.01.2004. 16:37 ] @
(okruzenje je vc6)
Imam jedan dijalogčić u koji treba da se ukuca neki rezultat i napravljen je kao mali digitron, dakle nema edit box ili slično. Sve funkcioniše kako treba sa mišem, ali neće da prihvati kada se kuca sa tastature.
Startujem ga sa DialogBox() funkcijom i imam svoj message handler. Style mu je Popup. Nema title bar. Na pritiskanje tastera reaguje kao kad radiš u win nešto što ne može (čuje se neki tupavi zvuk). Osim naravno na esc, enter i tab. Prilikom trace-a nikad ni ne dođe do provere za WM_KEYDOWN.
Moja dijagnoza je da neka kontrola na samom dijalogu ima input focus, a ne sam dijalog. Pošto nema kontrole koja bi reagovala na tastaturu, kaže - ne može. Pokušao sam u WM_INITDIALOG da postavim fokus na dijalog, ali ništa.

Kako rešiti ovo?
[ milanche @ 13.01.2004. 17:01 ] @
Recept je da override-ujes virtual method PreTranslateMessage

BOOL CProbaDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYUP)
{
int nPaziOvoIpakRadi = 1; // ovde zabodes breakpoint
// Odavde zoves svoj handler za WM_KEYUP
}
return CDialog::PreTranslateMessage(pMsg);
}
[ darkosos @ 14.01.2004. 13:44 ] @
Hvala na odgovorru ali na žalost ne koristim MFC, tako da ovako ne mogu. Probaću da ubacim između GetMessage() i TranslateMessage(), trebalo bi da bude isto.
Ali i dalje me zanima zašto se dešava to što sam opisao i da li je moja dijagnoza dobra?
Code:

if (nPaziOvoIpakRadi==1)
    fala_puno = TRUE;
else
    fala_opet = TRUE;

:)
[ milanche @ 14.01.2004. 21:55 ] @
Verovatno zato sto je dijalog klasa napravljena tako da primarno odmah
prosledjuje poruke ostalim GUI elementima. PreTranslateMessage( ) je uglavnom
i napravljena zbog toga da i sama dijalog klasa moze da procesira odredjene poruke.