Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    85

    [c++]rispondere ai messaggi

    questo è il codice scritto in c++:


    #define STRICT
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>

    BOOL CALLBACK unaDlgProc(HWND hwndDlg,
    UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    if(uMsg==WM_CLOSE) {
    EndDialog(hwndDlg, 0);
    return TRUE;
    } else if(uMsg==WM_COMMAND) {
    WORD wNotifica = HIWORD(wParam);
    WORD wId = LOWORD(wParam);
    if(wNotifica == STN_CLICKED &&
    wId == 101) {
    HWND hStat = (HWND)lParam;
    char buff[6];
    const char* pTesto;
    SendMessage(hStat, WM_GETTEXT,
    6, (LPARAM)buff);
    if(buff[0]=='C')
    pTesto = "Salve";
    else
    pTesto = "Ciao!";
    SendMessage(hStat, WM_SETTEXT,
    0, (LPARAM)pTesto);
    return TRUE;
    }
    }
    return FALSE;
    }


    e questo è il resource:


    #include <windows.h>

    MioDialogo DIALOG DISCARDABLE 0, 0, 186, 92
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "Un Dialogo vuoto"
    FONT 8, "MS Sans Serif"
    BEGIN
    CONTROL "Ciao!", 101, "STATIC",
    SS_CENTER|WS_BORDER, 60, 40, 40, 10
    END

    non mi funziona cosa c'è che non va'
    E SE TUTTO FOSSE SOLO UN RIFLESSO?

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    sono newbie anch'io su questo argomento, però credo manchi il main con la chiamata a DialogBoxParam, prova così:

    codice:
    #define STRICT 
    #define WIN32_LEAN_AND_MEAN 
    #include <windows.h> 
    
    int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
        return DialogBoxParam(0,"MioDialogo", 0,unaDlgProc,0);
    }
    
    BOOL CALLBACK unaDlgProc(HWND hwndDlg, 
    UINT uMsg, WPARAM wParam, LPARAM lParam) 
    { 
    if(uMsg==WM_CLOSE) { 
    EndDialog(hwndDlg, 0); 
    return TRUE; 
    } else if(uMsg==WM_COMMAND) { 
    WORD wNotifica = HIWORD(wParam); 
    WORD wId = LOWORD(wParam); 
    if(wNotifica == STN_CLICKED && 
    wId == 101) { 
    HWND hStat = (HWND)lParam; 
    char buff[6]; 
    const char* pTesto; 
    SendMessage(hStat, WM_GETTEXT, 
    6, (LPARAM)buff); 
    if(buff[0]=='C') 
    pTesto = "Salve"; 
    else 
    pTesto = "Ciao!"; 
    SendMessage(hStat, WM_SETTEXT, 
    0, (LPARAM)pTesto); 
    return TRUE; 
    } 
    } 
    return FALSE; 
    }
    al resources dovrebbe mancare SS_NOTIFY, prova cosi:
    codice:
    #include <windows.h> 
    
    MioDialogo DIALOG DISCARDABLE 0, 0, 186, 92 
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | SS_NOTIFY
    CAPTION "Un Dialogo vuoto" 
    FONT 8, "MS Sans Serif" 
    BEGIN 
    CONTROL "Ciao!", 101, "STATIC", 
    SS_CENTER|WS_BORDER, 60, 40, 40, 10 
    END
    se non funzia posta che problemi da

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614
    SS_NOTIFY non ti serve, piuttosto devi creare la WinMain.
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    85
    seguendo il consiglio di netarrow mi da questi errori:

    unaDlgProc' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)

    xke?




    PS.

    PIXER: "SS_NOTIFY non ti serve, piuttosto devi creare la WinMain."

    non riesco a capire,come creare una WinMain in resource?????!!!!
    E SE TUTTO FOSSE SOLO UN RIFLESSO?

  5. #5
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614
    Originariamente inviato da apatico
    non riesco a capire,come creare una WinMain in resource?????!!!!
    codice:
    int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
        return DialogBoxParam(0,"MioDialogo", 0,unaDlgProc,0);
    }
    Questa.
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    85
    scusa ma non capisco questo è lo stesso codice che nettarow mi ha INSERITO................
    E SE TUTTO FOSSE SOLO UN RIFLESSO?

  7. #7
    Utente di HTML.it L'avatar di pixer
    Registrato dal
    Oct 2000
    Messaggi
    614
    Originariamente inviato da apatico
    scusa ma non capisco questo è lo stesso codice che nettarow mi ha INSERITO................
    In parole povere, aggiungere SS_NOTIFY al resource non ti serve a una cippa.

    Capito ora ?

    Comunque per gestire i messaggi usa uno switch piuttosto che una serie di if, rende il codice più pulito.
    MySQL Worker - The OpenSource Multiplatform MySQL database Administrator (C++ powered)
    .:[ It resumes the development !! ]:.


  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da apatico
    seguendo il consiglio di netarrow mi da questi errori:

    unaDlgProc' undeclared (first use this function)
    (Each undeclared identifier is reported only once for each function it appears in.)
    aggiungi all'inizio la dichiarazione della funzione:

    codice:
    ...
    BOOL CALLBACK unaDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    ...
    aggiungendo quello a me funziona, cmq a titolo d'esempio mostro tutto il codice con il quale a me funziona al 100%:

    Sorgente.cpp:
    codice:
    #define STRICT 
    #define WIN32_LEAN_AND_MEAN 
    #include <windows.h>
    
    BOOL CALLBACK unaDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
        return DialogBoxParam(0,"MioDialogo", 0,unaDlgProc,0);
    }
    
    BOOL CALLBACK unaDlgProc(HWND hwndDlg, 
    UINT uMsg, WPARAM wParam, LPARAM lParam) 
    { 
    if(uMsg==WM_CLOSE) { 
    EndDialog(hwndDlg, 0); 
    return TRUE; 
    } else if(uMsg==WM_COMMAND) { 
    WORD wNotifica = HIWORD(wParam); 
    WORD wId = LOWORD(wParam); 
    if(wNotifica == STN_CLICKED && 
    wId == 101) { 
    HWND hStat = (HWND)lParam; 
    char buff[6]; 
    const char* pTesto; 
    SendMessage(hStat, WM_GETTEXT, 
    6, (LPARAM)buff); 
    if(buff[0]=='C') 
    pTesto = "Salve"; 
    else 
    pTesto = "Ciao!"; 
    SendMessage(hStat, WM_SETTEXT, 
    0, (LPARAM)pTesto); 
    return TRUE; 
    } 
    } 
    return FALSE; 
    }
    resource.rc
    codice:
    #include <windows.h> 
    
    MioDialogo DIALOG DISCARDABLE 0, 0, 186, 92 
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
    CAPTION "Un Dialogo vuoto" 
    FONT 8, "MS Sans Serif" 
    BEGIN 
    CONTROL "Ciao!", 101, "STATIC",
    SS_CENTER|WS_BORDER|SS_NOTIFY, 60, 40, 40, 10
    END
    chiedo scusa, SS_NOTIFY l'ho messo al posto sbagliato prima, e senza metterlo proprio il messaggio non viene gestito.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    85
    codice:
    BOOL CALLBACK unaDlgProc(HWND hwndDlg,
      UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        if(uMsg==WM_CLOSE) {
            EndDialog(hwndDlg, 0);
            return TRUE;
        } else if(uMsg==WM_COMMAND) {
            WORD wNotifica = HIWORD(wParam);
            WORD wId = LOWORD(wParam);
            if(wNotifica == STN_CLICKED &&
                wId == 101) {
                    HWND hStat = (HWND)lParam;
                    char buff[6];
                    const char* pTesto;
                    SendMessage(hStat, WM_GETTEXT,
                        6, (LPARAM)buff);
                    if(buff[0]=='C')
                        pTesto = "Salve";
                    else
                        pTesto = "Ciao!";
                    SendMessage(hStat, WM_SETTEXT,
                        0, (LPARAM)pTesto);
                    return TRUE;
            }
        }
        return FALSE; 
    }



    Originariamente inviato da pixer
    Comunque per gestire i messaggi usa uno switch piuttosto che una serie di if, rende il codice più pulito.
    non ci riesco,non è che qualcuno gentilmente potrebbe convertire il codice come mi ha consigliato pixer
    E SE TUTTO FOSSE SOLO UN RIFLESSO?

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.