2014-11-28 2 views
-3
GetWindowRect(hWnd, &wnd); 
    hdc = BeginPaint(hWnd, &ps); 
    hdcMem = CreateCompatibleDC(hdc); 

    for (int i = 0; i < n; ++i) 
    { 
     HRGN rgn = CreateRoundRectRgn(0, 0, CARD_WIDTH, CARD_HEIGHT, 7, 7); 
     SetWindowRgn(cards[info[i].card], rgn, TRUE); 
     oldBitmap = SelectObject(hdcMem, cards[info[i].card]); 
     GetObject(cards[info[i].card], sizeof(bitmap), &bitmap); 
     BitBlt(hdc, info[i].pos.x, info[i].pos.y, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY); 
     SelectObject(hdcMem, oldBitmap); 
    } 

비트 맵 그림의 모서리 절단에 문제가 있습니다.모서리가 둥근 비트 맵

+0

'SetWindowRgn'은 비트 맵이 아닌 윈도우에 영역을 적용합니다 (단서는 이름에 있음). –

+0

하지만 비트 맵을 잘라야합니다. – user2962433

+3

아마'SelectClipRgn'을 찾으십니까? –

답변

1
GetWindowRect(hWnd, &wnd); 
     hdc = BeginPaint(hWnd, &ps); 
     hdcMem = CreateCompatibleDC(hdc); 
     for (int i = 0; i < n; ++i) 
     { 
      HRGN rgn = CreateRoundRectRgn(info[i].pos.x, info[i].pos.y, info[i].pos.x + CARD_WIDTH, info[i].pos.y + CARD_HEIGHT, 7, 7); 
      SelectClipRgn(hdc, rgn); 
      oldBitmap = SelectObject(hdcMem, cards[info[i].card]); 
      GetObject(cards[info[i].card], sizeof(bitmap), &bitmap); 
      BitBlt(hdc, info[i].pos.x, info[i].pos.y, bitmap.bmWidth, bitmap.bmHeight, hdcMem, 0, 0, SRCCOPY); 
      SelectObject(hdcMem, oldBitmap); 
     } 

Jonathan Potter에게 감사드립니다.

+2

지역을 지우는 것을 잊지 마세요 ('SelectClipRgn'은 복사본을 만듭니다) –

관련 문제