2011-05-10 9 views
0

StrechDIBits를 사용하여 레이블의 HDC에 원시 비트 맵 이미지를 그립니다.C++/CLI에서 전체 화면으로 돌아간 후 이미지 다시 칠하기

ptr = g->GetHdc(); 
dc = (HDC)ptr.ToInt32(); 
SetStretchBltMode (dc, COLORONCOLOR); 
StretchDIBits (dc, 0, 0, (int) (LabelPictureShow->Width), (int) (LabelPictureShow->Height), 0, 0, width, height, data, bitmapInfo, DIB_RGB_COLORS, SRCCOPY);  
g->ReleaseHdc (ptr); 

이 방법은 전체 비디오 스트림을 그립니다. 또한 전체 화면을 구현하기 위해 전체 화면에 내 양식 및 레이블의 크기를 조정하는 기능도 있습니다. wchich는 비디오를 재생할 때도 훌륭하게 작동합니다.

하지만 동영상을 중지하거나 사진 한 장만 보내고 전체 scren 기능을 호출하면 그것은 이미지를 다시 칠하지 않을 것이고 그것은 나의 문제입니다. 페인트 이벤트를 사용하려고했는데 크기 조정 후 이미지를 다시 페인팅하기 위해 양식과 레이블 모두 이벤트 크기를 조정했지만 아무것도 작동하지 않았습니다. 전체 화면 또는 정상 크기로 돌아 오면 잠시 동안 이미지가 깜박 인 다음 컨트롤의 색상으로 다시 그려지고 사라집니다. StretchDIBits를 사용하여 페인팅 코드를 두어 보았습니다. 어떤 도움이나 조언도 정말 고맙습니다.

편집 : 나를 위해 슬픈 것은 내가의 그림 코드를 삽입 할 때, 예를 들어, 라벨의 이벤트를 클릭 것을, 그것은

답변

0

다른 프로젝트에 사용 된 사용자 지정 그림 물감 컨트롤을 사용하여 해결 ... 잘 작동 . 이 컨트롤은 덮어 쓰기 된 OnPaint 메서드를 사용하여 이미지가 다시 그려집니다. 어떻게 든이 솔루션은 작동하지만 이전의 거의 동일한 솔루션이 아닙니다.

관련 문제