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

来源:百度知道 编辑:UC知道 时间:2024/05/30 08:39:23
我是在OnInitDialog函数中调用如下代码:
CDC *pDc = GetDC();
pDC->TextOut(10, 20, "adasdasdasdasd");
ReleaseDC(pDc);
这样在对话框中什么都看不到.但是如果把着些代码移到OnPaint()中,字符串就能正常显示.请问用TextOut输出文字只能在OnPaint()才会有效么?
也就是说,只要一刷新,这些文字就没了?那有没有什么办法可以避免啊?我试过一些办法还是不成功,如在OnShowWindow()中或者自己添加了一个按纽,然后在按纽的处理函数OnButton()中执行以上代码,还是显示不出来....郁闷啊.

声明一个成员,在OnPaint中始终写这个成员变量,在需要改变的时候,修改这个成员变量然后通知刷新就可以了。代码如下:

在OnPaint中写:

dc.TextOut(..., m_csText );

在类中定义成员 CString m_csText;

在需要改变的位置修改:

void CTestDlg::OnBtn1()
{

m_csText = "Modify";
Invalidate();
}

这样就可以了 :)

一般吧所有的显示相关操作都放在onpaint里面

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

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

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

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

祝你好运!

OnInitDialog
这个时候对话框还没有出现

然后刷新,原来写的文字就没有了

OnInitDialog 这个时候对话框还没有出现 窗口从无到有都要发生重画 所以在OnPaint()这个响应窗口重画的函数中当然可以看到文字,
你还可以添加一个按钮,然后给这个按钮添加消息响应OnButton()
CClientDC dc(this);
dc.TextOut(10,10,"aaaa");
当你点击按钮的时候就可以看到文字了。

你所看到的窗口在特定时候是会发生重绘的,之后OnPaint()函数会被调用,将窗口重新绘制,TextOut()或者其他函数绘制的问题或者图形将被搽除,但如果这些函数在OnPaint()或者在OnPaint()内所调用的函数,比如OnDraw()内,那么他们会再次调用,重新向窗口写入文本,或者绘制图形。你的感觉就是这些文本或者图形一直都在,其实