2009-03-07 5 views
0

Windows Mobile 사용자 지정 SIP를 만들고 사용자가 키보드의 단추를 누르거나 "가리키면"해당 선택된 이미지 (iPhone-esque)가 화면의 :: GetDC (NULL)를 사용하는 DC. 이것은 Win32 C++에서 개발되었습니다.화면의 DC C++로 그리기 후 강제로 화면 다시 그리기

내 문제는 이전에 그려진 키를 지우면서 화면 자체를 다시 칠할 수 없다는 것입니다. 나는 강제로 생각할 수있는 모든 것을 시도했다 : :: RedrawWindow()는 NULL을 사용하는 params의 모든 다른 콤보 또는 HWND와 Get ..Window 함수 중 하나와 모든 플래그 조합 (INVALIDATE | UPDATENOW | ERASENOW | ALLCHILDREN 등). 나는 또한 rect 무효화 시도하고 기본 응용 프로그램의 repaint :: GetActiveWindow 및 :: GetForegroundWindow, :: GetDesktopWindow 등을 사용하여 변형 강제로 시도했다. 나는 아이디어를 본질적으로 실행했습니다 그리고 그것에서 최대 날 지주 내 Windows Mobile 장치에서 사용하고 있습니다. 누구든지 아이디어가 있습니까? 어떤 도움이라도 대단히 감사하겠습니다.

내 딜레마를 설명하는 몇 가지 스크린 샷을 포함 시켰습니다. 사전에

Before Screenshot
After Screenshot

Before http://img13.imageshack.us/img13/9861/cezoom1.pngAfter http://img3.imageshack.us/img3/7481/cezoom2.png

감사합니다!

답변

1

배경 DC로 그리기보다는 임시 창을 만들어 그려 넣는 것이 어떻습니까? 창을 파괴하면 배경이 자동으로 다시 칠 해져야합니다.

Windows Mobile에 대해 잘 모르기 때문에 추측하고 있습니다.하지만 Windows에서 DC로 그려진 마지막 항목을 캐시하고 창을 무효화 할 때마다 다시 칠할 수 있습니다.

+0

흥미로운 접근 방법입니다. 감사드립니다. DC가 캐싱을한다고는 생각하지 않습니다. 버튼이 내 모금 패널 외부로 그려지는 경우에만 문제가 발생하기 때문입니다. 나는 그들이 화면에 그려지는 경우에도 패널 안의 단추로이 문제가 발생하지 않습니다. –

+0

패널 안의 버튼은 파란색으로 선택된 팝업 버튼을 의미합니다. (다른 모든 단추는 비트 맵으로 그려지고 blt은 화면이 아니라 내 모금 패널의 DC로 바뀝니다) –

1

화면 hWnd에서 InvalidateRect를 시도 했습니까?

+0

by screen hWnd 의미하는 것으로 가정합니다 :: GetDesktopWindow(), correct? 그것이 당신이 그렇다면 무엇을 의미합니까? 나는 스크린 wnd에 대한 모든 평소 통화를 시도했습니다. –