永发信息网

DrawText不显示

答案:2  悬赏:60  手机版
解决时间 2021-02-25 08:07
  • 提问者网友:却不属于对方
  • 2021-02-24 21:12
以下是常见的win32 HelloWorld代码:
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rt);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
以上代码放到WM_CREATE中就不显示,但是放到WM_PAINT中就会显示szHello中的字符串,求解
最佳答案
  • 五星知识达人网友:北城痞子
  • 2021-02-24 22:43
常见的win32 hello world里,下面创建窗口的语句顺序是

createwindow
showwindow
updatewindow
wm_create在createwindow的时候执行
此时窗口还没出来
然后wm_paint是在updatewindow的时候执行。

另外,windows并不是你在窗口上画完以后它就一直能显示的。windows并不保存你在窗口上显示了什么,也就是说如果你窗口上的图被其他什么窗口遮住了,此时把遮住你上面的图的窗口移开,windows无法显示被遮住过的部分的内容,这部分是需要你重新绘制的。

有这种需要你重绘的需求的时候,就会有wm_paint过来
所以你放在wm_create里绘制文字是不正确的
全部回答
  • 1楼网友:几近狂妄
  • 2021-02-24 23:17
视窗程序是 无休止的 消息循环处理 程序,直到关闭窗口。 case WM_CREATE: 是 “当窗体建立”时 执行一次。 在这里写东西画图,理论上能在窗体刚建立时 显示一次,然而,一旦窗体发生任何变化和更新,它不会被重画(重新画)。因为 消息循环处理,不可能再进入这个 case. case WM_PAINT: 消息循环处理, 一旦窗体发生任何变化,例如,覆盖,移动,更新,就会被重画。所以绘图,写字都应 放在 WM_PAINT 里。 MFC 程序,绘图写字 放在 OnDraw() 或 OnPaint() 里。 记住 这点就可以了。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯