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

    [C API WIN 32] Problema con LISTBOX

    Dunque, ho un dialogo, dovrei aggiungere il testo contenuto in un controllo EDIT in una LISTBOX, quando premo il pulsante OK.
    Ma non capisco perchè, quando premo OK, non succede proprio nulla. Per controllare se l'applicazione arriva a gestire l'evento WM_COMMAND ho inserito una MESSAGEBOX, ed infatti quando clicco il pulsante la MESSAGEBOX appare, ma il testo dell'EDIT proprio non me la vuole inserire nella LISTBOX!
    codice:
    #define STRICT
    #define WIN32_LEAN_AND_MEAN
    #define OEMRESOURCE
    #include <windows.h>
    #include <windowsx.h>
    #include <stdlib.h>
    #include <string.h>
    #include "resource.h"
    #include "main.h"
    
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        DialogBoxParam(0,MAKEINTRESOURCE(IDD_DIALOG1), 0,EventsManager,0);
        return 0;
    }
    
    
    
    BOOL  CALLBACK EventsManager(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        static int messages[]={WM_CLOSE,WM_COMMAND,-1};
        static DLGPROC on_events[]={On_Close,On_Command};
        int i=0;
        int notify=0;
        char str[6];
        while(notify>=0)
        {
            notify=messages[i];
            if(notify<0)break;
            if(uMsg==notify)return on_events[i](hwndDlg, uMsg, wParam, lParam);
            i++;
        }
        return FALSE;
    }
    
    BOOL CALLBACK On_Command(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        char text[256];
        HWND hEdit;
        switch(HIWORD(wParam))
        {
            case BN_CLICKED:
            {
                switch(LOWORD(wParam))
                {
                    case ID_OK:
                    {
                        MessageBox(0, "L'evento viene gestito", "Fin qui va tutto bene!", MB_OK);
                        hEdit=GetDlgItem(hwndDlg,ID_EDIT);
                        GetWindowText(hEdit,text,256);
                        SendMessage(hEdit,LB_ADDSTRING,0,(LPARAM)text);
                        return TRUE;
                    }
                    break;
                    case ID_CANCEL:
                    {
                       EndDialog(hwndDlg,0);
                       return TRUE;
                    }
                    break;
                }
            }
            break;
        }
        return FALSE;
    }
    
    BOOL CALLBACK On_Close (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        EndDialog(hwndDlg,0);
        return TRUE;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Fammi capire ... con questa linea

    SendMessage(hEdit,LB_ADDSTRING,0,(LPARAM)text);

    invii il messaggio LB_ADDSTRING al controllo hEdit?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    487

    Potrebbe essere....

    Allora... è meglio che porsti anche resoucre.h, main.h e il file .rc
    Non sono un esperto di win32 ma proverò comunque ad aiutarti.
    Penso che il problema sia questo:


    codice:
    MessageBox(0, "L'evento viene gestito", "Fin qui va tutto bene!", MB_OK);
    hEdit=GetDlgItemID(hwndDlg,_EDIT);
    GetWindowText(hEdit,text,256);
    SendMessage(hEdit,LB_ADDSTRING,0,(LPARAM)text);
    a

    Codice PHP:
    if (MessageBox(0"L'evento viene gestito""Fin qui va tutto bene!"MB_OK) == IDOK)/*etc*/ 
    questo è per fare la condizione quando premi premi OK


    Penso che la mia risposta sia futile per te comunque.... ho provato

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95
    Si, con "SendMessage(hEdit,LB_ADDSTRING,0,(LPARAM)text );" invio il messaggio al controllo hEdit, cioè l'EDIT(che ha come id ID_EDIT).

    Questo è il resource.h:

    codice:
    #define IDD_DIALOG1                             100
    #define ID_OK                                   101
    #define ID_CANCEL                               102
    #define ID_LIST                                 103
    #define ID_EDIT                                 104
    Questo invece è resource.rc:
    codice:
    #include <windows.h>
    #include <commctrl.h>
    #include <richedit.h>
    #include "resource.h"
    
    IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 227, 68
    STYLE  DS_MODALFRAME | WS_CAPTION | WS_POPUP | WS_SYSMENU
    CAPTION "Dialog"
    FONT 8, "Ms Shell Dlg 2"
    {
        DEFPUSHBUTTON "ok", ID_OK,175,5,50,14
        PUSHBUTTON "Cancel",ID_CANCEL,120,5,50,14
        LISTBOX ID_LIST, 10,5,105,60, NOT LBS_NOTIFY|LBS_NOSEL | WS_VSCROLL | WS_HSCROLL
        EDITTEXT ID_EDIT, 120,25,105,20, ES_AUTOHSCROLL
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E perchè lo invii al controllo Edit se devi aggiungere il dato alla Listbox?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    95
    Originariamente inviato da oregon
    E perchè lo invii al controllo Edit se devi aggiungere il dato alla Listbox?
    Ok, grazie, ho sostuito l'istruzione incriminata con questo:
    codice:
    SendMessage(GetDlgItem(hwndDlg,ID_LIST),LB_ADDSTRING,0,(LPARAM)text);
    Ringrazio a tutti, adesso è perfetto!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Pensiero
    Ringrazio a tutti, adesso è perfetto!
    Prego ... adesso è logicamente corretto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.