私はVisを書いています。スタジオダイアログアプリケーションを使用して、ダイアログから表示する必要がある小型LCDグラフィックスディスプレイを含む機器を遠隔操作することができます。 V.Studioダイアログエディタは、缶詰ソリューションを提供していないようです。私がやったことは、援助よりもむしろWindowsプログラマーであるからです:ダイアログ内のGDIグラフィック
- ダイアログに編集コントロールが追加されました。 LCD用画像の更新が到着すると
- は、エディットコントロール上のピクセルを設定する
- コールGDI関数をCClientDCを作成
値これはbletcherousようだが、画像が到着したときに作業を行います。明らかに、ダイアログが再描画されたときにイメージを再描画しません。このコードは、再描画のために画像データを保存しますが、ダイアログが再描画されたときに画像の再描画機能を呼び出す場所を見つけようとしません。
- ダイアログの最後のステートメントとして再描画呼び出しを追加すると、OnPaint()関数がイメージを作成しますが、OnPaint()が返されたときにすぐに消去されます。
- OnPaint()でカスタムWM_DRAWLCD_MESSAGEを転記したときと同じ結果 - 画像は作成されますが、消去されます。
- フレームワークがEndPaint()を呼び出すように見えないため、そこにイメージを再描画できません。
2つの質問
1.この目的を達成するための一般的な受け入れ方法はありますか?
2.そうでない場合、ダイアログが再描画されたときに、コードはどこで再描画機能を呼び出すことができますか?
@zeromus: 私の "トースター"は、ダイアログアプリケーションに接続されていて、とてもうまく通信しています。問題のLCDイメージは、オペレータが使用するために機械に取り付けられたLCDパネルの内容です。私が遠隔診断をしているときは、画像の下にあるダイアログボタンのコントロールをクリックして、コントロール/ステータス操作を実行し、応答を見ることで、すべてのマシン機能を他の手段で複製するのではなく、簡単になります。対話が一番上にある限り、ものは期待どおりに機能します。ダイアログが一番上に残っていない場合、上に戻すとイメージは復元されません。ビットマップを作成するデータとコードは、CEditコントロールの一部ではありません。したがって、質問は(1)ダイアログアプリケーションでビットマップされたイメージを表示および復元する(静的イメージを表示するのではなく)、ウィザードで承認された方法はありますか?(2)そうでない場合は、ダイアログコードダイアログの再描画中に私のビットマップ描画関数の呼び出しでスプライスするには?ありがとう!
解決策は単純です:あなたのダイアログクラスにメンバーとして 'CBitmap'オブジェクトを追加します。データが到着するたびに、ビットマップデータを更新し、更新をトリガーするために 'InvalidateRect'を呼び出します。あなたの 'OnPaint'ハンドラでは、単純にビットマップをレンダリングします。ダイアログリソースにプレースホルダが必要な場合は、不可視の静的コントロールを使用します。あなたはMFCウィザードの使用にすべて没頭しているので、2つのステップを取り戻すことを検討する必要があります: '1' Windows APIを学び、' 2' MFCプリプロセッサマクロを深く知りましょう。いずれかの手順をスキップすると、MFCはWindowsプログラミングを大幅に難しくします。 – IInspectable