Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258

    [C++] La forma del... form :D

    C'è un modo per modificare la forma della form (scusate il gioco di parole)
    Ad esempio alcuni trainer che si trovano in giro sulla rete hanno una forma tonda... vorrei sapere come si fa... per VB mio cugino aveva una guida che ho letto tempo fa (ma non mi ricordo cosa diceva...). e per C++? Grazie
    Andate su BiteFight

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254

    Re: [C++] La forma del... form :D

    Originariamente inviato da frarugi87
    C'è un modo per modificare la forma della form (scusate il gioco di parole)
    Ad esempio alcuni trainer che si trovano in giro sulla rete hanno una forma tonda... vorrei sapere come si fa... per VB mio cugino aveva una guida che ho letto tempo fa (ma non mi ricordo cosa diceva...). e per C++? Grazie
    Dipende da quale framework stai usando, se direttamente le API Win32, MFC o altro.
    In Windows a livello di Win32 è possibile settare la "region" della finestra con SetWindowRgn(). Ma qui sbuca un'altra questione: se la finestra non è rettangolare, dovresti ridisegnarla tu opportunamente. Quindi si tratta di fare un rendering della finestra in modo più "spinto".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    usando direttamente le API si può?

    comunque... in che senso "ridisegnarla"?
    Andate su BiteFight

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da frarugi87
    usando direttamente le API si può?
    Sì.

    Originariamente inviato da frarugi87
    comunque... in che senso "ridisegnarla"?
    Dipende di che forma vuoi farla. Le finestre di norma sono rettangolari. Se imposti ad esempio una regione rettangolare con bordi arrotondati la finestra ha i bordi "tranciati".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    258
    mettiamo ad esempio che io voglia fare una form circolare. come posso fare?
    Andate su BiteFight

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da frarugi87
    mettiamo ad esempio che io voglia fare una form circolare. come posso fare?
    Crea un progetto di applicazione Win32 "gui" (non console!) e compila questo codice:
    codice:
    #define STRICT
    #include <windows.h>
    
    #define MAIN_WNDCLASS   "MiaClasseFinestra"
    
    LRESULT CALLBACK Main_WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
        switch (uMsg)
        {
            case WM_CREATE:
                return 0;
    
            case WM_DESTROY:
                PostQuitMessage (0);
                return 0;
    
            case WM_CLOSE:
                DestroyWindow (hWnd);
                return 0;
        }
    
        return DefWindowProc (hWnd, uMsg, wParam, lParam);
    }
    
    
    INT APIENTRY WinMain (HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpszCmdLine, INT iCmdShow)
    {
        WNDCLASSEX  wcx;
        HWND        hWnd;
        HRGN        hRgn;
        MSG         msg;
    
        wcx.cbSize        = sizeof (wcx);
        wcx.style         = CS_HREDRAW | CS_VREDRAW;
        wcx.lpfnWndProc   = (WNDPROC) Main_WndProc;
        wcx.cbClsExtra    = 0;
        wcx.cbWndExtra    = 0;
        wcx.hInstance     = hInstance;
        wcx.hIcon         = NULL;
        wcx.hIconSm       = NULL;
        wcx.hCursor       = LoadCursor (NULL, IDC_ARROW);
        wcx.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);
        wcx.lpszMenuName  = NULL;
        wcx.lpszClassName = MAIN_WNDCLASS;
    
        if (!RegisterClassEx (&wcx))
        {
            MessageBox (NULL, "Errore nella registrazione della classe",
                        "ERRORE", MB_OK | MB_ICONEXCLAMATION);
            return 1;
        }
    
        hWnd = CreateWindow (MAIN_WNDCLASS, "Titolo finestra",
                             WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                             CW_USEDEFAULT, 0, 300, 300,
                             NULL, NULL, hInstance, NULL);
    
        if (hWnd == NULL)
        {
            MessageBox (NULL, "Errore nella creazione della finestra",
                        "ERRORE", MB_OK | MB_ICONEXCLAMATION);
            return 1;
        }
    
        hRgn = CreateEllipticRgn (0, 0, 300, 300);
    
        if (hRgn != NULL)
            SetWindowRgn (hWnd, hRgn, FALSE);
    
        ShowWindow (hWnd, SW_SHOWNORMAL);
        UpdateWindow (hWnd);
    
        while (GetMessage (&msg, NULL, 0, 0) > 0)
        {
            TranslateMessage (&msg);
            DispatchMessage (&msg);
        }
    
        if (hRgn != NULL)
            DeleteObject (hRgn);
    
        return 0;
    }
    Crea una finestra con regione di forma circolare. Ho lasciato la barra del titolo, così vedi che succede ..... la barra è tranciata e se ne vede solo un pezzo.

    In questo caso tocca stabilire cosa fare, se togliere la barra (ma in quel caso devi stabilire come muovere la finestra) o altro.
    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.