CStaticコントロール-図面
次の2つの方法をまとめます.
必ずダイアログボックスのOnPaint()関数で呼び出します.
例えばIDがIDC_であるSTATIC_TESTのCStaticコントロールでの描画
方法1:CStaticのメンバー関数SetBitmap()を使用する.
注意:SetBitmapを使用している場合は、CStaticコントロールのフォーマットを設定するときは、文字を中央に置く(すなわちAlign Textプロパティ)ことはできません.そうしないと、画像が表示されません.
方法2:DC図面を使用する
必ずダイアログボックスのOnPaint()関数で呼び出します.
例えばIDがIDC_であるSTATIC_TESTのCStaticコントロールでの描画
方法1:CStaticのメンバー関数SetBitmap()を使用する.
void
DrawOnStatic()
{
CStatic
*
pStatic
=
(CStatic
*
)GetDlgItem(IDC_STATIC_TEST);
HBITMAP hBitmap;
hBitmap
=
(HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMP),
IMAGE_BITMAP,
0
,
0
, LR_CREATEDIBSECTION);
//
IDB_BMP RC ID
//
SS_BITMAP ,SS_CENTERIMAGE
pStatic
->
ModifyStyle(
0
,SS_BITMAP
|
SS_CENTERIMAGE);
//
CStatic ,
pStatic
->
SetBitmap(hBitmap);
}
注意:SetBitmapを使用している場合は、CStaticコントロールのフォーマットを設定するときは、文字を中央に置く(すなわちAlign Textプロパティ)ことはできません.そうしないと、画像が表示されません.
方法2:DC図面を使用する
void
DrawOnStatic()
{
CStatic
*
pStatic
=
(CStatic
*
)GetDlgItem(IDC_STATIC_TEST);
HBITMAP hBitmap;
hBitmap
=
(HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMP),IMAGE_BITMAP,
0
,
0
,
LR_CREATEDIBSECTION);
//
IDB_BMP RC ID
pStatic
->
ModifyStyle(
0
, BS_OWNERDRAW);
//
CStatic : ,
CRect rc;
pStatic
->
GetClientRect(
&
rc);
BITMAP bm;
//
HDC hdcImage
=
CreateCompatibleDC(NULL);
//
DC
SelectObject(hdcImage, hBitmap);
//
DC
GetObject(hBitmap,
sizeof
(bm),
&
bm);
//
BITMAP
StretchBlt(pStatic
->
GetDC()
->
GetSafeHdc(),rc.left,rc.top,rc.Width(),rc.Height(),hdcImage,
0
,
0
,bm.bmWidth,bm.bmHeight,SRCCOPY);
//
CStatic
}