win32 application的刷新问题

songq 2008-03-04 10:55:23
win32程序中我单击菜单项在窗口中显示一句话,可是窗口一最大化最小化,这句话就没了,这怎么办呢,我又不能把显示的代码现在WM_PAINT消息中,因为单击不同的菜单项,要显示不同的语句或者图形。 请高手指点!谢谢。
...全文
144 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2008-03-04
  • 打赏
  • 举报
回复
还是要在WM_PAINT中处理,不然很多情况会把你直接画上的东西抹掉。可以把每一种情况要画的文字或者图形都记录在类里面,WM_PAINT中根据具体情况来画。
shelliu 2008-03-04
  • 打赏
  • 举报
回复
用一个变量来保存这句话呀
songq 2008-03-04
  • 打赏
  • 举报
回复
我定义全局变量function, 两个菜单项IDM_ITEM1,IDM_ITEM2,代码:
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId)
{
case IDM_ITEM1:
function=1;
UpdateWindow(hWnd);
break;
case IDM_ITEM2:
function=2;
UpdateWindow(hWnd);
break;
...
}

WM_PAINT消息这样处理
PAINTSTRUCT ps;
HDC hdc;
if(function==1)
{
hdc = BeginPaint(hWnd, &ps);
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, "这是菜单项1", strlen("这是菜单项1"), &rt, DT_CENTER);
EndPaint(hWnd, &ps);
}
if(function==2)
{
hdc = BeginPaint(hWnd, &ps);
RECT rt;
GetClientRect(hWnd, &rt);
DrawText(hdc, "这是菜单项2", strlen("这是菜单项2"), &rt, DT_CENTER);
EndPaint(hWnd, &ps);

现在有个问题是:第一次单击哪个菜单项都可以显示对应消息,但是再点击另一个菜单项就没有反应,仍然显示的时第一次显示的信息,只有最大化或者最小化后信息才发生变化, 这是怎么回事
iyranly 2008-03-04
  • 打赏
  • 举报
回复
我觉得这是很好的方法了。好管理也易扩充,你要新添加菜单,只需要多加一项到OnPaint中即可。
songq 2008-03-04
  • 打赏
  • 举报
回复
to hastings :不是都不建议在程序中保持绘图内容吗,而是每次刷新时重绘

to iyranly :按照你的意思我在win32 application中,就要这样了是吧
case WM_PAINT:
switch(保存不同菜单项的变量)
case 0:
....
case 1:
....
break;
还有没有其他更好的方法呢,因为这种方法,实际上需要在单击菜单项和WM_PAINT消息中的某个分支调用同样的代码
iyranly 2008-03-04
  • 打赏
  • 举报
回复
在OnPaint()中,主要
switch(这个整型变量)

case 0:..
break;
.....
hastings 2008-03-04
  • 打赏
  • 举报
回复
这个要慢慢自己研究.
总之,程序要保存绘图的内容,
以便在WM_PAINT时不刷新掉.
iyranly 2008-03-04
  • 打赏
  • 举报
回复
用一个int型变量标识(类型可以自定义),0对应menu1,1对应menu2...这样就可以把当前选择的菜单项保存到Doc中,在WM_PAINT中你读取Doc的这个变量的值,进行相应的处理就可以了。
菜牛 2008-03-04
  • 打赏
  • 举报
回复
你把“这句话”放在一个字符串中,不同菜单修改字符串的内容或者指针;然后刷新;在WM_PAINT中绘制这个字符串。
songq 2008-03-04
  • 打赏
  • 举报
回复
我是用了iyranly 的办法,但是出现我上述的另一个问题:第一次单击哪个菜单项都可以显示对应消息,但是再点击另一个菜单项就没有反应,仍然显示的时第一次显示的信息,只有最大化或者最小化后信息才发生变化, 这是怎么回事
shakaqrj 2008-03-04
  • 打赏
  • 举报
回复
就用iyranly 的办法

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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