0

我正在创建一个 Windows Mobile 自定义 SIP,当用户按下或“悬停”在键盘上的一个按钮上时,我使用 ::GetDC(NULL) 将其对应的选定图像(iPhone 式)绘制到屏幕的 DC。它是用 Win32 C++ 开发的。

我的问题是我永远无法让屏幕重新绘制自己,擦除先前绘制的键。我已经尝试了所有我能想到的强制它,::RedrawWindow() 使用 NULL 或任何 Get..Window 函数作为 HWND 的所有不同参数组合,以及所有标志组合 (INVALIDATE | UPDATENOW | ERASENOW | 所有儿童等)。我还尝试过使用 ::GetActiveWindow 和 ::GetForegroundWindow 使 rect 无效并强制重新绘制底层应用程序,使用 ::GetDesktopWindow 的变体等。我基本上已经没有想法了,这是阻止我的最后一件事在我的 Windows Mobile 设备上使用它。有没有人有任何想法?任何帮助将不胜感激。

我已经包含了一些截图来说明我的困境。

截图前 截图

在 http://img13.imageshack.us/img13/9861/cezoom1.png 之前 http://img3.imageshack.us/img3/7481/cezoom2.png

此 先感谢!

4

2 回答 2

1

与其绘制到背景 DC,不如创建一个临时窗口并在其中绘制?当您销毁窗口时,背景应该会自动重新绘制。

我只是在猜测,因为我不了解 Windows Mobile,但可能是 Windows 正在缓存最后一个被绘制到 DC 中的东西,并在每次使窗口无效时重新绘制它。

于 2009-03-07T04:26:17.233 回答
1

您是否在屏幕 hWnd 上尝试过 InvalidateRect?

于 2009-03-07T04:29:14.963 回答