2010-07-12 5 views
3

현재 GDI를 사용하여 그래픽을 그리지 만 전체 데스크톱/화면을 다시 그릴 수 있어야합니다. 내 그래픽이 화면에 그려지지만 그려진 픽셀을 옮길 때 화면이 다시 그려지지 않기 때문에 선이됩니다 (우물 창은 그렇지 않습니다). 나는, 나는 다음과 같은 방법을 시도했습니다 전체 화면을 다시 그리도록 강제하는 뭔가가 필요 : 그들 중Windows에서 전체 화면을 다시 그려야합니다.

UpdateWindow(GetDesktopWindow()); 

InvalidateRect(GetDesktopWindow(), NULL, TRUE); 

SendMessage(GetDesktopWindow(), WM_PAINT, NULL, NULL); 

없음이 제대로 작동하지, 난 그냥 다시 그리기 위해 전체 화면이 필요합니다.

+0

가 왜 바탕 화면 창 대신에 자신의 창으로 그 모든 일을하고 사용할 수 있나요? 바탕 화면 창은 바탕 화면을 표시하고 그 위에 모든 다른 창이 나타납니다. – Cogwheel

+0

나는 내 자신의 창을 가지고 있지 않으며 그것이 무엇을하는지 알기 때문에. 데스크톱의 핸들을 사용하여 데스크톱 자체에 그리는 중입니다. – Yonathan

+1

전체 화면 투명한 창을 만들지 않는 이유는 무엇입니까? – onof

답변

1

픽셀을 이동할 때 이전 픽셀 상태/색상을 저장하고 복원하는 것이 가장 좋은 방법 일 수 있습니다. 전체 화면을 다시 그려 보면 너무 많은 노력과 자원 낭비가 될 것입니다.

+1

제이와 동의합니다 ... 완전히 새로 고침하면 화면이 미친 듯이 깜박입니다! – bits

+0

모든 픽셀 위치를 전체 시간으로 저장하면 변경 사항이 모든 것을 놀라 울 정도로 느리게 만들 것입니다. 창문이 내가 관심있는 모든 부분에 대해 이전 위치 일 수있는 섹션 만 다시 그리도록 강제하는 방법이 있어야합니다. – Yonathan

2

여전히 그려야하는 전체 데스크톱을 강제하려는 경우

RECT rect; 
::GetClientRect(::GetDesktopWindow(), &rect); 
::RedrawWindow(::GetDesktopWindow(), &rect, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN); 
+0

':: GetDesktopWindow()'대신'RDW_ERASE'와'NULL' 대신에'RDW_ERASENOW'를 사용하지 않았습니다! – sergiol