PDA

Visualizza la versione completa : [C++] Navigazione tra controlli con funzioni API


stefanoB
03-01-2007, 16:47
Sapete spiegarmi perchè non riesco a spostarmi da un controllo ad un altro con il tasto tab??? I controlli sono figli di una
MDI Child, perchè trattasi di applicazione Multiple Document Interface, e sono stati creati con l'api CreateWindowEx ed hanno
il WS_TABSTOP ... ma non si naviga !!!! :dhò:

andbin
03-01-2007, 17:03
Originariamente inviato da stefanoB
Sapete spiegarmi perchè non riesco a spostarmi da un controllo ad un altro con il tasto tab??? I controlli sono figli di una
MDI Child, perchè trattasi di applicazione Multiple Document Interface, e sono stati creati con l'api CreateWindowEx ed hanno
il WS_TABSTOP ... ma non si naviga !!!! :dhò: La gestione della navigazione tra i controlli con il TAB (così come le altre particolarità nell'input) è una caratteristica che esiste tipicamente nelle dialog-box. Il tutto però è dovuto solamente a come viene gestito il loop dei messaggi (le funzioni per le dialog-box modali infatti hanno un "loro" loop dei messaggi particolare).

Usa la funzione IsDialogMessage() nel loop dei messaggi.

stefanoB
03-01-2007, 17:32
Originariamente inviato da andbin
Usa la funzione IsDialogMessage() nel 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)) //controlla le chiavi accelleratori Ctrl+F4 Ctrl+F6
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}

in questo modo navighi correttamente tra le finestre con IsDialogMessage() credo che questo si perda ... non ho provato!

andbin
03-01-2007, 17:54
Originariamente inviato da stefanoB
ma trattandosi di una applicazione MDI (Multiple Document Interface) il loop dei messaggi è:

while(GetMessage(&Msg, NULL, 0, 0))
{
if (!TranslateMDISysAccel(g_hMDIClient, &Msg)) //controlla le chiavi accelleratori Ctrl+F4 Ctrl+F6
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}

in questo modo navighi correttamente tra le finestre con IsDialogMessage() credo che questo si perda ... non ho provato! Perfetto .... allora fai:


if (!TranslateMDISysAccel(g_hMDIClient, &Msg) && !IsDialogMessage (g_hMDIClient, &Msg))

O almeno ... prova. Le interfacce MDI non le ho mai usate ... salvo qualche prova sporadica in passato.

stefanoB
10-01-2007, 10:53
Originariamente inviato da andbin
Perfetto .... allora fai:


if (!TranslateMDISysAccel(g_hMDIClient, &Msg) && !IsDialogMessage (g_hMDIClient, &Msg))

O almeno ... prova. Le interfacce MDI non le ho mai usate ... salvo qualche prova sporadica in passato.

NON VA ...

ho provato, in questo modo con il tab key navighi da una finestra ad un'altra e non tra i controlli della mdi child, anche avendo il DS_CONTROL per la classe della MDI child ed WS_CHILD, WS_EX_CONTROLPARENT, WS_TABSTOP per i controlli perchè essendo una mdi child con IsDialogMessage esci dalla finestra attiva passando ad un'altra se presente.

invece rimane la navigazione e chiusura finestra delle MDI con Ctrl+F4 Ctrl+F6 (questo OK)

come risolvo ???

Loading