戻る
ダイアログにビットマップを表示する
ダイアログの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;
}