Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di mist3r0
    Registrato dal
    Mar 2007
    Messaggi
    103

    [c++ Finestre Bottonie Ecc...]

    ciao ragazzi, mi servirebbe un aiuto, ho scritto questo codice per ottenere la finestra allegata nell'immagine:


    #include <windows.h>
    #include "resource.h"

    const char g_szClassName[] = "myWindowClass";

    // Step 4: La procedura per la Finestra
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_RBUTTONDOWN:
    {

    char szFileName[MAX_PATH];
    HINSTANCE hInstance = GetModuleHandle(NULL);

    GetModuleFileName(hInstance, szFileName, MAX_PATH);
    MessageBox(hwnd, szFileName, "Hai premuto il tasto destro, Questo programma è:",
    MB_OK | MB_ICONINFORMATION);

    }
    break;

    case WM_CREATE:
    {
    HMENU hMenu, hSubMenu;
    HICON hIcon, hIconSm;

    hMenu = CreateMenu();

    hSubMenu = CreatePopupMenu();
    AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "C&arica File");
    AppendMenu(hSubMenu, MF_STRING, ID_FILE_EXIT, "E&sci");

    AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu,
    "&File");


    hSubMenu = CreatePopupMenu();
    AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "C&omprimi File");
    AppendMenu(hSubMenu, MF_STRING, ID_STUFF_GO, "D&ecomprimi File");
    AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu,
    "&Processa");

    SetMenu(hwnd, hMenu);


    }
    break;

    case WM_LBUTTONDOWN:

    break;
    case WM_MBUTTONDOWN:
    break;
    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case ID_FILE_EXIT:
    PostMessage(hwnd, WM_CLOSE, 0, 0);
    break;
    case ID_STUFF_GO:

    break;
    }
    break;

    case WM_CLOSE:
    DestroyWindow(hwnd);
    break;
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
    }


    BOOL CALLBACK AboutDlgProc(HWND hwnd, UINT Message, WPARAM wParam,
    LPARAM lParam)
    {
    switch(Message)
    {
    case WM_INITDIALOG:

    return TRUE;

    case WM_COMMAND:
    switch(LOWORD(wParam))
    {
    case ID_FILE_EXIT:
    {
    int ret = IDCANCEL; //DialogBox(GetModuleHandle(NULL),MAKEINTRESOURCE(ID D_ABOUT), hwnd, AboutDlgProc);
    if(ret == IDOK){
    MessageBox(hwnd, "Dialog terminato con IDOK.", "Avviso",
    MB_OK | MB_ICONINFORMATION);
    }
    else if(ret == IDCANCEL){
    MessageBox(hwnd, "Dialog terminato con IDCANCEL.", "Avviso",
    MB_OK | MB_ICONINFORMATION);
    }
    else if(ret == -1){
    MessageBox(hwnd, "Dialog fallito!", "Errore",
    MB_OK | MB_ICONINFORMATION);
    }
    }
    break;
    // altri comandi menu...
    }
    break;

    default:
    return FALSE;
    }
    return TRUE;
    }



    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
    {
    WNDCLASSEX wc;
    HWND hwnd;
    MSG Msg;

    //Step 1: Registrazione della Window Class
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = 0;
    wc.lpfnWndProc = WndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI _MYICON));
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wc.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
    wc.lpszClassName = g_szClassName;
    wc.hIconSm = (HICON)LoadImage(GetModuleHandle(NULL),MAKEINTRESO URCE(IDI_MYICON),IMAGE_ICON, 16, 16, 0);

    if(!RegisterClassEx(&wc))
    {
    MessageBox(NULL, "Registrazione della Finestra Fallita!", "Errore!",
    MB_ICONEXCLAMATION | MB_OK);
    return 0;
    }

    // Step 2: Creazione della finestra
    hwnd = CreateWindowEx(
    WS_EX_CLIENTEDGE,
    g_szClassName,
    "La mia prima finestra...",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
    NULL, NULL, hInstance, NULL);

    if(hwnd == NULL)
    {
    MessageBox(NULL, "Creazione della Finestra Fallita!", "Errore!",
    MB_ICONEXCLAMATION | MB_OK);
    return 0;
    }

    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);

    // Step 3: Il ciclo dei messaggi
    while(GetMessage(&Msg, NULL, 0, 0) > 0)
    {
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
    return Msg.wParam;
    }


    QUELLO CHE A ME SERVIREBBE E QUESTO:

    VORREI CHE QUANDO CLICCO SUL BOTTONE DEL MENU "Carica File", mi venga visualizzata una finestra per cercare un file nel mio hard disk...

    COME DEVO FARE???

    AIUTATEMI....
    Immagini allegate Immagini allegate
    M|$T3R®

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Questa parte del tuo codice

    // altri comandi menu...

    ti dice niente ...?

  3. #3
    Utente di HTML.it L'avatar di mist3r0
    Registrato dal
    Mar 2007
    Messaggi
    103
    niente niente, puoi anche non considerarla...
    M|$T3R®

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... quello e' per la AboutBox ... (non si capisce nulla ... perche' non indenti il codice e lo presenti con i tag [ CODE ] nel forum ??)

    Il codice dove devi intervenire e' questo

    codice:
    case WM_COMMAND:
       switch(LOWORD(wParam))
       {
          case ID_FILE_EXIT:
             PostMessage(hwnd, WM_CLOSE, 0, 0);
             break;
          case ID_STUFF_GO:
             break;
       }
    ... studialo un po' ...

  5. #5
    Utente di HTML.it L'avatar di mist3r0
    Registrato dal
    Mar 2007
    Messaggi
    103
    LO SO CHE DEVO INTERVENIRE NELLA PARTE

    case ID_FILE_EXIT:
    PostMessage(hwnd, WM_CLOSE, 0, 0);
    break;
    case ID_STUFF_GO:
    //*********************
    // PARTE DOVE INTERVENIRE....
    //***********************
    break;

    ma la chiamata a quale system call devo fare?

    Avevo pensato a "WM_BROWSE", ma non va...

    sai dirmelo tu?
    M|$T3R®

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da mist3r0
    LO SO CHE DEVO INTERVENIRE NELLA PARTE
    Calma ... non e' bello gridare ...

    ma la chiamata a quale system call devo fare?
    La API che cerchi e' la

    GetOpenFileName

    La trovi su MSDN

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da mist3r0
    Avevo pensato a "WM_BROWSE", ma non va...
    WM_BROWSE??? VVoVe:
    Ma non esiste .....

    Semmai definisci un ID specifico per la voce "Carica File" (cosa che nel codice non hai fatto).
    Quindi scrivi una tua funzione (così da non allungare la window procedure) in cui usi la funzione Win32 GetOpenFileName() (vedi documentazione per i dettagli) per aprire una dialog box di selezione del file e successivamente farai quello che devi fare con il file selezionato.

    Chiaramente nella window procedure dovrai mettere un case per il ID che ho detto prima e richiamare la tua funzione.

    @oregon: il tempismo non è il mio forte
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

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.