投稿者 neptune  (社会人) 投稿日時 2009/8/15 07:14:02
UPされているソースを検証してみました。

結果ですが、
hDesktopWnd = GetDesktopWindow()            'デスクトップのハンドルを取得 
デスクトップのハンドルを取得するのではまずいのではないかと思います。
Debug.Print hDesktopWnd
とやると、65556 が返ってきますが、
実際描画されるのは最前面のwindowのようです。
私のWindows XP起動直後の草原の絵のwindowのHWNDは65692でした。SPY++で確認。

従って、SendMessage、ValidateRectでも処理するWindowが違っているから
想定した動作が行われない見たいです。

Private Sub EraseLines(phWnd As Long)
Dim ret As Long
    'hWndはデスクトップウィンドウのHWND 
'    ret = SendMessage(phWnd, WM_PAINT, 0&, 0&) 
    ret = ValidateRect(phWnd, Null)
End Sub


従って、解決策は
1.描画を行うWindowを正しく取得する
2.リージョンを使う
3.自前でWindowを作成しそれに描画する
とかの方法になるような気がします。

1以外は難易度が一気に上がるのでお勧めしません。