【原创】填充窗口背景去多余边缘线

本文介绍了一种在更换手机屏幕显示字符串时清除旧字符串残留的方法。通过使用PS_NULL样式的画笔和填充背景色的方式解决了字符串替换过程中留下的黑色边框线问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       特别郁闷,今天打算实现一下单击手机屏幕,更换字符串的功能。其实很简单,只需要覆盖原来字符串打印的位置就行,但是直接打过去原来的位置,系统并不会用原来的背景色刷掉那位置空间再把新的字符串打印过去。没办法,只能通过人工使用背景色刷掉旧的字符串。但是问题又出现,刷背景后,会留下一个黑色的边框线。无奈,这应该是画笔所作,把画笔选为PS_NULL样式,选入dc中,所有问题解决。

       附上源码:

 1 void BtnDownTextDraw(HDC hdc)
 2 {
 3     //创建字体
 4     HFONT hFont, hOldFont;
 5     LOGFONT logfont;
 6     memset(&logfont,0,sizeof(logfont));
 7     logfont.lfWeight=FW_BOLD;
 8     logfont.lfWidth=7;
 9     logfont.lfQuality=CLEARTYPE_QUALITY;
10     hFont=CreateFontIndirect(&logfont);
11 
12     //创建与目标设备dc兼容的内存dc
13     HDC hMemoryDC=CreateCompatibleDC(hdc);
14     //创建设备dc的兼容画布
15     HBITMAP hMemoryBitmap=CreateCompatibleBitmap(hdc,FONT_WIDTH,FONT_HIGHT);
16     //把画布选入内存dc中
17     HBITMAP hOldMemoryBitymap=(HBITMAP)SelectObject(hMemoryDC,hMemoryBitmap);
18 
19     //画笔
20     HPEN hOldPen, hPen=CreatePen(PS_NULL,0,RGB(21,15,20));
21     hOldPen = (HPEN)SelectObject(hMemoryDC,hPen);
22 
23     HBRUSH hOldBrush, hBrush=CreateSolidBrush(RGB(21,15,20));
24     //填充背景色
25     hOldBrush =(HBRUSH)SelectObject(hMemoryDC,hBrush);
26     Rectangle(hMemoryDC,0,0,FONT_WIDTH,FONT_HIGHT);
27     
28     //打印字符串的位置
29     RECT rtFont={0,0,FONT_WIDTH,FONT_HIGHT};
30     //打印文字
31     hOldFont=(HFONT)SelectObject(hMemoryDC,hFont);
32     SetBkMode(hMemoryDC,TRANSPARENT);
33     SetTextColor(hMemoryDC,RGB(255,255,255));
34     if (bZCalibration)
35     {
36         DrawText(hMemoryDC,_T("*****垂直放置****"),-1,&rtFont,DT_LEFT);
37     }
38     else
39     {
40         DrawText(hMemoryDC,_T("*****水平放置****"),-1,&rtFont,DT_LEFT);
41     }
42 
43     //内存dc拷贝到设备dc中
44     BitBlt(hdc,FONT_X,FONT_Y,FONT_WIDTH,FONT_HIGHT,hMemoryDC,0,0,SRCCOPY);
45 
46     //释放字体资源
47     SelectObject(hdc,hOldFont);
48     DeleteObject(hFont);
49 
50     SelectObject(hdc,hOldPen);
51     DeleteObject(hPen);
52 
53     //释放画刷资源
54     SelectObject(hdc,hOldBrush);
55     DeleteObject(hBrush);
56 
57     //释放资源
58     SelectObject(hMemoryDC,hOldMemoryBitymap);
59     DeleteObject(hMemoryBitmap);
60     DeleteObject(hOldMemoryBitymap);
61     hMemoryBitmap=NULL;
62     hOldMemoryBitymap=NULL;
63     DeleteDC(hMemoryDC);   

64}

转载于:https://www.cnblogs.com/IamEasy_Man/archive/2009/11/13/1602705.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值