WM_PAINT内処理異常に関する調査報告書
2006/03/25 VALGUS


2006年03月23日に見つかりました WM_PAINT 処理内の異常問題について全数チェックと対策を行いました。
その調査報告と対処方法をここにご報告いたします。

なお、今後も問題点が発見され次第、可能な限りの迅速なる告知と修正対応をいたします。
今後も変わらず VALGUS - Orange Knowledge をよろしくお願いいたします。

※ ご報告を頂きましたヴォーガ氏には大変感謝しております。ありがとうございました。


■ 本件の問題点


WM_PAINT で再描画処理を行う場合、唯一、BeginPaint();〜EndPaint();で処理しなければいけません。
BeginPaint() はデバイスコンテキストのクリッピングリージョンを自動設定したり、
WM_ERASEBKGND メッセージをウィンドウに送ったりという様々な再描画に必要な前処理を行います。

ところが私が掲載していた Programming Tips に、
当該処理を行わず GetDC() にてデバイスコンテキストを取得して処理を行った記事がありました。

このような処理を行うと WM_PAINT に必要な前処理が行われないために、
Windows のバージョンによっては致命的な症状を引き起こすことがあります。


■ 対策


まず、情報が入った時点でトップページに問題の告知と該当されると予想された範囲の注意勧告を掲載しました。
そして、本日、サイト掲載された情報の全数チェックを行いました。

全数チェックとしては、「hdc」「getdc」「delete」で全ファイルを検索して、
検索にかかった箇所とその周辺関連箇所全てを目視確認いたしました。
アーカイブファイルは全て掲載ファイルを一旦解凍の後、同様にチェックしました。

調査の結果、問題があったのは異常が報告された [SDK-005] とダウンロードサンプルのみでした。
皆様には大変ご迷惑をおかけいたしましたこと、また、不安にさせてしまいましたことをここにお詫びいたします。

なお、下記に調査の詳細をご報告いたします。
問題が発生していた記事に関しては赤色、何かしら修正点がある場合は青色としました。


■ フリーソフト



■ クラスライブラリ


■ Programming Tips サンプルプログラム



■ Programming Tips サイト内記事情報




 Copyright 2005 VALGUS. All Rights Reserved.