VC 在CStatic控件上绘图
生活随笔
收集整理的這篇文章主要介紹了
VC 在CStatic控件上绘图
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近用MFC寫一個(gè)程序,想在CStatic上繪制圖片,一開始以為很簡單,直接獲取CStatic控件的DC繪圖就是了,按照這個(gè)思路,編寫函數(shù),調(diào)用執(zhí)行,結(jié)果大失所望,CStatic控件無動(dòng)于衷,根本看不到圖片。無奈,只好百度,谷歌!結(jié)果搜了一大堆,解決方案大多千篇一律,你抄我,我抄你,只是害苦了我們這些求知者!
根據(jù)網(wǎng)上搜到代碼分析,測試,總結(jié)出如下兩種方法:
大前提,一定要在對話框的OnPaint()函數(shù)中調(diào)用
例如在一個(gè)ID為IDC_STATIC_TEST的CStatic控件中繪圖
方法一:使用CStatic的成員函數(shù)SetBitmap();
void fnDrawOnStatic1(){
CStatic * pStatic = (CStatic *)GetDlgItem(IDC_STATIC_TEST);
HBITMAP hBitmap;
hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMP_BK),
IMAGE_BITMAP,0,0, LR_CREATEDIBSECTION); // IDB_BMP_BK是位圖在RC里的ID
//SS_BITMAP 裝載的是位圖,SS_CENTERIMAGE 位圖居中顯示
pStatic->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE); // 修改 CStatic的樣式,這一步很重要
pStatic->SetBitmap(hBitmap);
}
注:如果使用SetBitmap的話,那么設(shè)置CStatic控件的格式時(shí)要注意,不能將其文字設(shè)置為居中在(即Align Text屬性),不然顯示不出圖片
方法二:使用DC繪圖
void fnDrawStatic2(){
CStatic * pStatic = (CStatic *)GetDlgItem(IDC_STATIC_TEST);
HBITMAP hBitmap;
hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BMP_BK),IMAGE_BITMAP,0,0,
LR_CREATEDIBSECTION); // IDB_BMP_BK是位圖在RC里的ID
pStatic->ModifyStyle(0, BS_OWNERDRAW); // 修改CStatic樣式,改成自繪制,這一步很重要
CRect rc;
pStatic->GetClientRect(&rc);
BITMAP bm; // 位圖結(jié)構(gòu)體,用于接受位圖的信息
HDC hdcImage = CreateCompatibleDC(NULL); // 創(chuàng)建兼容DC
SelectObject(hdcImage, hBitmap); // 將加載進(jìn)來的位圖句柄選入兼容DC
GetObject(hBitmap, sizeof(bm), &bm); // 將位圖信息填入BITMAP結(jié)構(gòu)體
StretchBlt(pStatic->GetDC()->GetSafeHdc(),rc.left,rc.top,rc.Width(),rc.Height(),hdcImage,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY); // 拷貝位圖到CStatic DeleteObject(hBitmap); DeleteDC(hdcImage);}
轉(zhuǎn)載于:https://www.cnblogs.com/CPFlying/archive/2011/05/19/2050769.html
總結(jié)
以上是生活随笔為你收集整理的VC 在CStatic控件上绘图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: v4l2 FIELD 的理解
- 下一篇: C++Primer 第一章 快速入门 学