2010-03-26 38 views
0

我正在制作一个简单的应用程序,它每2秒在屏幕的设备上下文上绘制一个alpha混合图片,我想在绘制操作前刷新屏幕内容(要擦除绘制的图片),如何刷新整个设备的屏幕(Windows Mobile)?

I使用了很多很多的技巧,但不幸的是,屏幕不会正确地刷新,一些地区仍然保持绘制PIC的部分

我从这个问题:(

很沮丧这些源代码我有使用,我正在使用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和回调,很慢,不适合我的情况。

我想刷新整个屏幕

请帮助!

问候

瓦利德

回答

1

你画任何东西之前,让您充分利用关屏组成的你能代替复制屏幕图像;而且你不需要先要求其他任何东西重新绘制。

+0

1。同意。他可能应该画到屏幕外的缓冲区,然后将其传送到屏幕上。 – ctacke 2010-10-07 13:30:10

0
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)

+1

这将如何帮助?在桌面上,当WIN.INI文件更改(并且已被废弃)时,使用此选项。在CE之下,我不确定它是否支持,因为从未有过win.ini文件。 – ctacke 2010-10-07 13:28:15