<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
上面已经介绍输出红色的字符串时,发现背景的黑色也变成白色了,这样的输出是破坏背景的。那需要使用什么方法来保持背景不变,而又能输出红色的字符串呢?比如按钮的文字颜色是黑色的,而背景是灰色的。这就需要使用SetBkMode函数来设置DrawText函数的输出方式,显示设备共有两种输出方式:OPAQUE和TRANSPARENT。OPAQUE的方式是用当前背景的画刷的颜色输出显示文字的背景,而TRANSPARENT是使用透明的输出,也就是文字的背景是不改变的。
函数SetBkMode声明如下:
WINGDIAPI int WINAPI SetBkMode(__in HDC hdc, __in int mode);
hDC是当前设备的句柄。
mode是要设置的模式。
函数返回值是前一次设置的模式。
调用这个函数的例子如下:
#001//
#002//界面显示输出.
#003//
#004//蔡军生2007/09/01 QQ:9073204 深圳
#005//
#006void CCaiWinMsg::OnDraw(HDC hDC)
#007{
#008//
#009std::wstring strShow(_T("C++窗口类的实现,2007-08-27"));
#010
#011//设置输出字符串的颜色.
#012COLORREF crOld = SetTextColor(hDC,RGB(255,0,0));
#013
#014RECT rcText;
#015rcText.left = 10;
#016rcText.top = 10;
#017rcText.right = 300;
#018rcText.bottom = 80;
#019
#020//创建黑色的画刷,
#021HBRUSH hbrush = CreateSolidBrush(RGB(0, 0, 0));
#022
#023//用黑色的画刷填充四边形的颜色.
#024FillRect(hDC,&rcText,hbrush);
#025
#026//删除画刷.
#027DeleteObject(hbrush);
#028
#029
#030rcText.left = 10;
#031rcText.top = 10;
#032rcText.right = 300;
#033rcText.bottom = 40;
#034
#035//显示字符串在四边形的中间位置.
#036DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#037 DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#038
#039
#040rcText.left = 10;
#041rcText.top = 40;
#042rcText.right = 300;
#043rcText.bottom = 80;
#044//设置透明背景
#045int nOldMode = SetBkMode(hDC,TRANSPARENT);
#046
#047//显示字符串在四边形的中间位置.
#048DrawText(hDC,strShow.c_str(),(int)strShow.length(),&rcText,
#049 DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_END_ELLIPSIS);
#050
#051//恢复原来的模式.
#052SetBkMode(hDC,nOldMode);
#053
#054//恢复原来的颜色.
#055SetTextColor(hDC,crOld);
#056}
本程序运行的效果图如下:
第一次显示是使用OPAQUE的方式显示。
第二次显示是使用TRANSPARENT的方式显示。
相关推荐
CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 DrawText 将文本描绘到指定的矩形中 DrawTextEx 与DrawText相似,只是加入了更多的功能 ...
3.讲解Win32 API函数:beginpath(),SetBkMode(),endpath(),StrokePath() SetWindowRgn() 有人用“GetGlyphOutline()”去实现,而这里用简单的方法就做到了。 使用“beginpath”可以打开画布的“path bracket”, ...
Win32编程常用函数结构整理 WNDCLASSEX GetStockObject CreateWindow MessageBox CreatePen GetClientRect SelectObject DeleteObject MoveToEx LineTo SetPixel GetPixel CreateSolidBrush CreateHatchBrush ...
MFC的CDC类封装了Windows API 中大部分的画图函数。CDC的常见操作函数包括: Drawing-Attribute Functions:绘图属性操作,如:设置透明模式 Mapping Functions:映射操作 Coordinate Functions:坐标操作 ...
了解和MFC各个类功能相近的API函数。 3、一定要理解MFC中消息映射的作用。 4、训练自己在编写代码时不使用参考书而是使用Help Online。 5、记住一些常用的消息名称和参数的意义。 6、学会看别人的代码。 7、多看书,...
易语言屏幕写字命令源码,屏幕写字命令,刷新清除,屏幕写字,取桌面句柄,写屏,GetDC,ReleaseDC,GetWindowDC,SetTextCharacterExtra,SetTextColor,SetBkMode,FindWindowExA,InvalidateRect,SelectObject,...
第一章 关于本手册........................................................................................................................................ 1 简介 ..........................................
SetBKMode 设置背景模式 GetBKMode 获取背景模式 SetBKColor 设置背景颜色 GetBKColor 获取背景颜色 SetBKPictureMode 设置背景贴图模式 GetBKPictureMode 获取背景贴图模式 SetBKFiltrateColor 设置背景图片...
SetBKMode 设置背景模式 GetBKMode 获取背景模式 SetBKColor 设置背景颜色 GetBKColor 获取背景颜色 SetBKPictureMode 设置背景贴图模式 GetBKPictureMode 获取背景贴图模式 SetBKFiltrateColor 设置背景图片...
#include <windows.h> #include //全局变量 RECT rc; //记录滚屏的矩形区域 int xChar, yChar; //文本输入点坐标 WNDCLASSEX wnd; //窗口类结构变量 char szAppName[] = "键盘...
//用所需的背景色定义画刷 用建立类向导为对话框添加OnCtlColor函数: HBRUSH CListBkChangeDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if(nCtlColor==CTLCOLOR_LISTBOX) //控件类型 可为CTLCOLOR_...
易语言自创Direct界面源码,自创Direct界面,新窗口函数,创建字体,CallWindowProc,SetWindowLong,SendMessage,BeginPaint,CreateSolidBrush,FillRect,EndPaint,DeleteObject,RtlMoveMemory,DrawIconEx,SetBkMode,...
易语言自绘QQ列表框源码,自绘QQ列表框,标签新窗口函数,创建字体,CallWindowProc,SetWindowLong,SendMessage,BeginPaint,CreateSolidBrush,FillRect,EndPaint,DeleteObject,RtlMoveMemory,DrawIconEx,SetBkMode,...
Delphi 用获取路径的方法得到圆形窗体,制作实现一个非矩形窗口,可以说是一个不规则窗口了,圆形的窗口,标题栏、状态栏及窗口关闭等操作按钮均不邮了。圆形窗口的基本实现思路是根据路径创建不规则窗体,然后设置...
//函数功能:给定指定原点输出文字 //参数start_x,start_y,text分别为原点坐标x,y和文本的内容 void CDrawDlg::MyDrawText(int start_x,int start_y,CString text,int txtStyle) { CDC* pdc = GetDC(); CFont ...
易语言CSOL游戏准星计算源码,CSOL游戏准星计算,准星到屏幕,开启准心,左移,右移,上移,下移,准心大,准心小,取设备场景_,使用指定属性创建逻辑字体_,选入设备场景_,SetBkMode_,TextOut_,设置前景色_,删除对象_,API_取...
pDC->SetBkMode(TRANSPARENT); DrawTransparentBitmap(hDC, m_hBitmap, 0, 0, RGB(255,255,255)); pDC = GetDlgItem(IDC_PIC)->GetDC(); hDC = pDC->m_hDC; DrawTransparentBitmap(hDC, m_hBitmap, 0, 0, RGB...
我在对话框前面又加了一个窗体,将其设置到Z轴最下面 这样,静态文本是在窗体上面,并如下设置 HBRUSH CTransstaDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC,...
为了创建不同形状窗口的应用程序,象MP3播放器,我设置对话框的背景为 “TRANSPARENT”(透明)(使用SetBkMode)并在WM_CTLCOLORDLG消息处理器中创建一支“空笔”(NULL)来绘制对话框背景。然后我用TransparenBlt...