ユーザーがチェックボックスをオンにしたときに、MFCダイアログに画像を挿入し、その上にポイントを印刷する必要があります。MFCで画像に点を描くことはできますか?
ありがとう。
ユーザーがチェックボックスをオンにしたときに、MFCダイアログに画像を挿入し、その上にポイントを印刷する必要があります。MFCで画像に点を描くことはできますか?
ありがとう。
ビットマップを表示するために、独自の CStatic 所有者描画ベースのコントロールを作成してみてください。DrawItem 要求を取得したら、元のビットマップを互換性のある DC に読み込みます。次に、変更を DC に描画し、完了したら、DRAWITEMSTRUCT 情報で提供される実際の画面 DC に DC を BitBlt します。
一歩一歩。
CMyPic と呼ばれる CStatic に基づいて新しい MFC コントロールを作成します。
ダイアログにピクチャ コントロールを配置します (コントロールのプレース ホルダーとして)。
ピクチャ コントロールの名前を IDC_STATIC から IDC_MYPIC に変更します。
コントロールのタイプを「Frame」から「Owner Draw」に変更します
コントロールを右クリックし、「変数を追加」します。m_mypic のような名前の制御変数にして、変数の型を CMyPic に変更します。
CMyPic で、DrawItem のオーバーライドを追加します
DrawItem では、次のようなビットマップを描画できます (私の場合、PNG を描画してテキストをオーバーレイしています)。
void CMyPic::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){
CPngImage img;
img.Load( IDB_PNG1 );
CDC dcScreen;
dcScreen.Attach( lpDrawItemStruct->hDC );
CDC dcMem;
dcMem.CreateCompatibleDC( &dcScreen );
CBitmap * pold = (CBitmap*)dcMem.SelectObject( img );
dcMem.DrawText( L"Hi", &lpDrawItemStruct->rcItem, NULL );
dcScreen.BitBlt( 0, 0, lpDrawItemStruct->rcItem.right, lpDrawItemStruct->rcItem.bottom, &dcMem, 0, 0, SRCCOPY );
dcMem.SelectObject( pold );
dcScreen.Detach( );
}
可能ですが、直接行うことは強くお勧めしません。
通常、ダイアログボックスはコントロールのコンテナとしてのみ機能する必要があります。
そのため、おそらく必要なのは、ビットマップを背景として表示できる、ある種の階層化された描画コントロールと、その前にある他のオブジェクト(点、場合によっては線、曲線など)です。MFCでActiveXコントロールを作成して、それを簡単に行うことができます。ATLを使用するのは少し難しいですが、それほど多くはありません。結果は、より小さく、(おそらく)より高速であるという観点から、ほぼ必然的に「より良い」ものになります。