ピクチャーボックスに表示する


 画像はフォーム上に直接表示することも可能ですし、ピクチャーボックスを配置して
その上に表示することも出来ます。ただしこの場合、ピクチャーボックスという限定さ
れた領域に表示されるのではなく、ピクチャーボックスの左隅上が画像表示基点(0,0)
になるというだけです。
 従って、ピクチャーボックスより大きな絵を表示するとピクチャーボックスより大きな
絵を表示するとピクチャーボックス領域から溢れてフォーム上に表示されます。
実用のためにはピクチャーボックスのサイズを調整するコードを記述する必要があります。

【ピクチャーボックスへの表示】
 ピクチャーボックスへの描画は、フォームへの直接描画に比べてデバイスコンテキスト
の確保が異なるのみです。ピクチャーボックスへのポインタを確保し、そこから
デバイスコンテキストを取得します。

 CDC* pDC = m_pict.GetDC();

こうしてpDCを確保すると、後はフォームへの直接描画と同じ方法で出力します。


//---------------------------
public:
	int dispflg;


CGraphpicsapDlg::CGraphpicsapDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CGraphpicsapDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGraphpicsapDlg)
		// メモ: この位置に ClassWizard によってメンバの初期化が追加されます。
	//}}AFX_DATA_INIT
	// メモ: LoadIcon は Win32 の DestroyIcon のサブシーケンスを要求しません。
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	//------------------------------------
	//初期化

	dispflg = 0;
}


void CGraphpicsapDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 描画用のデバイス コンテキスト

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// クライアントの矩形領域内の中央
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// アイコンを描画します。
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
        //----------------------------------
		if(dispflg){
			CDC* pDC = m_pict.GetDC();                      //デバイスコンテキストを取得
			CDC myDC;                                       //ビットマップ表示用デバイスコンテキスト
			CBitmap myBMP;                                  //ビットマップ処理用オブジェクト
			myBMP.LoadBitmap(IDB_BITMAP_SAMPLE);            //画像読み込み
			myDC.CreateCompatibleDC(pDC);                   //myDCをpDCと互換性のあるものにする
			CBitmap* oldBMP = myDC.SelectObject(&myBMP);    //myBMPを選択
			pDC->BitBlt(0,0,240,320,&myDC,0,0,SRCCOPY);     //ビットマップを転送
			myDC.SelectObject(oldBMP);                      //元のビットマップに戻す
		}
	}
}


void CGraphpicsapDlg::OnButton1() 
{
	// TODO: この位置にコントロール通知ハンドラ用のコードを追加してください
	
	//---------------------------------
	dispflg = 1;        //描画表示
	Invalidate();       //再描画

}