为VC++应用程序对话框添加透明位图

我们在进行程序的界面设计时,常常希望将位图的关键部分,也既是图像的前景显示在界面上,而将位图的背景隐藏起来,将位图与界面很自然的融合在一起,本实例介绍了透明位图的制作知识,并将透明位图在一个对话框中显示了出来,界面效果如图一所示:

图一、对话框界面上透明显示位图

一、实现方法

绘制"透明"位图是指绘制某一位图中除指定颜色外的其余部分,我们称这种颜色为"透明色".通过将位图的背景色指定为"透明色",在绘制时,不绘制这部分背景,而仅绘制图像,这样就可以将位图中图像透明地绘制到窗口上。

绘制"透明"位图的关键是创建一个"掩码"位图(mask bitmap),"掩码"位图是一个单色位图,它是位图中图像的一个单色剪影。在Windows编程中,绘图都要用到设备描述表,我们需创建两个内存设备描述表:位图设备描述表(image DC)和"掩码"位图设备描述表(mask DC)。位图设备描述表用来装入位图,而"掩码"位图设备描述表用来装入"掩码"位图。在"掩码"位图设备描述表中制作"掩码"位图的方式是:先创建一个单色的Bitmap,装入mask DC,然后,以"SRCCOPY"的方式将装有位图的位图设备描述表绘制(BitBlt)到mask DC上。这样,mask DC的显示平面中的位图即是"掩码"位图。

一般情况下,绘制"透明"位图的实际操作步骤如下:

1、位图设备描述表以"SRCINVERT"的方式绘制(BitBlt)到显示设备描述表上;

2、"掩码"位图设备描述表以"SRCAND"的方式绘制(BitBlt)到显示设备描述表上;

3、再将位图设备描述表以"SRCINVERT"的方式绘制(BitBlt)到显示设备描述表上。这样除"透明色"外的其余位图部分(图像部分)就被绘制到窗口上了。

上述操作中需要用到的显示函数BitBlt的原型和说明如下:

BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );

函数的参数说明如下:int x表示贴到目的地的左上角X坐标;int y表示/贴到目的地的左上角Y坐标;int nWidth表示贴到目的地的区域宽度;int nHeight表示贴到目的地的区域高度;CDC* pSrcDC表示存储源位图的设备描述表;int xSrc表示源位图的左上角X坐标;int ySrc表示源位图的左上角Y坐标;DWORD dwRop为柵格运算标志,一般我们选择SRCCOPY,直接拷贝源位图到目标。还可以让源位图和目标位图进行XOR,AND,OR等等的操作。大家可以查看MSDN.

时间: 2024-08-30 23:37:33

为VC++应用程序对话框添加透明位图的相关文章

事件 位图-VC/MFC 基于对话框程序,在主界面上左侧有五副位图,单击位图1覆盖原主界面,显示一个另一个界面

问题描述 VC/MFC 基于对话框程序,在主界面上左侧有五副位图,单击位图1覆盖原主界面,显示一个另一个界面 2C VC/MFC 基于对话框程序,在主界面上左侧有五副位图,单击位图1覆盖原主界面,显示自定义1的界面,同理单击位图2显示自定义2的界面,用代码如何实现,请各位指教.

bmp-新手求助,MFC对话框添加位图问题

问题描述 新手求助,MFC对话框添加位图问题 请问各位大侠,为什么文件夹里明明有bmp格式的图片,用MFC加载位图资源时显示没有呢?如图 解决方案 好像我记得有这个BUG,你把对话框右下角类型改成全部文件*.*试试 解决方案二: bmp文件格式是否符合VC的大小限制等. 解决方案三: 这是用MFC添加位图时的截图,找不到bmp资源 解决方案四: 有一写图片格式,是不能加载的.如psd文件.有一次我加载JPG文件都显示不出来,jpg倒可以,这玩意吧在一定程度上得看计算机的心情. 解决方案五: 1.

VIUSUAL 6的对话框应用程序,添加状态栏的问题

问题描述 VIUSUAL 6的对话框应用程序,添加状态栏的问题 HWND hDlg=GetSafeHwnd(); HWND hStatusWindow=CreateStatusWindow(WS_CHILD|WS_VISIBLE|WS_BORDER, TEXT("就绪"),//显示在状态栏上的信息 hDlg, //父窗口句柄 IDS_STATUS); //预定义的资源ID,相当于状态栏的ID号:GetDlgItem(IDS_STATUS) int pint[4]={100,200,35

MFC程序如何实现给对话框添加背景图片

1.插入一个Bitmap的资源图片,假设资源名称为:IDC_BITMAP1 2.在CXXXDialog::OnPaint()中实现: void CMyDialogDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cx

vc++在MFC对话框上用程序生成控件(比如Text和Edit控件),求如何实现?

问题描述 vc++在MFC对话框上用程序生成控件(比如Text和Edit控件),求如何实现? vc++我想在MFC对话框上用程序生成控件(比如Text和Edit控件),求如何实现?(不是用工具条拖动控件到对话框上) 1.用程序生成控件2.控件在对话框上准确定位 求大神指导下 解决方案 一个 CreateWindow() 就能搞定,例子很多,自己找. 解决方案二: MFC我没有研究过,但我想MFC中应该可以调用Win32API吧,可以看看这几个,虽然不是MFC,但是在MFC里想必是可以用的.htt

vc中改变对话框的背景色

---- 笔者曾在<软件报>2000年第5期中讨论过如何改变控件的颜色,但还有相当一部分的读者来信提问:一个基于对话框的MFC AppWizard应用程序中,如何改变对话框的背景颜色呢?对于这个问题,其实可以由几种不同的方法来实现,具体如下(粗斜体代码为增添的):  ---- 方法一:调用CWinApp类的成员函数SetDialogBkColor来实现.  ---- 其中函数的第一个参数指定了背景颜色,第二个参数指定了文本颜色.下面的例子是将应用程序对话框设置为蓝色背景和红色文本,步骤如下: 

VC应用程序框架

VC应用程序框架提供的强大功能,为我们的开发提供了极大的方便,利用它可以很轻松地生成应用程序的框架.许多常用功能,例如文档的创建,文件的打开,保存等操作的大部分代码都由应用程序框架来完成.这些操作对于开发软件的用户而言是透明的.微软设计Visual C++的初衷是尽量向用户提供尽可能简单的接口,但是,正是因为应用框架的这一透明性,使VC的运行流程显得非常神秘,当涉及这些VC已经提供的功能模块的软件开发时,用户(特别是那些刚刚接触VC的)不知道什么时候该使用什么接口函数,想改变VC的一些默认操作时

代码合并-MFC把对话框添加到单文档中

问题描述 MFC把对话框添加到单文档中 MFC把对话框添加到单文档中,对话框已经在单文档下做好了,但是代码怎么加呢,代码需要加在什么地方呢?求大神帮忙,Vc作业,急需,谢谢.QQ:291119478 解决方案 这个很简单,你有两个办法: 思路1:新建单文档项目,然后最后一步让View从CFormView继承.产生的程序文档视图就是一个对话框界面,在资源中你可以看到这个对话框,把控件放进来,用ClassWizard映射好成员变量和事件处理程序,然后把代码粘贴过来. 思路2:将对话框程序的源代码和对

在网页中调用VC写的对话框

要想在网页中调用VC写的对话框,那就得创建一个OCX了,下面将一步一步教你怎么写OCX: 第一步选择"MFC ActiveX ControlWizard",写入创建工程的名字,然后一路狂按"NEXT",直到"Finish",至此一个简单的MFC型的OCX框架已完成了; 第二步在资源中添加一对话框,并创建一个对话框的新类; 第三步就得为OCX添加方法了,见图:ClassWizard->Add Method,选择OK: 接着给方法添加以下代码: