Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372

    api focus su edit control

    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 ...

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ... nessun suggerimento?

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: api focus su edit control

    Originariamente inviato da stefanoB
    se mando SendMessage(hcontrol[3], WM_SETFOCUS, 0, 0);
    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)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372

    Re: Re: api focus su 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)
    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;

    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

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    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;
    In teoria dovrebbe bastare SetFocus con l'handle del controllo a cui dare il focus.

    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.
    ok.

    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
    Primo: le dialog descritte in un file .rc possono essere modali o non modali, dipende dalle funzioni usate per crearle (DialogBoxXXX oppure CreateDialogXXX).
    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.

    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
    Come ho detto prima, l'ordine è quello della creazione dei controlli, non è indicato con dei flag o da qualche altra parte!

    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.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    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)

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    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 ..... !?!?!?



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.