2009-03-07 15 views
0

私はWindows MobileカスタムSIPを作成しています。ユーザーがキーボードのボタンを押すか、「ホバー」すると、対応する選択されたイメージ(iPhone-esque) :: GetDC(NULL)を使用してDC。 Win32 C++で開発されました。画面のDCC++に描画した後に強制描画する

私の問題は、以前描かれたキーを消去して、画面を再描画することはできません。私はそれを強制的に考えることができるすべてを試しました:: RedrawWindow()は、HWNDとしてNULLまたは任意のGet..Window関数を使用するparamsのすべての異なるコンボで、すべてのコンボフラグ(INVALIDATE | UPDATENOW | ERASENOW | ALLCHILDRENなど)。私はまたrectを無効にし、:: GetActiveWindowと:: 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について知らないので推測していますが、ウィンドウが無効になるたびにDCがDCに描画された最後のものをキャッシュしている可能性があります。

+0

これは興味深いアプローチですが、私はそれに一生感謝します。 DCがキャッシングしているとは思えません。なぜなら、問題はボタンが自分のSIPパネル(上にある)の外に引き出されたときだけであるからです。私は画面に描かれているにもかかわらず、パネル内のボタンでこの問題を持っていません。 –

+0

パネル内のボタンとは、青色の選択されたポップアップボタンを意味します。 (他のすべてのボタンはビットマップに描画され、その後、私のSipパネルのDCはスクリーンではなくbltになります) –

1

あなたは画面hWndでInvalidateRectを試しましたか?

+0

by screen hWnd意味すると思います:: GetDesktopWindow()、正しい?それがあなたが意味するものなら、私はスクリーンwndに対するすべての通常の呼び出しを試みました。 –