In una applicazione MDI ho un edit control creato a run time (con CreateWindowEx)
se mando SendMessage(hcontrol[3], WM_SETFOCUS, 0, 0);
il focus è nella text box ma non è possibile inserivi valori da tastiera non scrive nulla ...
In una applicazione MDI ho un edit control creato a run time (con CreateWindowEx)
se mando SendMessage(hcontrol[3], WM_SETFOCUS, 0, 0);
il focus è nella text box ma non è possibile inserivi valori da tastiera non scrive nulla ...
... nessun suggerimento?
Infatti .... il WM_SETFOCUS non lo devi inviare tu (altrimenti non serve a nulla)!!!Originariamente inviato da stefanoB
se mando SendMessage(hcontrol[3], WM_SETFOCUS, 0, 0);
WM_SETFOCUS non è il messaggio "magico" che imposta il focus ma solo la notifica che un controllo ha ricevuto il focus.
--> Funzione Win32: HWND SetFocus (HWND hWnd)
avevo già provato con SetFocus(...); passando prima l'handle della window poi quello del controllo ma non ho comunque il cursore della tastiera sull'edit control;Originariamente inviato da andbin
Infatti .... il WM_SETFOCUS non lo devi inviare tu (altrimenti non serve a nulla)!!!
WM_SETFOCUS non è il messaggio "magico" che imposta il focus ma solo la notifica che un controllo ha ricevuto il focus.
--> Funzione Win32: HWND SetFocus (HWND hWnd)
La window è una mdi chil creata a run time, i controlli anch'essi creati a run time sono un ComboBox, un edit e relativi static come etichetta di campo ed un button tutti, tranne gli static, hanno lo style WS_TABSTOP.
La differenza che riscontro rispetto ad una window modale (file .rc), quella che utilizzo come login all'applicazione, dove non ho questo problema: sono i tabindex
è forse questo che non consete di avere il cursore nella edit a window creata??
... ma come si imposta un tabindex con il CreateWindowEx(...) se nel DWORD dwStyle non c'è traccia
In teoria dovrebbe bastare SetFocus con l'handle del controllo a cui dare il focus.Originariamente inviato da stefanoB
avevo già provato con SetFocus(...); passando prima l'handle della window poi quello del controllo ma non ho comunque il cursore della tastiera sull'edit control;
ok.Originariamente inviato da stefanoB
La window è una mdi chil creata a run time, i controlli anch'essi creati a run time sono un ComboBox, un edit e relativi static come etichetta di campo ed un button tutti, tranne gli static, hanno lo style WS_TABSTOP.
Primo: le dialog descritte in un file .rc possono essere modali o non modali, dipende dalle funzioni usate per crearle (DialogBoxXXX oppure CreateDialogXXX).Originariamente inviato da stefanoB
La differenza che riscontro rispetto ad una window modale (file .rc), quella che utilizzo come login all'applicazione, dove non ho questo problema: sono i tabindex
Secondo: le dialog box effettivamente hanno uno "strato" di gestione in più rispetto ad una normale finestra. Per il tabindex, l'ordine dei controlli è quello della sequenza con cui i controlli sono dichiarati nel descrittore DIALOG in un file .rc.
Come ho detto prima, l'ordine è quello della creazione dei controlli, non è indicato con dei flag o da qualche altra parte!Originariamente inviato da stefanoB
è forse questo che non consete di avere il cursore nella edit a window creata??
... ma come si imposta un tabindex con il CreateWindowEx(...) se nel DWORD dwStyle non c'è traccia
Se vuoi avere "di serie" sulle tue normali finestre la stessa gestione della tastiera come nelle dialog-box, aggiungi la funzione IsDialogMessage() nel tuo loop dei messaggi.
Originariamente inviato da andbin
Se vuoi avere "di serie" sulle tue normali finestre la stessa gestione della tastiera come nelle dialog-box, aggiungi la funzione IsDialogMessage() nel tuo loop dei messaggi.
ma trattandosi di una applicazione MDI (Multiple Document Interface) il loop dei messaggi è:
while(GetMessage(&Msg, NULL, 0, 0))
{
if (!TranslateMDISysAccel(g_hMDIClient, &Msg)) //per le chiavi accelleratori Ctrl+F6 Ctrl+F4 {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
in questo modo navighi correttamente ma nelle finestre con IsDialogMessage() ... non è gestibile e comunque non risolve il problema del focus .... ed allora???
collegato a questo problema c'è il mio post [C++] Utilizzo di finestre MDI e loro ottimizzazione http://forum.html.it/forum/showthrea...hreadid=961846 con problema sulle
modeless dialogs (loop messaggi)
Ho risolto il problema del focus:
settando il focus sul controllo in WM_MDIACTIVATE adesso ho il cursore nel controllo;
ma continua a non funzionare la navigazione sui controlli con il tasto tab risulta bloccata ..... !?!?!?