在我的代码中,我在OnCreate()的视图类中添加了按钮。我包括了“按命令”和“按更新时的命令”功能。当我单击按钮时,此处的命令功能正在工作。但是在更新中,Cmmmand无法正常工作。我使用此OnUpdateCommand()更新按钮的按下状态。
在OnCreate()
rBar.left = 580;
rBar.right = 620;
cBZoomOut.Create("",WS_CHILD|WS_VISIBLE|BS_BITMAP ,rBar,this,IDC_TZOOMOUT);
cBZoomOut.SetIcon(IDI_TZOOMOUT);
rBar.left = 625;
rBar.right = 665;
cBZoomin.Create("",WS_CHILD|WS_VISIBLE|BS_BITMAP ,rBar,this,IDC_TZOOMIN);
cBZoomin.SetIcon(IDI_TZOOMIN);
这些按钮的消息映射。
afx_msg void OnUpdateTzoomout(CCmdUI *pCmdUI);
afx_msg void OnTzoomin();
afx_msg void OnUpdateTzoomin(CCmdUI *pCmdUI);
afx_msg void OnTzoomout();
ON_UPDATE_COMMAND_UI(IDC_TZOOMOUT, &CTrendView::OnUpdateTzoomout)
ON_COMMAND(IDC_TZOOMIN, &CTrendView::OnTzoomin)
ON_UPDATE_COMMAND_UI(IDC_TZOOMIN, &CTrendView::OnUpdateTzoomin)
ON_COMMAND(IDC_TZOOMOUT, &CTrendView::OnTzoomout)
On命令和OnUpdatecommand函数:
void CTrendView::OnTzoomout()
{
sTimeStatus.Format("<=>%d",Minute/2);
}
void CTrendView::OnUpdateTzoomout(CCmdUI *pCmdUI)
{
if (Minute == 16)
pCmdUI->Enable(FALSE);
else
pCmdUI->Enable(TRUE);
}
在“放大”和“放大”功能中,OnUpdateCommnad均不起作用。
答案 0 :(得分:2)
此路由不会自动完成。
您必须处理football
。通常,您调用内部WM_IDLEUPDATECMDUI
虚拟函数。最后调用OnUpdateCmdUI
。
您可以在TN021
中找到详细信息只需在运行的OnUpdate处理程序上设置一个断点。并查看调用堆栈。比您可以看到和想象的整个工作原理。
还有一种使用UpdateDialogControls
和WM_KICKIDLE
的方法。参见此article。
答案 1 :(得分:1)
尝试以下操作。
在TrendView.h
中添加:
afx_msg LRESULT OnKickIdle(WPARAM wParam, LPARAM lParam);
在TrendView.cpp
中添加:
#include <afxpriv.h>
...
ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
...
LRESULT CTrendView::OnKickIdle(WPARAM wParam, LPARAM lParam)
{
UpdateDialogControls(this, FALSE);
return 0;
}