title bar (schon wieder)



  • hallo liebe api gemeinde,

    auch ich habe mich mal daran versucht die title bar zu überschreiben.
    hier das ergebnis:
    das "tue was in WM_NCPAINT" führt in diesem programm nicht zum gewüschten Erfolg.
    wenn das title fenster verdeckt wurde, kommt die "original title-bar" wieder zum Vorschein.
    ich poste mal den gesamten (kompilierfähigen) code hierein:

    #include <windows.h>

    /* Declare Windows procedure */
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

    /* Make the class name into a global variable */

    int WINAPI
    WinMain (HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpszArgument,
    int nFunsterStil)

    {
    HWND hwnd; /* This is the handle for our window /
    MSG messages; /
    Here messages to the application are saved /
    WNDCLASSEX wincl; /
    Data structure for the windowclass */

    /* The Window structure /
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure; /
    This function is called by windows /
    wincl.style = CS_DBLCLKS; /
    Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer /
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; /
    No menu /
    wincl.cbClsExtra = 0; /
    No extra bytes after the window class /
    wincl.cbWndExtra = 0; /
    structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
    return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
    0, /* Extended possibilites for variation /
    szClassName, /
    Classname /
    "Windows App", /
    Title Text /
    WS_OVERLAPPEDWINDOW, /
    default window /
    CW_USEDEFAULT, /
    Windows decides the position /
    CW_USEDEFAULT, /
    where the window ends up on the screen /
    544, /
    The programs width /
    375, /
    and height in pixels /
    HWND_DESKTOP, /
    The window is a child-window to desktop /
    NULL, /
    No menu /
    hThisInstance, /
    Program Instance handler /
    NULL /
    No Window Creation data */
    );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
    /* Translate virtual-key messages into character messages */
    TranslateMessage(&messages);
    /* Send message to WindowProcedure */
    DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
    }

    /* This function is called by the Windows function DispatchMessage() */

    LRESULT CALLBACK
    WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {HDC hdc;
    PAINTSTRUCT ps;
    HPEN hPen;
    switch (message) /* handle the messages /
    {
    case WM_DESTROY:
    PostQuitMessage (0); /
    send a WM_QUIT to the message queue */
    break;

    case WM_NCPAINT:
    hdc = GetWindowDC (hwnd);
    SelectObject(hdc, GetStockObject(5));
    TextOut(hdc,5,5,"Dummytext123",12);
    hPen = CreatePen(PS_SOLID, 0, RGB(0,255,0));
    SelectObject(hdc, hPen);
    //aufräumen
    DeleteObject(hPen);
    ReleaseDC(hwnd, hdc);
    return (0);
    //break;

    default: /* for messages that we don't deal with */
    return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
    }

    gibt's ne Lösung

    schönen tach(nacht) noch
    ts



  • gut beschrieben dein code... 😉



  • wer auch immer das geschrieben hat, es läuft nicht ... unter win2k hast du immer irgendwelche fetzen anderer fenster in der title-bar, wenn man sie rübergezogen hat.

    ne lösung ?

    erstelle ein fenster ohne title-bar, kopiere wann immer nötig einen hdc mittels double-buffering an die stelle der title-bar und für die kleinen schalter (min, max,close) machste eine mausabfrage - mit subclassing kann man das alles schön in einer klasse verstauen. fertig is ... 😉

    rocknix ///


Anmelden zum Antworten