以下是常见的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中的字符串,求解
DrawText不显示
答案:2 悬赏:60 手机版
解决时间 2021-02-25 08:07
- 提问者网友:却不属于对方
- 2021-02-24 21:12
最佳答案
- 五星知识达人网友:北城痞子
- 2021-02-24 22:43
常见的win32 hello world里,下面创建窗口的语句顺序是
createwindow
showwindow
updatewindow
wm_create在createwindow的时候执行
此时窗口还没出来
然后wm_paint是在updatewindow的时候执行。
另外,windows并不是你在窗口上画完以后它就一直能显示的。windows并不保存你在窗口上显示了什么,也就是说如果你窗口上的图被其他什么窗口遮住了,此时把遮住你上面的图的窗口移开,windows无法显示被遮住过的部分的内容,这部分是需要你重新绘制的。
有这种需要你重绘的需求的时候,就会有wm_paint过来
所以你放在wm_create里绘制文字是不正确的
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() 里。
记住 这点就可以了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯