CDC* pDC=GetDC(); pDC->DrawText 输出不了文字?

xscansou 2009-09-25 01:17:31
CDC* pDC=GetDC();

pDC->SetBkColor(RGB(255,0,255));

pDC->DrawText("时间时",CRect(0,0,160,420),DT_WORDBREAK);

ReleaseDC(pDC);

CDC* pDC=GetDC(); pDC->DrawText 输出不了文字?
...全文
944 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
xscansou 2009-09-25
  • 打赏
  • 举报
回复
InvalidateRect(rcClient,true);
UpdateWindow();
这样就行了
xscansou 2009-09-25
  • 打赏
  • 举报
回复
其它地方没有,特意查了一下,现在我是在另一个funcation中把前一个funcation显示的区别重新刷了一遍黑色就看不到了.没时间了,实际先,以后慢慢来看怎么回事
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 30 楼 hitweijinlong 的回复:]
引用 27 楼 xscansou 的回复:
//得到客户区大小
CRect rcClient;
GetClientRect(rcClient);

InvalidateRect(rcClient);

同样的要闪烁

你这样用InvalidateRect这个和Invalidate有区别吗?
void CMenuLeftView::CreatMenu()
{
CDC *pDC =GetDC();
ShowText(pDC);
}

void CMenuLeftView::ShowText(CDC* pDC)
{
Invalidate();
pDC->DrawText("卡源所属地",CRect(42,280,166,292),DT_WORDBREAK|DT_CENTER);
..............

这样子调用 的,但显示不了文字.......
这样是因为客户区被刷新了,所以你看不到文字
我在怀疑你是不是在别的地方不断刷新?
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 xscansou 的回复:]
//得到客户区大小
CRect rcClient;
GetClientRect(rcClient);

InvalidateRect(rcClient);

同样的要闪烁
[/Quote]
你这样用InvalidateRect这个和InvalidateRect有区别吗?
void CMenuLeftView::CreatMenu()
{
CDC *pDC =GetDC();
ShowText(pDC);
}

void CMenuLeftView::ShowText(CDC* pDC)
{
Invalidate();
pDC->DrawText("卡源所属地",CRect(42,280,166,292),DT_WORDBREAK|DT_CENTER);
..............

这样子调用 的,但显示不了文字.......
这样是因为客户区被刷新了,所以你看不到文字
我在怀疑你是不是在别的地方不断刷新?
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
输出的字不断的闪烁?
不太看不明白?如果只是单击按钮刷新的话不会出现闪烁的
xscansou 2009-09-25
  • 打赏
  • 举报
回复
void CMenuLeftView::CreatMenu()
{
CDC *pDC =GetDC();
ShowText(pDC);
}

void CMenuLeftView::ShowText(CDC* pDC)
{
Invalidate();
pDC->DrawText("卡源所属地",CRect(42,280,166,292),DT_WORDBREAK|DT_CENTER);
..............

这样子调用 的,但显示不了文字.......
xscansou 2009-09-25
  • 打赏
  • 举报
回复
//得到客户区大小
CRect rcClient;
GetClientRect(rcClient);

InvalidateRect(rcClient);

同样的要闪烁
xscansou 2009-09-25
  • 打赏
  • 举报
回复
invalidaterect同样的闪烁
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 xscansou 的回复:]
引用 23 楼 hitweijinlong 的回复:

A内容并没有消失是因为
你没有重绘窗口,重绘窗口就消失了,

用Invalidate();?

void CMenuLeftView::ShowText(CDC* pDC)
{

Invalidate();
//创建输出字符串
//输出透明蓝色字体
pDC->SetBkColor(RGB(255,255,255));
.................

输出的字不断的闪烁?
[/Quote]
试试这个invalidaterect
xscansou 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 hitweijinlong 的回复:]

A内容并没有消失是因为
你没有重绘窗口,重绘窗口就消失了,
[/Quote]
用Invalidate();?

void CMenuLeftView::ShowText(CDC* pDC)
{

Invalidate();
//创建输出字符串
//输出透明蓝色字体
pDC->SetBkColor(RGB(255,255,255));
.................

输出的字不断的闪烁?
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 xscansou 的回复:]
引用 18 楼 hitweijinlong 的回复:
将OnDraw中的CDC * pDC传给输出函数就可以了,我以前也遇到过

void CMenuLeftView::ShowText(CDC* pDC)
{
if(sButton=="A")
{
pDC->DrawText("A",CRect(0,0,160,420),DT_WORDBREAK|DT_CENTER);
}
else
{
pDC->DrawText("B",CRect(0,0,160,420),DT_WORDBREAK|DT_CENTER);
}
}
显示到是实现了,

现在是点B按钮的时候  点A按钮显示的A内容并没有消失
[/Quote]
A内容并没有消失是因为
你没有重绘窗口,重绘窗口就消失了,
WuXinyang 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 xscansou 的回复:]
Invalidate试过了,放在 OnEraseBkgnd里,好像程序就像进入了死循环.
[/Quote]

汗..Invalidate放在OnEraseBkgnd里.
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
喜欢的话在OnDraw中调用显示函数,并将CDC * pDC传给显示函数
xscansou 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 hitweijinlong 的回复:]
将OnDraw中的CDC * pDC传给输出函数就可以了,我以前也遇到过
[/Quote]
void CMenuLeftView::ShowText(CDC* pDC)
{
if(sButton=="A")
{
pDC->DrawText("A",CRect(0,0,160,420),DT_WORDBREAK|DT_CENTER);
}
else
{
pDC->DrawText("B",CRect(0,0,160,420),DT_WORDBREAK|DT_CENTER);
}
}
显示到是实现了,

现在是点B按钮的时候 点A按钮显示的A内容并没有消失
xscansou 2009-09-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 tr0j4n 的回复:]
你现在要干嘛?
[/Quote]
就是要在CView显示文字,但文字不固定,程序操作过程中,因功能不同显示不同的文字,并所有的View都被设置了黑色背景,黑色背景是在OnEraseBkgnd实现的
hitweijinlong 2009-09-25
  • 打赏
  • 举报
回复
将OnDraw中的CDC * pDC传给输出函数就可以了,我以前也遇到过
MoXiaoRab 2009-09-25
  • 打赏
  • 举报
回复
你现在要干嘛?
xscansou 2009-09-25
  • 打赏
  • 举报
回复
Invalidate试过了,放在 OnEraseBkgnd里,好像程序就像进入了死循环.
xscansou 2009-09-25
  • 打赏
  • 举报
回复
现在我在OnEraseBkgnd做了一变量,用以判断每个功能不同显示不同内容.

现在是如果清除先前显示的内容?
xscansou 2009-09-25
  • 打赏
  • 举报
回复
pDC->DrawText 因功能需要,是要时时的在指定位置显示内容(如 时钟)

pDC->DrawText 后都会调用 OnEraseBkgnd?
加载更多回复(13)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧