主题:显示文字
sunorr
[专家分:60] 发布于 2008-01-24 09:42:00
在学习API的时候,知道显示文字要在WM_PAINT这个消息里调用,但是我看《Windows程序设计》中说,在其他地方也是可以的:
然后我便按照树上的方法在接受到 WM_KEYDOWN消息时这样写,
....
case WM_KEYDOWN:
...
hdc = GetDC(hwnd);
TextOut(....);
ReleaseDC(hwnd, hdc);
break;
...
可是为什么在窗口上没有显示这行文字呢?
回复列表 (共7个回复)
沙发
iaags [专家分:2890] 发布于 2008-01-24 16:33:00
用MFC类CClientDC试试:
CClientDC dc(this);
dc.TextOut(...);
板凳
华山论剑 [专家分:5310] 发布于 2008-01-24 16:59:00
那一定是你的方法不对,照如下代码再试,我已经测试OK:
[code=c]
case WM_KEYDOWN:
hdc = GetDC(hwnd);
TextOut(hdc, 100, 100, TEXT("This is text by WM_KEYDWON"), wcslen(TEXT("This is text by WM_KEYDWON")));
ReleaseDC(hwnd, hdc);
break;
[/code]
3 楼
sunorr [专家分:60] 发布于 2008-01-24 17:40:00
不知道哪出了毛病,我自己重新写一遍就又好了……
4 楼
sunorr [专家分:60] 发布于 2008-01-28 16:07:00
不知道为什么,用这种方法写上去的文字
窗口大小一变,或者最小化后再出来的时候,写上去的文字就没有了呢?
在
case WM_PAINT:里面写文字就不会消失……
5 楼
华山论剑 [专家分:5310] 发布于 2008-01-28 17:12:00
我们看到的屏幕上的各种窗口,其根本原理就是一个个画出来的,,任何的屏幕转换、覆盖等都要重画,只不过在我们使用的应用软件中我们感觉不到。
在SDK程序中,处理重画的消息是WM_PAINT,在这里写的码每次窗口改变后会调用里面的代码重新绘制,在MFC中是OnDraw,而在其它过程中则是一次性的。
6 楼
sunorr [专家分:60] 发布于 2008-01-28 17:56:00
那如果我不想让文字被抹掉,我有什么办法吗?非要必须在WM_PAINT里面画吗?
7 楼
华山论剑 [专家分:5310] 发布于 2008-01-29 11:19:00
能否不在WM_PAINT里重绘,这个我也不知道,就我知道的是不行。
其实你用上面的方法不太好,如果要保留一些固定的文字在窗口上,最好的办法就是用CreateWindow创建一个static窗口,一劳永逸,static的目的就是为这个的,在非SDK的Visual程序里,窗口中加一个static控件就行了。
我来回复