Ciccioo (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/04/2009
|
salve a tutti,
sto scrivendo un piccolo programma/esercizio in cui ho bisogno di passare il focus dalla mia finestra ad un'altra finestra, per la precisione quella che sta dopo la mia nello "Z order", in pratica quella che ha avuto il focus per penultima.
ho provato così:
Codice sorgente - presumibilmente Plain Text |
SetWindowPos(GetNextWindow(hwndDlg,GW_HWNDNEXT),HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
|
questo codice, però mi porta semplicemente in primo piano la finestra, senza darle il focus.
cerca,cerca su internet ho rimediato un codice più o meno così:
Codice sorgente - presumibilmente Plain Text |
HWND hMenu=GetNextWindow(hwndDlg,GW_HWNDNEXT); AttachThreadInput(GetCurrentThreadId(),GetWindowThreadProcessId(hMenu,NULL),true);
SetFocus(hMenu); AttachThreadInput(GetCurrentThreadId(),GetWindowThreadProcessId(hMenu,NULL),false);
|
quest'ultimo codice proprio non fa niente, nessun effetto.
come devo fare?
grazie Ultima modifica effettuata da Ciccioo il 28/04/2009 alle 19:17 |
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
usa la SetFocus(hwnd)
con hwnd che è l'handle della finestra alla quale vuoi dare il focus
|
|
Ciccioo (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/04/2009
|
quello l'ho già provato nel secondo "tentativo"
su msdn dice che "The window must be attached to the calling thread's message queue."
le altre due funzioni che lo accompagnano servono appunto a questo, ma per un qualche motivo non funziona
|
|
Ciccioo (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/04/2009
|
scusate, doppio post
Ultima modifica effettuata da Ciccioo il 28/04/2009 alle 20:26 |
|
lorenzo (Normal User)
Guru
Messaggi: 1178
Iscritto: 15/04/2008
|
usa SetWindowPos come l'hai messa nel primo tentativo
e dopo quella metti SetFocus con l'handle della finestra che hai appena posto in primo piano
Ultima modifica effettuata da lorenzo il 28/04/2009 alle 20:53 |
|
Ciccioo (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/04/2009
|
non funziona.
passa in primo piano ma non gli dà il focus
nessuna idea?
Ultima modifica effettuata da Ciccioo il 30/04/2009 alle 21:55 |
|
Ciccioo (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/04/2009
|
credo di avere trovato l'errore...
se io per esempio metto nel codice una cosa come
Codice sorgente - presumibilmente Plain Text |
HWND hMenu;
hMenu=GetNextWindow(hwndDlg,GW_HWNDNEXT);
SetWindowText(hMenu,"banana");
|
non mi cambia il testo della finestra che stà dietro, quindi credo che il problema sia che la funzione GetNextWindow() non mi restituisce l'handle correttamente.
quindi ho provato con
Codice sorgente - presumibilmente Plain Text |
hMenu=GetWindow(hwndDlg,GW_HWNDNEXT);
SetWindowText(hMenu,"banana");
|
ma niente... boh che mi dite? |
|
Ciccioo (Normal User)
Rookie
Messaggi: 21
Iscritto: 16/04/2009
|
uno alla volta non vi accalcate
|
|
Daniele93 (Normal User)
Expert
Messaggi: 226
Iscritto: 29/05/2009
|
Ciao ciccio!!! heheh... io direi che si può fare csi: *à°#!ì^""-ç@
Tu che dici... haha
nnt ci vediamo domani a scuola!
il tuo affezzionato vicino di banco
p.s. se nn funzia il # prova con *
|
|