2012-03-23 3 views
1

이미지를 배경으로 사용하는 창 위에이 고정 컨트롤이 표시됩니다. 컨트롤을 시작하면 텍스트가 표시됩니다. 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 콘텐츠가 변경된 후에 업데이트되지 않는 것 같습니다. 무엇이 잘못 될 수 있습니까? 감사!

답변

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

고마워요, 지금 작동합니다. –

관련 문제