1. 程式人生 > >MFC點陣圖顯示

MFC點陣圖顯示

   這是一種簡單的方式,分為四個步驟.

1.建立點陣圖,這裡的點陣圖僅限bmp格式的.

CBitmap bitmap;
bitmap.LoadBitmapA(IDB_BITMAP1);

匯入點陣圖資源

2.建立相容DC,

       CDC dcCompatible;
	dcCompatible.CreateCompatibleDC(pDC);

其中CreateCompatibleDC(pDC)函式將建立一個記憶體裝置上下文與引數pDc所指定的DC相相容,可以先用其相容的記憶體裝置上下文在記憶體中準備這些影象,然後再利用相關函式把這些資料複製到指定的實際DC中.

3.將點陣圖選入相容DC中.   

dcCompatible.SelectObject(&bitmap);

4.將相容DC中的點陣圖貼到當前DC中.

pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
pDC->StretchBlt(0,0,rect.Width(),rect.Heigt(),&dcCompatible,0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);

這裡有兩個函式可供使用,BitBlt意味著在複製時按照1:1的比例進行,而StretchBlt則可以實現點陣圖的拉伸或收縮.

相容DC原始只有1個畫素大小,它的大小由選入的點陣圖大小所決定,可以利用CBitmap類的GetBitmap函式來得到,以實現拉伸或收縮.

通過此方法可以快速得在應用程式中新增背景圖片,可以在WM_ERASEBKGND訊息或者WM_PAINT或者OnDraw虛擬函式裡面實現.

那麼在靜態文字中中新增背景圖片呢,其方法也是類似的。

          CStatic *pStatic=(CStatic*)GetDlgItem(IDC_Num1);
	
	HBITMAP hbitmap=::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP2));
	//LONG result = SetWindowLong(pStatic->GetSafeHwnd(),GWL_STYLE,style);
		//設定靜態控制元件的樣式,使其可以使用點陣圖,並試位標顯示使居中  
		pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);  
	//設定靜態控制元件顯示點陣圖  
		pStatic->SetBitmap(hbitmap);