ON_UPDATE_COMMAND_UI定义的界面更新函数,不能自动生效

benh 2007-04-23 02:39:59
在窗口里面,可以通过点击某些button改变某些值,这些值决定相应的command id是否是enable的。就是说,希望的结果是通过点击客户区,更改toolbar上的菜单显示状态。
但是,很奇怪的,点击后,必须重绘窗口,才能将更改显示出来(比如点击之后,最小化窗口,再打开,就会看到刚才disable的一个button变灰)。这个可能是因为什么原因?
...全文
244 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2008-09-02
  • 打赏
  • 举报
回复
菜单每项都有一个OnUpdate.根据条件调用pCmdUI->Enable(state)就可以了.
void CMainFrame::OnUpdateFileOpen(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
BOOL state=FALSE;
if(!CheckCurrentSelection(TRUE,TRUE,TRUE)) goto enable;
// then file
state=TRUE;
enable:
pCmdUI->Enable(state);
}
oo_v_oo 2008-09-02
  • 打赏
  • 举报
回复

if(currForm != NULL)
{
r_boolean menuVisible = NOTOK;
r_boolean menuEnabled = NOTOK;

IsMenuFlagVisible(currForm, MENU_MAIL, &menuVisible);
IsMenuFlagEnabled(currForm, MENU_MAIL, &menuEnabled);

这些是什么东西
菜牛 2008-09-02
  • 打赏
  • 举报
回复
这个可能你的消息队列中一直有消息,这样OnIdle就没有机会运行。

可以手动调用框架的CWnd::DrawMenuBar函数绘制菜单状态。
柚木卤鹅 2008-09-02
  • 打赏
  • 举报
回复
顶上!后来呢?
benh 2007-04-24
  • 打赏
  • 举报
回复
顶一下. 问题就是OnUpdateActionMail()并不是总被OnIdle()调用,而是在窗口从最小化打开时候,才能够被调用。这个为什么?
benh 2007-04-23
  • 打赏
  • 举报
回复
ON_UPDATE_COMMAND_UI(ID_TOOL_MAIL, OnUpdateActionMail)
中声明的UI处理函数,被调用的时机是怎么确定的呢?
benh 2007-04-23
  • 打赏
  • 举报
回复
ON_UPDATE_COMMAND_UI(ID_TOOL_MAIL, OnUpdateActionMail)


void CMyFrame::OnUpdateActionMail(CCmdUI *pCmdUI)
{
if(currForm != NULL)
{
r_boolean menuVisible = NOTOK;
r_boolean menuEnabled = NOTOK;

IsMenuFlagVisible(currForm, MENU_MAIL, &menuVisible);
IsMenuFlagEnabled(currForm, MENU_MAIL, &menuEnabled);

pCmdUI->Enable(menuVisible == OK && menuEnabled == OK);
}
}

OnUpdateActionMail()是否是自动调用的? 我发现有时并不调用它,即使我对menuflag做改变。



菜牛 2007-04-23
  • 打赏
  • 举报
回复
应该可以的,你的代码?
BusyCai 2007-04-23
  • 打赏
  • 举报
回复
你可以手动在点击按钮的消息响应函数中发送(SEND)ON_UPDATE_COMMAND_UI给FRAMEWND,应该会奏效。或者有个重绘菜单的函数,你查查MSDN,好像是DRAWBAR()。
benh 2007-04-23
  • 打赏
  • 举报
回复
对,FrameWnd
laofang 2007-04-23
  • 打赏
  • 举报
回复
是在CFrameWnd(一般是CMainFrame)中处理界面更新的吗?

16,551

社区成员

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

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

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