戻る

ダイアログにビットマップを表示する

ダイアログのDCを取得する。
メモリDCを作成する。
ビットマップ(DIB)オブジェクトをメモリDCで選択する。
BitBlt関数でメモリDCをダイアログのDCに描画する。

サンプルコード

準備処理
	HDC m_DlgDC;
	HDC m_MemDC;
	HBITMAP m_Bitmap;
	HGDIOBJ m_OldObject;


	// ダイアログのDCを取得する。
	m_DlgDC = this->GetDC()->GetSafeHdc();

	// メモリDCを生成する。
	m_MemDC = CreateCompatibleDC(m_DlgDC);

	// ビットマップオブジェクト(DIB)を生成する。
	// 生成の仕方は後述。

	// メモリDCでビットマップオブジェクトを選択する。
	m_OldObject = SelectObject(m_MemDC, m_Bitmap);
描画処理
void CSampleDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 描画のデバイス コンテキスト

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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();

		// 座標、サイズを指定してダイアログに描画する。
		BitBlt(m_DlgDC, 0, 0, 640, 480, m_MemDC, 0, 0, SRCCOPY);
	}
}
後処理
	SelectObject(m_MemDC, m_OldObject);]
	DeleteObject(m_OldObject);
	DeleteObject(m_Bitmap);
	DeleteDC(m_MemDC);
	DeleteDC(m_DlgDC);
ビットマップオブジェクト(DIB)の生成
	BYTE *m_BmpBuff;
	BITMAPINFO BmpInfo;

	memset(&BmpInfo, 0, sizeof(BmpInfo));
	BmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	BmpInfo.bmiHeader.biWidth = 640;
	BmpInfo.bmiHeader.biHeight = 480;
	BmpInfo.bmiHeader.biPlanes = 1;
	BmpInfo.bmiHeader.biBitCount = 24;
	BmpInfo.bmiHeader.biCompression = BI_RGB;
	BmpInfo.bmiHeader.biSizeImage = 640 * 480 * 3;

	m_Bitmap = CreateDIBSection(
		NULL,
		&BmpInfo,
		DIB_RGB_COLORS,
		(void**)&m_BmpBuff,
		NULL,
		0);
	if (m_Bitmap == NULL)
	{
		return FALSE;
	}
ビットマップオブジェクト(DIB)の生成。bmpファイルから読み込む。
	m_Bitmap = (HBITMAP)LoadImage(NULL, TEXT("sample.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
	if (m_Bitmap == NULL)
	{
		return FALSE;
	}
inserted by FC2 system