windows窗口刷新后怎么字不见了

djdj100 2010-08-17 10:55:04
如题,本来窗口里打印了helloworld,但窗口改变大小后,上面的字不见了。能告诉我如何解决吗?谢谢。
...全文
180 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zotin 2010-08-17
  • 打赏
  • 举报
回复

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
MoveToEx(hdc, 1, 1, NULL);
LineTo(hdc, 100,100);
TextOut(hdc, 100, 100, "helloworld!", strlen("helloworld!"));
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

WndProc是绘图窗口的消息回调函数。
「已注销」 2010-08-17
  • 打赏
  • 举报
回复
一定要在响应WM_PAINT消息时画
vanchristin 2010-08-17
  • 打赏
  • 举报
回复
你打印的代码是在哪里写的?
写在窗口刷新的函数里才会一直显示吧
djdj100 2010-08-17
  • 打赏
  • 举报
回复
怎么刷?我用的是SDK。 不是MFC。
Line(1,1,100,100);
TextOut("helloworld!");

该怎么刷能否给我代码看看。
谢谢。
xueliang10 2010-08-17
  • 打赏
  • 举报
回复
OnPaint里面有没有刷?
djdj100 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 jim_king_2000 的回复:]
自动变量一旦结束了生命周期,所占的内存都会被销毁的。


对我有用 [0] 丢个板砖 [0] 引用 举报 管理 TOP
点那个“管理”。
[/Quote]
大哥是否可以留个QQ联系。
Jim_King_2000 2010-08-17
  • 打赏
  • 举报
回复
自动变量一旦结束了生命周期,所占的内存都会被销毁的。


对我有用 [0] 丢个板砖 [0] 引用 举报 管理 TOP
点那个“管理”。
djdj100 2010-08-17
  • 打赏
  • 举报
回复
给分了谢谢楼上各位大哥。特别是Jim_King_2000大哥。疯狂谢谢你。
djdj100 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jim_king_2000 的回复:]
因为x和y是局部变量。它的生命周期就在WndProc函数内。当窗口创建的时候,系统会调用WndProc,这时x和y被赋值,然后WndProc结束,x和y已被释放。接着要画图的时候,系统又会调用WndProc,这是x和y并没有被赋值,所使用的就是未初始化的变量。
[/Quote]
每次调用还释放...。谢谢大哥。再问个问题怎么给分。不知道怎么给啊。
Jim_King_2000 2010-08-17
  • 打赏
  • 举报
回复
因为x和y是局部变量。它的生命周期就在WndProc函数内。当窗口创建的时候,系统会调用WndProc,这时x和y被赋值,然后WndProc结束,x和y已被释放。接着要画图的时候,系统又会调用WndProc,这是x和y并没有被赋值,所使用的就是未初始化的变量。
djdj100 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jim_king_2000 的回复:]
引用 8 楼 djdj100 的回复:
UpdateWindow()是更新窗口吗?
那么是不是所有画图都应该在WM_PAINT消息里画?我看好多例子都是在各自的消息里画的。

基本上是,只有一些临时性的绘制例外。
[/Quote]
哦。谢谢大哥。我还有个问题。

int x, y;
我在WM_CREATE:消息中初始化x=100,y=100结果
TextOut(...,x,y,...);
发现没有打印出该文字。但把x,y改成static x,y后就打印出来了。这是怎么回事。int x, y是全局变量为什么会这样?
Jim_King_2000 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 djdj100 的回复:]
UpdateWindow()是更新窗口吗?
那么是不是所有画图都应该在WM_PAINT消息里画?我看好多例子都是在各自的消息里画的。
[/Quote]
基本上是,只有一些临时性的绘制例外。
djdj100 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jim_king_2000 的回复:]
引用 6 楼 djdj100 的回复:

那么比如我在鼠标移动中,打印鼠标的坐标。该怎么写在WM_PAINT中呢

用SDK实现相对麻烦一点。要用一个全局变量,保存鼠标坐标。伪代码如下:

C/C++ code

POINT s_mousePos; // Global variable.

case WM_PAINT:
TCHAR buf[1024];
sp……
[/Quote]
UpdateWindow()是更新窗口吗?
那么是不是所有画图都应该在WM_PAINT消息里画?我看好多例子都是在各自的消息里画的。
Jim_King_2000 2010-08-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 djdj100 的回复:]

那么比如我在鼠标移动中,打印鼠标的坐标。该怎么写在WM_PAINT中呢
[/Quote]
用SDK实现相对麻烦一点。要用一个全局变量,保存鼠标坐标。伪代码如下:

POINT s_mousePos; // Global variable.

case WM_PAINT:
TCHAR buf[1024];
sprintf(buf, _T("(%d, %d)"), s_mousePos.x, s_mousePos.y);
TextOut(..., buf); // Can't remember, refer to MSDN.

case WM_MOUSEMOVE:
s_mousePos.x = GET_X_LPARAM(lParam);
s_mousePos.y = GET_Y_LPARAM(lParam);
UpdateWindow();
djdj100 2010-08-17
  • 打赏
  • 举报
回复
那么比如我在鼠标移动中,打印鼠标的坐标。该怎么写在WM_PAINT中呢

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧