注册 登录
编程论坛 C++教室

DrawText的输出问题

李昊逸Lion 发布于 2018-08-30 16:04, 3193 次点击
我在窗体中尝试用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后就不行了
7 回复
#2
rjsp2018-08-30 16:31
听不懂,
“//这句用不用没有区别” --- 是这句话根本不起作用,还是起作用了,但因为crTransparent和原本设置的字体颜色一致而显示不出差异?
“//这句用完就没有输出” --- 是这句话根本不起作用,还是起作用了,但因为字体颜色和背景一致你看不出差异?
“搬运到VS2017后就不行了”--- 这个“不行了”是什么,外星人入侵?
#3
rjsp2018-08-30 16:42
程序代码:
#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);//这句用完就没有输出”也是有用的
没有这一句,那背景就是白色;有这一句,那背景透明。
#4
李昊逸Lion2018-08-30 17:41
我也不清楚,但是出来的效果就是这个样子
只有本站会员才能查看附件,请 登录

注释掉int Last_Mode = SetBkMode(g_hdc,TRANSPARENT);之后出来的是这样
只有本站会员才能查看附件,请 登录

但是我调用的时候
Out(10,10,hfont,RGB(256,0,256),"你好世界!\nHello world!");
有调整了字色,可还是黑的
#5
李昊逸Lion2018-08-30 17:43
或者可能是因为颜色的COLORREF Last_Color = SetTextColor(g_hdc,crTransparent);没有起作用,所以透明之后和背景同色看不出来?
#6
李昊逸Lion2018-08-30 17:46
另外原设置蓝色的背景输出文字后就黑了,也没用调用什么
#7
rjsp2018-08-31 08:32
回复 4楼 李昊逸Lion
但是我调用的时候
Out(10,10,hfont,RGB(256,0,256),"你好世界!\nHello world!");
有调整了字色,可还是黑的
你把 256 换成 255 试试。
RGB(256,0,256) 不就是 RGB(0,0,0)嘛,哈哈

#8
李昊逸Lion2018-08-31 09:27
谢谢大佬,可以了
1