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

    [C++ gestione messaggi: comportamento anomalo in Vista(home premium)]

    l'applicazione testata in win98, 2000 non da problemi, ossia le form presentano il cursore sul primo edit (come così definito)
    con il tab si passa da un controllo ad un'altro nella stessa form, si usa con successo il Crtl+6 (passaggio tra le win) e
    il Ctrl+4 (chiusura win), tutto ciò in vista NON FUNZIONA ....
    - in apertura della win non è presente proprio il cursore sul primo controllo
    - Crtl+6 e Crtl+4 funzionano
    - se usi il tab (cliccando prima sul campo x ottenere il cursore) non passa sul prossimo controllo ... si perde
    - qualsiasi altra operazione che tenti di fare non va a buon fine perchè l'applicazione è bloccata


    Premessa:
    - progetto realizzato in MinGW Developer Studio 2.05
    - applicazione MDI così strutturata Frame Window->Mdi Client->MDI child window->Dialog Window
    - le form vengono create con CreateDialog()
    - i template resouce delle form hanno queste proprietà:
    DIALOGO -
    xStyle WS_CHILD, WS_VISIBILE, DS_CONTROL

    CONTROLLO -
    xExStyle WS_CONTROLPARENT
    xStyle WS_CHILD, WS_VISIBILE, WS_TABSTOP


    - nella procedure di MDIChil:
    - in WM_CREATE Setfocus(handle della form);
    - in WM_MDIACTIVATE SetFocus(GetWindow((HWND)SendMessage(g_hMDIClient, WM_MDIGETACTIVE,0,0),GW_CHILD));

    - nel loop messaggi:
    if(!TranslateMDISysAccel(g_hMDIClient, &Msg) && (!IsDialogMessage(GetWindow((HWND)SendMessage(g_hM DIClient, WM_MDIGETACTIVE,0,0),GW_CHILD), &Msg))) {


    tutti le modifiche/tentativi hanno avuto esisto negativo e non sono riuscito a capire che succede e perchè succede ...
    come si risolve!??!??

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ho provato a impostare la compatibilità dell'eseguibile, tutte le possibili opzioni che vista mette a disposizione esegui come:
    1. win95 problemi al lancio
    1. win98 si blocca dopo la logon
    2. NT 4 accedi al programma ma si pianta se interroghi il db
    3. win2000 idem nt
    4. xp idem nt
    5. win serv 2003 idem nt

    e comunque il problema di navigazione sui controlli che blocca il programma permane

    ho provato a compilare il progetto in Vista (installando MinGW e durante l'installazione nessun problema),
    quando però compilo il file delle risorse (.rc), solo su questo tipo di file, esce questo errore:


    gcc: installation problem, cannot exec 'cc1': No such file or directory
    E:\MinGWStudio\MinGW\bin\windres.exe: no resources


    i file ci sono, le impostazioni di protezione per lo user consentono l'esecuzione, da setting del progetto non vedo come
    specificare eventuali path in merito ... che gran casino

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Adesso non ho sottomano Vista ma prova ad eseguire il Developer Studio come admin (intendo usando il tasto destro e scegliendo l'opzione Run as ...) ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Originariamente inviato da oregon
    Adesso non ho sottomano Vista ma prova ad eseguire il Developer Studio come admin (intendo usando il tasto destro e scegliendo l'opzione Run as ...) ...
    come non speravo ma temevo, purtroppo non risolve l'errore in compilazione del file .rc anche perchè avevo installato ed eseguito MinGWStudio con tali diritti essendo io stesso amministratore, volevo tentare di ricompilare tutto il progetto in vista per verificare se i problemi di navigazione e piantamenti potevo essere risolti ...

    cercando ho trovato questo:
    "Windows Vista limita a 32 Megabytes la memoria allocabile da parte di software compilato con il compilatore GNU GCC. In pratica le richiete malloc() sono limitate a quelle dimensioni, ridicolo! SEMPLICEMENTE RIDICOLO!

    Cioe’ solo gli eseguibili compilati con un compilatore Microzozz e linkati con le API netive M$ possono allocare piu’ di
    32 MB di RAM. Se si compila con GCC, il limite di memoria allocabile e’, appunto, di 32 MB….."

    articolo in [URL=http://www.vitadiunsysadmin.net/2007/06/04/sulla-apparente-superiorita-di-microsoft-windows-vista.mht[/URL]

    chiedo se questo potrebbe essere la causa dei blocchi del programma, anche se non avvengono sempre nello stesso punto, alcune volte quando delle form portano in modifica i dati, altre quando si esce dal programma, sempre quando si apre un tab control... ma non sono sicuro se arrivo ad allocare 32 mb (non credo) uso new e delete per deallocare nei relativi file ...

    comunque ciò non dovrebbe influire assolutamente con la gestione dei messaggi, mi riferisco al fatto che non funziona la navigazione tra i controlli con il tab e neppure appare il cursore sul primo controllo, se usi il tab si blocca l'applicazione

    ho fatto nuove prove in xp:
    se eseguo il programma dopo che ha fatto il logon (interroga il db, esegue store procedure..) non apre il programma ma da il messaggio "...si è verificato un errore.. " in ModName: ntdll.dll

    a riguardo ho trovato:
    stub di smistamento per l'accesso ai servizi di sistema dell’Executive di Windows NT. Queste funzioni costituiscono
    la cosidetta Native API e sono quelle che effettivamente interagiscono col "real NT" ....

    non ci stò a capire + nulla ... dove sta il problema per Vista e per xp????
    devo distribuire l'applicazione purtroppo su questi sistemi come faccio a farla girare stabilmente???

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ma è davvero possibile che da win 98 e/o 2000 in poi siano cambiate le api per la gestione dei messaggi, da non far funzionare più la navigazione tra i controlli ??!??

    sapendo che Mingw32 ha il compilatore gcc per Windows che utilizza la DLL di Windows "crtdll.dll" pensavo di prova a compilare il tutto in vista ed in xp secondo della distribuzione dell'applicazione, ma non compila i file resorce (MingStudio, gcc 3.4.2), per ovviare a ciò ho provato a settare le variabile d'ambiente GCC_EXEC_PREFIX con relativo path visto che dall'IDE non c'è sorta di settaggio (che io sappia e da quello che ho trovato su MinGWStudio), ... adesso non compila neppure i file .cpp!

    suggerimenti in merito molto graditi!!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    ho provato a settare i percorsi dal menu options di MinGW Studio tab directory, library file "C:\MinGWStudio\MinGW\libexec\gcc\mingw32\3.4. 2" e resource file "C:\MinGWStudio\MinGW\bi" ... niente da fare continua a compilare solo i file cpp, c e non i resource file (.rc) ....

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Ulteriori prove su Xp, installato MinGWStudio (stessa configurazione), compila tutto perfettamente:

    ma non si riesce ad utilizzare il Tab per i controlli inchioda l'applicazione con errore szModName: hungApp

    ... come è possibile se in win98, win2000 funziona perfettamente e niente segnalato da debug ???

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Aggiornamenti in merito:

    tutte le anomalie relative al tab key per spostarsi sui controlli di una dialog avvengono solo in Win2000, XP e in Vista, in win98 non ci sono anomalie di questo tipo, non so spiegare perché;

    la differenza tra una dialog (modali) e una "normale" finestra, è che il sistema esegue ulteriori operazioni di default sulla dialog, come creare e inizializzare controlli e processare l'ordine di tab. Normalmente tutte le API applicabili alle finestre "normali" funzionano anche nelle finestre di dialogo e vice versa.

    Io ho utilizzato delle dialog non modali (modeless dialog), ossia generate con CreteDialog(), in quanto non necessitavo di finestre modali che implementano il proprio loop dei messaggi e che non ritornano finchè la dialog non viene chiusa, la CreateDialog() ha lo stesso comportamento di una finestra generata con CreateWindoEx() e ritorna immediatamente e tutti i messaggi vengono processati dal loop dei messaggi principale con IsDialogMessage();

    si parla quindi di modeless dialog, figlia di una MDIChild finestra contenitore che intercetta tutti i messaggi, ma quello relativo alla pressione del tab, anche se intercettato non è inviato alla dialogbox, di conseguenza non si passa da un controllo ad un altro;

    infatti la riprova può essere fatta intercettando il tasto return nella dialog procedura della modeless (form), (ovviamente con il focus su un controllo edit), questo è tradotto da IsDialogMessage() ed inviato alla form in WM_COMMAND

    viceversa gli accelleratori sono gestiti dai rispettivi TranslateAccelerator e TranslateMDISysAccel.



    Per riuscire a capire il problema, ho fatto diverse prove di compilazione dello stesso codice:

    1) in win 98 MinGw 3.4.2 funziona
    2) in Xp MinGw 3.4.2 NO (l’uso del tab blocca l’applicazione)
    3) in Vista CodeBlock8.02. MinGW 3.4.5 NO (l’uso del tab blocca l’applicazione)


    Ho provato anche ad installare un hook WH_GETMESSAGE, ma senza successo la tabulazione non funziona!


    altra cosa che in win2000, Xp, Vista non fuziona è il keyboard focus:
    anche se il controllo della form ha il WS_TABSTOP come proprietà, e il SetFocus(dialogo) non sarà presente sul primo controllo della form

    ho dovuto forzare ciò con:

    PostMessage(dialogo,WM_NEXTDLGCTL,(WPARAM)GetDlgIt em(dialogo,1000),TRUE);


    detto questo, non ho però soluzione al problema tab key e non credo sia impossibile da gestire … altrimenti è da suicidio creare i controli a runtime nella MDIChild, finchè si tratta di una applicazione con max 3 win ok ma la cosa cambia con 60,80 windows …

    potreste darmi una mano a trovare una soluzione … grazie

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.