回 帖 发 新 帖 刷新版面

主题:显示文字

在学习API的时候,知道显示文字要在WM_PAINT这个消息里调用,但是我看《Windows程序设计》中说,在其他地方也是可以的:

然后我便按照树上的方法在接受到 WM_KEYDOWN消息时这样写,
....
case WM_KEYDOWN:
...
  hdc = GetDC(hwnd);
  TextOut(....);
  ReleaseDC(hwnd, hdc);
  break;
...

可是为什么在窗口上没有显示这行文字呢?


回复列表 (共7个回复)

沙发

用MFC类CClientDC试试:
CClientDC dc(this);
dc.TextOut(...);

板凳


那一定是你的方法不对,照如下代码再试,我已经测试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 楼

不知道哪出了毛病,我自己重新写一遍就又好了……

4 楼

不知道为什么,用这种方法写上去的文字

窗口大小一变,或者最小化后再出来的时候,写上去的文字就没有了呢?



case WM_PAINT:里面写文字就不会消失……

5 楼

我们看到的屏幕上的各种窗口,其根本原理就是一个个画出来的,,任何的屏幕转换、覆盖等都要重画,只不过在我们使用的应用软件中我们感觉不到。

在SDK程序中,处理重画的消息是WM_PAINT,在这里写的码每次窗口改变后会调用里面的代码重新绘制,在MFC中是OnDraw,而在其它过程中则是一次性的。

6 楼

那如果我不想让文字被抹掉,我有什么办法吗?非要必须在WM_PAINT里面画吗?

7 楼

能否不在WM_PAINT里重绘,这个我也不知道,就我知道的是不行。

其实你用上面的方法不太好,如果要保留一些固定的文字在窗口上,最好的办法就是用CreateWindow创建一个static窗口,一劳永逸,static的目的就是为这个的,在非SDK的Visual程序里,窗口中加一个static控件就行了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册