标题:DrawText的输出问题
只看楼主
李昊逸Lion
Rank: 2
来 自:福州
等 级:论坛游民
威 望:2
帖 子:79
专家分:75
注 册:2017-8-1
结帖率:66.67%
已结贴  问题点数:20 回复次数:7 
DrawText的输出问题
我在窗体中尝试用DrawText输出,一开始可以,但是使用SetTextColor(g_hdc,crTransparent)时也没有发生什么改变,输出还是一样。用了SetBkMode(g_hdc,TRANSPARENT)之后Drawtext就无法输出了。
程序代码:
void Out(int nXOriginDest,int nYOriginDest,HFONT hf,COLORREF crTransparent,const char* wanna_char)
{
    RECT rect;

    SetRect(&rect,nXOriginDest,nYOriginDest,1200,720);

    COLORREF Last_Color = SetTextColor(g_hdc,crTransparent);//这句用不用没有区别
    int Last_Mode = SetBkMode(g_hdc,TRANSPARENT);//这句用完就没有输出

    SelectObject(g_hdc,hf);//字体
    DrawText(g_hdc,wanna_char,-1,&rect,DT_LEFT | DT_WORDBREAK | DT_EXPANDTABS);

    SetBkMode(g_hdc,Last_Mode);
    SetTextColor(g_hdc,Last_Color);

    return;
}

另外,我用的是多字节字符集,之前看大佬在Dev上好好的,搬运到VS2017后就不行了
搜索更多相关主题的帖子: 输出 int 字体 return 字节 
2018-08-30 16:04
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
听不懂,
“//这句用不用没有区别” --- 是这句话根本不起作用,还是起作用了,但因为crTransparent和原本设置的字体颜色一致而显示不出差异?
“//这句用完就没有输出” --- 是这句话根本不起作用,还是起作用了,但因为字体颜色和背景一致你看不出差异?
“搬运到VS2017后就不行了”--- 这个“不行了”是什么,外星人入侵?
2018-08-30 16:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
程序代码:
#include <windows.h>

HDC g_hdc;

void Out(int nXOriginDest,int nYOriginDest/*,HFONT hf*/,COLORREF crTransparent,const char* wanna_char)
{
    RECT rect;

    SetRect(&rect,nXOriginDest,nYOriginDest,1200,720);

    COLORREF Last_Color = SetTextColor(g_hdc,crTransparent);//这句用不用没有区别
    int Last_Mode = SetBkMode(g_hdc,TRANSPARENT);//这句用完就没有输出

    //SelectObject(g_hdc,hf);//字体
    DrawTextA(g_hdc,wanna_char,-1,&rect,DT_LEFT | DT_WORDBREAK | DT_EXPANDTABS);

    SetBkMode(g_hdc,Last_Mode);
    SetTextColor(g_hdc,Last_Color);

    return;
}

int main( void )
{
    g_hdc = GetDC( GetConsoleWindow() );

    Out( 0, 0, RGB(0,255,0), "abc\nabc\nabc\nabc\nabc\nabc" );
}

测试下来 “COLORREF Last_Color = SetTextColor(g_hdc,crTransparent);//这句用不用没有区别” 是有用的
我传给它 RGB(255,0,0) 它就输出红色字体,传给它 RGB(0,255,0) 它就输出绿色字体

“int Last_Mode = SetBkMode(g_hdc,TRANSPARENT);//这句用完就没有输出”也是有用的
没有这一句,那背景就是白色;有这一句,那背景透明。
2018-08-30 16:42
李昊逸Lion
Rank: 2
来 自:福州
等 级:论坛游民
威 望:2
帖 子:79
专家分:75
注 册:2017-8-1
得分:0 
我也不清楚,但是出来的效果就是这个样子

注释掉int Last_Mode = SetBkMode(g_hdc,TRANSPARENT);之后出来的是这样

但是我调用的时候
Out(10,10,hfont,RGB(256,0,256),"你好世界!\nHello world!");
有调整了字色,可还是黑的
2018-08-30 17:41
李昊逸Lion
Rank: 2
来 自:福州
等 级:论坛游民
威 望:2
帖 子:79
专家分:75
注 册:2017-8-1
得分:0 
或者可能是因为颜色的COLORREF Last_Color = SetTextColor(g_hdc,crTransparent);没有起作用,所以透明之后和背景同色看不出来?
2018-08-30 17:43
李昊逸Lion
Rank: 2
来 自:福州
等 级:论坛游民
威 望:2
帖 子:79
专家分:75
注 册:2017-8-1
得分:0 
另外原设置蓝色的背景输出文字后就黑了,也没用调用什么
2018-08-30 17:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
回复 4楼 李昊逸Lion
但是我调用的时候
Out(10,10,hfont,RGB(256,0,256),"你好世界!\nHello world!");
有调整了字色,可还是黑的
你把 256 换成 255 试试。
RGB(256,0,256) 不就是 RGB(0,0,0)嘛,哈哈

2018-08-31 08:32
李昊逸Lion
Rank: 2
来 自:福州
等 级:论坛游民
威 望:2
帖 子:79
专家分:75
注 册:2017-8-1
得分:0 
谢谢大佬,可以了
2018-08-31 09:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489530-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.413670 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved