Beh ... ma cosa c'e' scritto tra i parametri della CreateWindow?
E cosa c'entra quella variabile in tutto cio' ?![]()
Beh ... ma cosa c'e' scritto tra i parametri della CreateWindow?
E cosa c'entra quella variabile in tutto cio' ?![]()
c'entra perchè tra i parametri della CreateWindow ce n'è uno che deve indicare la finestra "madre" a cui deve appartenere il controllo che sto creando...
per quanto riguarda quella CreateWindow è la seguente
La funzione per la creazione del bottone è tutta li... la stessa funzione vale anche per le label e le textbox..... all'inizio (quando avevo la variabile hWnd dichiarata localmente) funzionava tutto... ma ora il programma è molto grosso e non mi posso permetterla di averla dichiarata locale... controllando di nuovo tutto il programma sono sicuro di non aver fatto multiple dichiarazioni....codice:HWND ButtonOK ButtonOk = CreateWindow(TEXT("BUTTON"), "OK", WS_CHILD | WS_VISIBLE, 170, 50, 40, 15, hWnd, //<-- Eccola qui (HMENU)IDC_BUTTON, ((LPCREATESTRUCT)(lParam))->hInstance, NULL); if(!ButtonOk){ MessageBox(NULL,"Errore nella creazione del pulsante OK","ERRORE",MB_OK | MB_ICONEXCLAMATION); return NULL; }
Ma quel parametro rappresenta l'handle della finestra parent ... E quando viene assegnato il valore alla hWnd?
All'inizio del programma.... nel file form.cpp ho il seguente codice:
la finestra viene creata correttamente...codice:... hWnd = CreateWindow(....);
Dovresti individuare il codice di errore chiamando subito dopo la CreateWindow del pulsante la funzione GetLastError e visualizzando il valore restituito ...
Comunque, se mi permetti di dirlo, mi sembra strano che ti serva un HWND globale.
Se la creazione dei controlli la si fa "a mano", in genere la si fa in risposta al messaggio WM_CREATE. In quel caso il HWND del padre ce l'hai.
Poi in genere (almeno per me personalmente) se nella window-procedure devo scrivere parecchio codice in risposta ad un messaggio, creo una funzione apposita, a cui passo come minimo il HWND. Quindi anche in quel caso ce l'ho nuovamente.
Cioè, per dirla in breve, non vedo la necessità di avere una variabile globale che tiene un HWND di una finestra.
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
Scusate... problemi con la linea.... rieccomi... allora...
@Oregon: ho messo questo GetLastError... debuggando e mettendo un punto di interruzione in prossimità del GetLastError tra le espressioni di controllo mi compare:
La cosa strana è che avevo cambiato nome alla variabile hWnd come avevi detto tu... e ora si dovrebbe chiamare form no hWnd.... però sono sicuro che nel codice non sia scritto da nessuna parte quell' hWnd infatti non da nessun errore in fase di compilazione....codice:"hWnd Valore:CXX0017: Errore: Impossibile trovare il simbolo hWnd"
Ho provato a ricambiare nome alla variabile e l'ho richiamata hWnd ora, debuggando quando arriva a GetLastError mi compare:
e schiacciando sul "+" alla sinistra di "hWnd" compare:codice:"hWnd Valore:0x0000000 {unused=???} Tipo: HWND__"
codice:unused CXX0030: Errore: Impossibile valutare l'espressione
@AndBin: non so che dirti... questo è il mio primo progetto Win32 e sicuramente sarà impostato male.... mi sono ritrovato funzioni che avevano bisogno di questo hWnd all'interno di altre funzioni che richiamavano sempre questo hWnd.... siccome la cosa mi sembrava abbastanza ingarbugliata (e visto hce comunque utillizzavo questa variabile in tutte le funzioni) ho deciso di dichiararla goblale e ho apportato le dovute modifiche al codice....
@all: Se necessario vi passo il codice... ditemi voi come, dove....
che faccio allora? ancora non ho capito il problema quale sia....
Facciamo il punto della situazione:
- Il tuo programma è composto da più sorgenti .cpp
- Vuoi che ci sia una variabile hWnd di tipo HWND che sia comune e visibile a tutti i sorgenti.
Giusto? Come ho già detto, ignoro il perché tu debba per forza avere la necessità di usare una variabile HWND globale ... ma qui bisognerebbe vedere come è strutturato il codice.
Comunque, a parte questo:
- Hai un file di header che è incluso da tutti i sorgenti? Se sì, hai messo un
extern HWND hWnd;
in questo header?
- Hai messo in 1 solo sorgente (si presume quello in cui crei questa finestra) una variabile fuori dalle funzioni
HWND hWnd;
?
- Ti sei assicurato che non ci siano variabili locali che "nascondano" la variabile hWnd che hai messo come globale??
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
si è tutto corretto....
ho fatto come hai detto tu ma non va.... nessun errore in fase di compilazione, nessun warning... ma appena avvio il programma mi entra in questi if:
(Validi anche per label e textbox);codice:if(!ButtonOk){ MessageBox(NULL,"Errore nella creazione del pulsante OK","ERRORE",MB_OK | MB_ICONEXCLAMATION); return NULL; }
Non saprei.... per quanto riguarda il codice non so fino a che punto sia conveniente scriverlo tutto sul forum... posso provare.... o al max zippo il pregetto e ve lo invio via email...