为什么用TextOut无法在对话框中输出文字?

我是在OnInitDialog函数中调用如下代码:CDC*pDc=GetDC();pDC->TextOut(10,20,"adasdasdasdasd");Release... 我是在OnInitDialog函数中调用如下代码:
CDC *pDc = GetDC();
pDC->TextOut(10, 20, "adasdasdasdasd");
ReleaseDC(pDc);
这样在对话框中什么都看不到.但是如果把着些代码移到OnPaint()中,字符串就能正常显示.请问用TextOut输出文字只能在OnPaint()才会有效么?
也就是说,只要一刷新,这些文字就没了?那有没有什么办法可以避免啊?我试过一些办法还是不成功,如在OnShowWindow()中或者自己添加了一个按纽,然后在按纽的处理函数OnButton()中执行以上代码,还是显示不出来....郁闷啊.
展开
 我来答
风轻云度
2008-06-21 · TA获得超过1423个赞
知道大有可为答主
回答量:1835
采纳率:0%
帮助的人:0
展开全部
声明一个成员,在OnPaint中始终写这个成员变量,在需要改变的时候,修改这个成员变量然后通知刷新就可以了。代码如下:

在OnPaint中写:

dc.TextOut(..., m_csText );

在类中定义成员 CString m_csText;

在需要改变的位置修改:

void CTestDlg::OnBtn1()
{

m_csText = "Modify";
Invalidate();
}

这样就可以了 :)
无花寒
2008-06-21 · TA获得超过322个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:152万
展开全部
你所看到的窗口在特定时候是会发生重绘的,之后OnPaint()函数会被调用,将窗口重新绘制,TextOut()或者其他函数绘制的问题或者图形将被搽除,但如果这些函数在OnPaint()或者在OnPaint()内所调用的函数,比如OnDraw()内,那么他们会再次调用,重新向窗口写入文本,或者绘制图形。你的感觉就是这些文本或者图形一直都在,其实他们在窗口重绘后再次绘制的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
中国瑞诚
2008-06-21 · 超过22用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:53.3万
展开全部
OnInitDialog 这个时候对话框还没有出现 窗口从无到有都要发生重画 所以在OnPaint()这个响应窗口重画的函数中当然可以看到文字,
你还可以添加一个按钮,然后给这个按钮添加消息响应OnButton()
CClientDC dc(this);
dc.TextOut(10,10,"aaaa");
当你点击按钮的时候就可以看到文字了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
裔枝博6514
2008-06-21 · TA获得超过161个赞
知道答主
回答量:223
采纳率:0%
帮助的人:250万
展开全部
一般吧所有的显示相关操作都放在onpaint里面

就是说,如何paint一个显示区域由onpaint负责

何时paint以及在什么地方重新绘制图形由其他地方确定

OnInitDialog
的时候对话框还没有出现

当对话框出现后第一件事就是刷新,刷新的时候使用的是onpaint函数,这样,原来写的文字就没有了

祝你好运!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6452b3628
2008-06-21 · TA获得超过1.7万个赞
知道大有可为答主
回答量:4881
采纳率:0%
帮助的人:5334万
展开全部
OnInitDialog
这个时候对话框还没有出现

然后刷新,原来写的文字就没有了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式