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.