Как обновить экран всего устройства (Windows Mobile)? - PullRequest
0 голосов
/ 27 марта 2010

Я работаю над простым приложением, которое рисует альфа-смешанное изображение в контексте устройства экрана каждые 2 секунды, я хочу обновить содержимое экрана перед операцией рисования (чтобы стереть нарисованный рисунок),

Я использовал много-много трюков, но, к сожалению, экран не обновляется корректно, в некоторых регионах все еще остаются части нарисованного изображения

Я очень разочарован этой проблемой: (* ​​1005 *

Это исходные коды, которые я использовал, я использую C #

SendMessage(HWND_BROADCAST, WM_SYSCOLORCHANGE, IntPtr.Zero, IntPtr.Zero); // wasted time in the refreshing process is enough to keep this.

UpdateWindow(HWND_BROADCAST);// does not work at all!

InvalidateRect(IntPtr.Zero,IntPtr.Zero,true); // the same goes here.

SendMessage(HWND_BROADCAST, WM_PAINT, IntPtr.Zero, IntPtr.Zero); // pfffff !

SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, new IntPtr(SPI_SETNONCLIENTMETRICS), IntPtr.Zero); // trying to refresh the explorer, no resutl

Я также использовал EnumWindows и перезвонил, очень медленно и не подходит для моего случая.

Я хочу обновить весь экран

Помогите пожалуйста!

Привет

Валида

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Не могли бы вы вместо этого скопировать изображение на экране, прежде чем рисовать что-либо, что позволит вам воспользоваться композицией вне экрана; и вам не нужно будет сначала просить все остальное перерисовать.

0 голосов
/ 07 октября 2010
Declare Function SendMessage Lib "coredll.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
Declare Function GetDesktopWindow Lib "coredll.dll" () As IntPtr
Private Const WM_WININICHANGE As Long = &H1A ' 0x1a = 26 ; &HF2 = 242

SendMessage (GetDesktopWindow (), WM_WININICHANGE, & HF2, 0)

...