透明的STATIC文本更改

时间:2012-03-23 04:41:16

标签: c++

我将这个STATIC控件显示在一个以图像为背景的窗口上。当我启动控件时,它会显示一个文本。如果我想更改WM_TIMER消息中的文本,它将显示在初始文本上(它不会被删除)我尝试过UpdateWindow和InvalidateRect但是id不起作用。 这是我的代码

WM_CREATE:
    HWND control = CreateWindowEx(
                                 WS_EX_TRANSPARENT,
                                 L"STATIC",
                                 L"FirstText",
                                 WS_CHILD|WS_VISIBLE|ES_LEFT,
                                 0,
                                 0,
                                 200,
                                 20,
                                 hWnd,
                                 HMENU(LABEL1),
                                 Instance,
                                 NULL
                                 );
break;
case WM_TIMER:
    SetWindowText(GetDlgItem(hWnd, LABEL1), L"SecondText");
    KillTimer(hWnd, MYTIMER);
    // Here I tried UpdateWindow and InvalidateRect but no result
break;

因此,第二个文本是在第一个文本上绘制的。看起来STATIC内容在更改后没有更新。怎么可能出错?谢谢!

1 个答案:

答案 0 :(得分:2)

我在那里硬编码了一些数字进行测试(比如窗口ID) - 但这只是一个向你展示的例子。

case WM_CREATE:
        control = CreateWindowEx(
            WS_EX_TRANSPARENT,
            L"STATIC",
            L"FirstText",
            WS_CHILD|WS_VISIBLE|ES_LEFT,
            0,
            0,
            200,
            20,
            hWnd,
            HMENU(99),
            hInst,
            NULL
            );

    //Create a timer
      SetTimer(hWnd,23, 5000,NULL);  
        break;

    case WM_CTLCOLORSTATIC:

        if ( GetDlgItem(hWnd, 99) == (HWND)lParam)
        {
            SetBkMode( (HDC)wParam, TRANSPARENT);
             return (LRESULT) GetStockObject(HOLLOW_BRUSH);
       }
            break;

    case WM_TIMER:
        {
            SetWindowText(GetDlgItem(hWnd, 99), L"Second Text");
            KillTimer(hWnd, 23);


            RECT rect = {0,0, 200,20};
            InvalidateRect(hWnd, &rect, TRUE);
            UpdateWindow(hWnd);
        }
        break;

    case WM_PAINT:
    {
        hdc = BeginPaint(hWnd, &ps);
        //Load my test bitmap from resources
        HBITMAP hb = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));
        BITMAP bm;
        GetObject(hb, sizeof(BITMAP), &bm);
        HDC memDC= CreateCompatibleDC(hdc);
        SelectObject(memDC,hb); 


        // ========================
        //Put the bitmap on the main window to act as a backdrop
        BitBlt(hdc, 0,0, bm.bmWidth,bm.bmHeight,memDC,0,0, SRCCOPY);
        DeleteDC(memDC);

        EndPaint(hWnd, &ps);
    }
    break;