VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 751|回复: 4

请问在位图上写字,当设置文字背景为透明,当连续在同一个位置写多次时,文字重叠??

[复制链接]

1

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
发表于 2020-3-8 17:30:02 | 显示全部楼层 |阅读模式
如题~~~
回复

使用道具 举报

0

主题

22

帖子

18.00

积分

新手上路

Rank: 1

积分
18.00
发表于 2020-6-4 09:15:01 | 显示全部楼层
你可以这样,在第二次写文字的时候,用第一次的问题在原来的位置上,进行异或贴图可以还原背景色,然后再写新文字。
回复

使用道具 举报

2

主题

16

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-6-12 17:45:01 | 显示全部楼层
试试:
如果在PAINT消息处理函数外绘制文本,Invalidate(),使它擦除背景;
如果在PAINT消息中绘制文本,使用空格字符填充来覆盖掉之前的文字;
回复

使用道具 举报

1

主题

9

帖子

7.00

积分

新手上路

Rank: 1

积分
7.00
 楼主| 发表于 2020-7-3 20:30:01 | 显示全部楼层
具体的做法是:  
   我在一个窗体上用一个位图做了窗口背景,然后再用一个函数在窗口的背景的某个地方写文字,  
我的函数是:  
wf_writetext(char  *szstr,hbitmap  hbit)  
ulong  dc,memdc,holdbitmap,htextcolor,htemp  
RECT  rt  

dc=GetDC(handle(this))  
memdc=CreateCompatibleDC(dc)  
holdbitmap=SelectObject(memdc,hbit)  
rt.top=40  
rt.left=100  
rt.right=200  
rt.bottom=70  
SetBkMode(memdc,TRANSPARENT)  
DrawText(memdc,as_str,len(as_str),rt,DT_LEFT  +DT_VCENTER)  
BitBlt(dc,rt.left,rt.top,rt.right  -rt.left,rt.bottom  -rt.top,memdc,rt.left,rt.top,SRCCOPY)  

SelectObject(memdc,holdbitmap)  
DeleteDC(memdc)  
ReleaseDC(handle(this),dc)  
当我重复调用  此函数在  rt  处进行写数字时,就会文字重叠,  
我的这样的做法对吗  
解决这个问题谁有例子吗  多谢
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-14 11:45:01 | 显示全部楼层
每次写之前用空刷一次:dc.SelectStockObject(NULL_BRUSH);

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表