Windows API一日一练(27)SetBkMode函数

转载 2007年09月27日 16:15:00
上面已经介绍输出红色的字符串时,发现背景的黑色也变成白色了,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如按钮的文字颜色是黑色的,而背景是灰色的。这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUETRANSPARENTOPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。
 
函数SetBkMode声明如下:
WINGDIAPI int   WINAPI SetBkMode(__in HDC hdc, __in int mode);
hDC是当前设备的句柄。
mode是要设置的模式。
函数返回值是前一次设置的模式。
 
调用这个函数的例子如下:
#001 //
#002 //界面显示输出.
#003 //
#004 //蔡军生 2007/09/01 QQ:9073204 深圳
#005 //
#006 void CCaiWinMsg::OnDraw(HDC hDC)
#007 {
#008  //
#009  std::wstring strShow(_T("C++窗口类的实现,2007-08-27"));
#010  
#011  //设置输出字符串的颜色.
#012  COLORREF crOld = SetTextColor(hDC,RGB(255,0,0));
#013 
#014  RECT rcText;   
#015  rcText.left = 10;
#016  rcText.top = 10;
#017  rcText.right = 300;
#018  rcText.bottom = 80;
#019 
#020  //创建黑色的画刷,
#021  HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));
#022 
#023  //用黑色的画刷填充四边形的颜色.
#024  FillRect(hDC,&rcText,hbrush);
#025 
#026  //删除画刷.
#027  DeleteObject(hbrush);
#028 
#029 
#030  rcText.left = 10;
#031  rcText.top = 10;
#032  rcText.right = 300;
#033  rcText.bottom = 40;
#034 
#035  //显示字符串在四边形的中间位置.
#036  DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#037         DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#038 
#039 
#040  rcText.left = 10;
#041  rcText.top = 40;
#042  rcText.right = 300;
#043  rcText.bottom = 80;
#044  //设置透明背景
#045  int nOldMode = SetBkMode(hDC,TRANSPARENT);
#046 
#047  //显示字符串在四边形的中间位置.
#048  DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#049         DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#050 
#051  //恢复原来的模式.
#052  SetBkMode(hDC,nOldMode);
#053 
#054  //恢复原来的颜色.
#055  SetTextColor(hDC,crOld);
#056 }
 
本程序运行的效果图如下:
 
第一次显示是使用OPAQUE的方式显示。
第二次显示是使用TRANSPARENT的方式显示。 

相关文章推荐

Windows API一日一练(42)CreateThread函数

分类: Direct3D 2007-09-22 22:53 19870人阅读 评论(9) 收藏 举报 随着时代的发展,计算机技术发展得很快。CPU已经从单核心到多核心的转变,也...

Windows API一日一练(58)FindFirstFile和FindNextFile函数

实现了在wince 下,遍历目录查找文件

Windows API一日一练(47)CreateSemaphore和ReleaseSemaphore函数

Windows API一日一练(47)CreateSemaphore和ReleaseSemaphore函数

Windows API一日一练 FindFirstFile和FindNextFile函数

在开发软件的过程里,经常需要维护目录里的数据。比如在开发银行的信用卡系统里,由于每天创建的LOG非常多,那么一个很大的硬盘,在6个月后,就占用了很多空间。这时就有这样的一个需求,把所有超过6个月的LO...
  • zacklin
  • zacklin
  • 2012年04月09日 10:23
  • 433

Windows API一日一练(一)第一个应用程序 使用应用程序句柄 使用命令行参数 MessageBox函数 RegisterClass和RegisterClassEx函数

要跟计算机进行交互,就需要计算机显示信息给人看到,或者发出声音给人听到,然后人看到或听到相应的信息后,再输入其它信息给计算机,这样就可以让计算机进行数据处理,把结果显示给我们。现在就来编写一个最简单的...

windows API 一日一练1

  • 2014年09月18日 09:33
  • 564KB
  • 下载

windows API 一日一练

  • 2007年11月15日 11:58
  • 2.29MB
  • 下载

Windows API一日一练(7)

今天学习Windows的网络编程技术,网络是计算机通信的核心,而且,现在的网络系统也是相当的复杂,不但要考虑起基本的通信功能,还要实现数据的安全传输,更要抵御各型各样的网络攻击,所以在网络编程技术上,...

windows API 一日一练

  • 2009年07月26日 23:12
  • 1.45MB
  • 下载

windows+API+一日一练

  • 2012年01月28日 15:56
  • 1.66MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Windows API一日一练(27)SetBkMode函数
举报原因:
原因补充:

(最多只允许输入30个字)