CStaticコントロール-図面

4856 ワード

次の2つの方法をまとめます.
 
必ずダイアログボックスの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
}