

WM_PAINT 메시지를 통해 복구 가능void CTumorTrackDlg::OnPaint()
{
CPaintDC dc(this);
if (IsIconic())
{
//CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트입니다.
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 아이콘을 그립니다.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
// 여기에서 Picture Contorl 초기 색상 정의할 수 있음
**// 무효화 영역 복구 코드
if (!m_matImage.empty())
{
// InvalidateRect(&rect, TRUE); // 부분 무효화 영역 처리 -> 성능 최적화
DrawImage();
}**
}
}
OnPaint() method에 작성WM_PAINT 메시지가 발생 → 이를 처리하기 위해 MFC 프레임워크가 OnPaint 호출DrawImage() codevoid CTumorTrackDlg::DrawImage() {
// 디바이스 컨텍스트(CDC) 생성
CClientDC dc(GetDlgItem(IDC_STATIC_IMAGE2));
// 컨트롤 크기 가져오기
CRect rect;
GetDlgItem(IDC_STATIC_IMAGE2)->GetClientRect(&rect);
// 이미지 확대/축소 시 픽셀 보간 방식 설정
SetStretchBltMode(dc.GetSafeHdc(), COLORONCOLOR);
// 이미지 데이터 출력
// OpenCv 이미지 데이터를 GDI로 변환하여 Picture Contorl에 출력
StretchDIBits(dc.GetSafeHdc(), 0, 0, rect.Width(), rect.Height(),
0, 0, m_matImage.cols, m_matImage.rows, m_matImage.data, m_pBitmapInfo,
DIB_RGB_COLORS, SRCCOPY);
}IDC_STATIC_IMAGE2