2012-03-23 12 views
1

この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; 

で、2番目のテキストは、最初のものの上に描かれています。 STATICコンテンツは変更後に更新されないようです。何がうまくいかないでしょうか?ありがとう!

答えて

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; 
+0

ありがとうございました –

関連する問題