CISBitmap派生的VC++位圖透明類實例
本文所述為一個由CISBitmap派生的VC++位圖透明類,可以方便實現(xiàn)BMP圖像的透明處理,主要包含兩個文件,使用時主需要將其引入到你的C++工程中即可,具體的類代碼如下:
CISBitmap.cpp文件代碼如下:
#include <stdafx.h>
#include "CISBitmap.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
CCISBitmap::CCISBitmap()
{
m_crBlack = 0;
m_crWhite = RGB(255,255,255);
}
CCISBitmap::~CCISBitmap()
{
}
int CCISBitmap::Width()
{
BITMAP bm;
GetBitmap(&bm);
return bm.bmWidth;
}
int CCISBitmap::Height()
{
BITMAP bm;
GetBitmap(&bm);
return bm.bmHeight;
}
void CCISBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour)
{
COLORREF crOldBack = pDC->SetBkColor(m_crWhite);
COLORREF crOldText = pDC->SetTextColor(m_crBlack);
CDC dcImage, dcTrans;
dcImage.CreateCompatibleDC(pDC);
dcTrans.CreateCompatibleDC(pDC);
CBitmap* pOldBitmapImage = dcImage.SelectObject(this);
CBitmap bitmapTrans;
int nWidth = Width();
int nHeight = Height();
bitmapTrans.CreateBitmap(nWidth, nHeight, 1, 1, NULL);
CBitmap* pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
dcImage.SetBkColor(crColour);
dcTrans.BitBlt(0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY);
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
pDC->BitBlt(x, y, nWidth, nHeight, &dcTrans, 0, 0, SRCAND);
pDC->BitBlt(x, y, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT);
dcImage.SelectObject(pOldBitmapImage);
dcTrans.SelectObject(pOldBitmapTrans);
pDC->SetBkColor(crOldBack);
pDC->SetTextColor(crOldText);
}
CISBitmap.h文件代碼如下:
//請保存為文件名:CISBitmap.h
#if !defined(AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_)
#define AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CCISBitmap : public CBitmap
{
public:
CCISBitmap();
virtual ~CCISBitmap();
int Height();
int Width();
virtual void DrawTransparent(CDC* pDC, int x, int y, COLORREF crColour);
private:
COLORREF m_crBlack;
COLORREF m_crWhite;
};
#endif // !defined(AFX_CISBITMAP_H__08BA6EB3_DB4C_11D1_8A89_0040052E2D91__INCLUDED_)
感興趣的朋友可以將本文所述代碼放到自己的VC++工程文件中測試一下運行效果,相信會對大家的VC++項目開發(fā)起到一定的幫助作用。
上一篇:VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法
欄 目:C語言
下一篇:VC++中HTControl控件類的CHTSlider控制桿控件類簡介
本文地址:http://www.jygsgssxh.com/a1/Cyuyan/3517.html
您可能感興趣的文章
- 01-10深入分析父子線程、進程終止順序不同產(chǎn)生的結(jié)果
- 01-10C++空類詳解
- 01-10C++中基類和派生類之間的轉(zhuǎn)換實例教程
- 01-10C++中關(guān)于委派(Delegates)的實現(xiàn)示例
- 01-10詳解C++中基類與派生類的轉(zhuǎn)換以及虛基類
- 01-10深入解析C++中派生類的構(gòu)造函數(shù)
- 01-10解析C++中多層派生時的構(gòu)造函數(shù)及一些特殊形式
- 01-10解讀C++編程中派生類的構(gòu)成和創(chuàng)建
- 01-10簡單介紹C++編程中派生類的析構(gòu)函數(shù)
- 01-10解析C++中派生的概念以及派生類成員的訪問屬性


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機閱讀
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)


