ダイアログボックスについて。
ダイアログボックスについての質問です。
開発環境はVisual C++ 2005.netでありSDKを利用しています。
ダイアログボックスにPicture Controlを貼り付け、Combo Boxの内容が変わるたびにそのPicture Controlに画像を表示するようなプログラムを作りたいと考えています。
自分が考える手順としてはまずPicture Controlについてサブクラス化を行い、親のダイアログボックスが表示されると同時にPicture ControlのプロシージャでWM_CREATEメッセージを受け取り描画を行う。
そして親のダイアログボックスに貼り付けたCombo Boxの内容が変更された場合に、Picture ControlのウィンドウハンドルにむけてWM_PAINTメッセージを送信する。
こんな手順で行いたいのですが、少し不安な部分が出てきました。
Combo Boxの内容が変更され、Picture Controlのウィンドウハンドルに向けてWM_PAINTメッセージを送信し、Picture ControlプロシージャではWM_PAINTメッセージがきたとき画像の描画を行う場合、このプロシージャではどの画像を描画してよいか不明です。 そのため何番の画像の表示命令が来たのかを示すために、親のダイアログボックスに貼り付けたCombo Boxが変更された場合、Picture Controlに向けてWM_PAINTメッセージと表示画像番号をパラメータとして送信したいのです。
もちろんグローバル変数を用意すれば簡単なのですが、できるだけ使用しないように記述をしたいのです。そこで考えたのが、
SendMessage(GetDlgItem(hDlgWnd, IDC_PICTURE), WM_PAINT, 0, MAKELPARAM(0, number));
このようにnumberをLPARAMの下位ワードとして送信しようと考えました。
このメッセージ送信を行い、Picture ControlプロシージャでWM_PAINTメッセージが到着したとき、LOWORD(lparam)からnumberを取り出す。
実現したい目的のため、このような方法を考えましたが、エラーなく実行できるでしょうか?
もしあやしい部分が見つかった場合はアドバイスをお願いします。そしてこの方法よりも簡単に処理できる方法があれば教えていただきたいです。
自分としてはサブクラス化は面倒なので、Picture Controlをオーナードローとして扱う方法も考えましたが、うまく動きませんでしたTT
お礼
Lum999 さん、アドバイスありがとうございます。 >特定のダイアログって、DirectXだけですか? 今のところ、dxdiag だけです。 (他のマシンでは、フリーソフトや 音楽のボリュームなどを調整するダイアログボックスが同様の現象になっていたりします) >DirectXのバージョンとフリーソフトが合わない。 >OSとフリーソフトに合わない。 >DirectXとハードウェアが合わない可能性もあります。 この辺りを確認するにはどのようにすれば良いのでしょうか。 > 再起動して直らないようなら、DirectXを再インストールすれば直ります。 今は手元にないのでできないのですが、今度やってみます。