Как обновить на весь экран устройства (Windows Mobile)?

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

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

Я очень расстроен этой проблемой :(

Это исходные коды, которые я использовал, я использую 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 и перезвонил, очень медленно и не подходит для моего случая.

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

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

С Уважением

Валид


person Waleed    schedule 26.03.2010    source источник


Ответы (2)


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

person Rowland Shaw    schedule 28.03.2010
comment
+1. Согласованный. Ему, вероятно, следовало бы рисовать в закадровом буфере, а затем копировать его на экран. - person ctacke; 07.10.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)

person Andicp    schedule 07.10.2010
comment
Как это поможет? На рабочем столе вы используете это, когда файл WIN.INI изменяется (и он устарел). Под CE я не уверен, что он вообще поддерживается, поскольку никогда не было файла win.ini. - person ctacke; 07.10.2010