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

    [c++] api CreateWindowEx

    Nel codice per gestire l'applicazione come Multiple Document Interface, uso la CreateWindowEx per creare i controlli all'interno della MDI Child ... il controllo non viene visualizzato anche utilizzando ShowWindow() e UpdateWindow, ma da debug risulta creato e con GetLastErrore() --> "Operazione terminata con successo"!!!!


  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296
    Prova a postare tutta la porzione di codice significativa interessata dalla chiamata alla funzione API... magari qualcuno esperto in C++ può individuare l'errore ed esserti d'aiuto.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Originariamente inviato da alka
    Prova a postare tutta la porzione di codice significativa interessata dalla chiamata alla funzione API... magari qualcuno esperto in C++ può individuare l'errore ed esserti d'aiuto.

    Ciao!
    LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_CREATE:
    {
    HWND hEdit;
    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
    0, 0, 100, 100, hwnd, (HMENU)IDC_CHILD_EDIT, GetModuleHandle(NULL), NULL);

    if(hEdit == NULL)
    MessageBox(hwnd, "Non è possibile creare il controllo.", "Errore", MB_OK | MB_ICONERROR);
    }
    break;

    return DefMDIChildProc(hwnd, msg, wParam, lParam);
    default:
    return DefMDIChildProc(hwnd, msg, wParam, lParam);

    }
    return 0;
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non so come hai fatto a compilare ma a me non va ... il simbolo

    IDC_CHILD_EDIT

    non e' definito.

    Ho cercato in windows.h e non c'e' traccia di tale simbolo ...

    Ho provato a sostituirlo con NULL, in questo modo

    codice:
    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 
    0, 0, 100, 100, hwnd, (HMENU)NULL, GetModuleHandle(NULL), NULL);
    e non ci sono stati piu' errori. Il controllo e' stato creato ed era visibile ...

    Pero' non capisco ...

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Originariamente inviato da oregon
    Non so come hai fatto a compilare ma a me non va ... il simbolo

    IDC_CHILD_EDIT

    non e' definito.

    Ho cercato in windows.h e non c'e' traccia di tale simbolo ...

    Ho provato a sostituirlo con NULL, in questo modo

    codice:
    hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", 
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL, 
    0, 0, 100, 100, hwnd, (HMENU)NULL, GetModuleHandle(NULL), NULL);
    e non ci sono stati piu' errori. Il controllo e' stato creato ed era visibile ...

    Pero' non capisco ...

    ... non capisco neppure io:

    IDC_CHIL_EDIT l'ho definito come ID del controllo nel file di risorse (#define IDC_CHIL_EDIT 1000) e il suo ruolo è dare un riferimento al controllo !!!!!!!

    Ho pensato fosse un problema di risorsa, magari il compilatore non la "interpretava" ma commentando la define in compilazione invece dava errore per la sua mancanza.

    Mi sono preoccupato che il tipo di controllo esistesse (EDIT) ma avevo incluso commctrl.h
    ed in tale header era presente.

    in compilazione non ho avuto nessun errore e in esecuzione sia WM_CREATE che WM_MDICREATE che la WM_RESIZE venivano eseguite !!!!

    Ma mettendo (HMENU)NULL come faccio a riferimi al controllo una volta creato nelle successive operazioni ?????

    Adesso sono fuori e non posso provare ... appena mi è possibile fornirò aggiornamenti


  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Un attimo ... se hai definito il simbolo

    #define IDC_CHIL_EDIT 1000

    allora va bene ... ma l'hai definito con il nome IDC_CHIL_EDIT e non IDC_CHILD_EDIT

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Originariamente inviato da oregon
    Un attimo ... se hai definito il simbolo

    #define IDC_CHIL_EDIT 1000

    allora va bene ... ma l'hai definito con il nome IDC_CHIL_EDIT e non IDC_CHILD_EDIT

    no è un errore di battitura nella define è IDC_CHILD_EDIT !!!

    comunque per scrupolo ho provato con (HMENU)NULL come suggerisci ma il controllo non viene creato ugualmente.

    La porzione di codice da me postata fa parte della window procedure della chil che è creata come figlia di mdi client è in questo contesto che non crea i controlli anche se WM_CREATE che WM_MDICREATE dovrebbero creare la chil e pure la WM_RESIZE sono proceduralmente eseguite la chil non appare.

    Ho ricontrollato tutto il codice (definizione delle windows class, struttura mdi, procedure delle window ...) ed è ok (l'applicazione è eseguita il menu della frame è funzionante ma le chil non si visualizzano) ... l'ho confrontato anche con esempi in rete ed è uguale

    Tu hai provato questa porzione di codice a se stante o nel contesto di un MDI (multiple document interface) ???

    Che fare?????

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... io ho provato all'interno di un progetto piu' semplice ... del resto l'unico modo per fare quello che fai tu e' avere il tuo progetto ...

    Se vuoi, dammi una url e lo scarico ...

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2001
    Messaggi
    372
    Originariamente inviato da oregon
    No ... io ho provato all'interno di un progetto piu' semplice ... del resto l'unico modo per fare quello che fai tu e' avere il tuo progetto ...

    Se vuoi, dammi una url e lo scarico ...


    Eureka .... ho risolto!!!

    Ho aperto un nuovo progetto aggiungendo gli stessi file (sorgenti, header e risorse) e ricompilando il tutto ...

    MA COME E' POSSIBILE NON HO FATTO ALCUNA MODIFICA E ADESSO FUNZIONA !?!?!?!?

  10. #10
    Magari c'era qualche opzione o macro definita nelle proprietà del progetto che impediva il corretto funzionamento del programma...
    Amaro C++, il gusto pieno dell'undefined behavior.

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.