SetBkColor funzt nich



  • guten morgen allerseits!
    also zu meinem problem:
    ich hab ein fenster das mir anzeigt ob ich im netz bin oder nich, wenn
    ich online bin soll es grün sein wenn nich dann rot.
    mein code sieht bisher so aus:

    #include <windows.h>
    #include <wininet.h>
    
    #define ScreenWidth 1024
    #define ScreenHeight 768
    #define Timer1 1
    #define GREEN RGB(0,255,0)
    #define RED RGB(255,0,0)
    
    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
    
    char szClassName[ ] = "WindowsApp";
    HWND hwnd;
    HINSTANCE hInstance;
    
    int WINAPI
    WinMain (HINSTANCE hThisInstance,
             HINSTANCE hPrevInstance,
             LPSTR lpszArgument,
             int nFunsterStil)
    
    {
        MSG messages;
        WNDCLASSEX wincl;
    
        wincl.hInstance = hThisInstance;
        wincl.lpszClassName = szClassName;
        wincl.lpfnWndProc = WindowProcedure;
        wincl.style = CS_DBLCLKS;
        wincl.cbSize = sizeof (WNDCLASSEX);
    
        wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
        wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
        wincl.lpszMenuName = NULL;
        wincl.cbClsExtra = 0;
        wincl.cbWndExtra = 0;
        wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
    
        if (!RegisterClassEx (&wincl))
            return 0;
    
        hwnd = CreateWindowEx (
               WS_EX_TOPMOST | WS_EX_TOOLWINDOW,
               szClassName,
               NULL,
               WS_POPUPWINDOW,
               ScreenWidth/2-50,
               0,
               100,
               23,
               HWND_DESKTOP,
               NULL,
               hThisInstance,
               NULL);
    
        ShowWindow (hwnd, nFunsterStil);
        UpdateWindow(hwnd);
        while (GetMessage (&messages, NULL, 0, 0))
        {
            TranslateMessage(&messages);
            DispatchMessage(&messages);
        }
        return messages.wParam;
    }
    
    LRESULT CALLBACK
    WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        DWORD* dwflags;
        bool bOnline;
        HDC hdc;
        PAINTSTRUCT ps;
        switch (message)
        {
            case WM_CREATE:
            {
                SetTimer(hwnd, Timer1, 100, NULL);
                return 0;
            }
            case WM_PAINT:
            {
                PAINTSTRUCT ps;
                HDC hdc;
                hdc=BeginPaint(hwnd, &ps);
                if(bOnline)
                {
                    SetBkColor(hdc, GREEN);
                }
                else
                {
                    SetBkColor(hdc, RED);
                }
                EndPaint(hwnd, &ps);
                return 0;
            }
            case WM_TIMER:
            {
                bOnline=InternetGetConnectedState(dwflags, 0);
                return 0;
            }
            case WM_DESTROY:
            {
                KillTimer(hwnd, Timer1);
                PostQuitMessage (0);
                return 0;
            }
            case WM_LBUTTONDBLCLK:
            {
                int iAnswer;
                iAnswer=MessageBox(hwnd, "Do you want to quit?", "Quit?", MB_YESNO);
                if(iAnswer==IDYES)
                {
                    PostQuitMessage(0);
                    return 0;
                }
                return 0;
            }
        }
        return DefWindowProc (hwnd, message, wParam, lParam);
    }
    

    leider wird das fenster nich bunt!
    hat da vielleicht jemand ne idee???



  • afaik ist SetBkColor nur für Text und diverse Pens.
    Probiers doch mal mit FillRect.



  • 1.) bOnline musst du static machen
    2.) Du musst in WM_TIMER InvalidateRect aufrufen, damit dein Fenster überhaupt zum Neuzeichnen veranlasst wird
    3.) SetBkColor zeichnet nichts -> siehe Honk



  • schönen dank!
    so funzt das


Anmelden zum Antworten