ピクチャーボックスに表示する
画像はフォーム上に直接表示することも可能ですし、ピクチャーボックスを配置して
その上に表示することも出来ます。ただしこの場合、ピクチャーボックスという限定さ
れた領域に表示されるのではなく、ピクチャーボックスの左隅上が画像表示基点(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(); //再描画
}