我给对话框加了一个菜单,并给菜单添加了COMMAND和UPDATE_COMMAND_UI消息处理函数,都是添加在对话框类里面的。为什么只有COMMAND处理函数有用,UPDATE_COMMAND_UI处理函数没用?
解决方案 »
- CreateFileMapping在远程文件映射盘中错误
- 需要包含头文件时,在Vc6.0中的设置问题
- 有谁用过周立功的usbcan2吗?里面有个vc6.0的例子,我加了个确定按钮,想实现点击之后退出,但程序仍继续执行,怎么做到啊?
- 不明白不这几个类之间有什么关系?
- 请教两个简单的问题
- 请问那位老兄有COIL图像数据库?或者哪里有下载?
- ***告别2005最后一天,工作总结_暨_和往事干杯***
- 求DDK
- 如果VC的DSP工程文件坏了,怎么重建工程呀?
- 高手们帮帮忙,怎么填充网页中文本框的文本,是先找到HWND吗?不行的?用什么呢?
- 如何判断一个数是否被整除100(快!在线等待)
- QQ和服务器之间有几个消息通道(socket连接)?
你可以在PretranslateMessage中加入UpdateDialogControls(this, TRUE);
再出手
添加消息WM_KICKIDEL消息的响应函数
在头文件Afxpriv中声明在响应函数中
调用UpdateDialogControl可以更新按钮等控件
菜单可以处理消息WM_INITMENUPOPUP加入以下代码
CCmdUI cmdUI;
for (UINT n = 0; n < pPopupMenu->GetMenuItemCount(); ++n)
{
CMenu* pSubMenu = pPopupMenu->GetSubMenu(n);
if (pSubMenu == NULL)
pSubMenu = pPopupMenu;
cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
for (UINT i = 0; i < cmdUI.m_nIndexMax;++i)
{
cmdUI.m_nIndex = i;
cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
cmdUI.m_pMenu = pSubMenu;
cmdUI.DoUpdate(this, FALSE);
}
}
BOOL CmychessDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if(pMsg->message==WM_INITMENUPOPUP)
{
CCmdUI cmdUI;
CMenu* pPopupMenu;
pPopupMenu=GetMenu();
for (UINT n = 0;n<pPopupMenu->GetMenuItemCount(); ++n)
{
CMenu* pSubMenu =pPopupMenu->GetSubMenu(n);
if (pSubMenu == NULL)
pSubMenu = pPopupMenu;
cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
for (UINT i = 0; i < cmdUI.m_nIndexMax;++i)
{
cmdUI.m_nIndex = i;
cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
cmdUI.m_pMenu = pSubMenu;
cmdUI.DoUpdate(this, FALSE);
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
{
CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
CCmdUI cmdUI;
for (UINT n = 0; n < pPopupMenu->GetMenuItemCount(); ++n)
{
CMenu* pSubMenu = pPopupMenu->GetSubMenu(n);
if (pSubMenu == NULL)
pSubMenu = pPopupMenu;
cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
for (UINT i = 0; i < cmdUI.m_nIndexMax;++i)
{
cmdUI.m_nIndex = i;
cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
cmdUI.m_pMenu = pSubMenu;
cmdUI.DoUpdate(this, FALSE);
}
}
// TODO: Add your message handler code here
}
if(pMsg->message==WM_INITMENUPOPUP)
这一段代码就没有执行到
添加消息出来函数:
afx_msg LRESULT OnKickIdle(WPARAM , LPARAM );
消息影射:
ON_MESSAGE(WM_KICKIDLE, OnKickIdle)
定义:
LRESULT CMy24DianDlg::OnKickIdle(WPARAM wParam, LPARAM lParam)
{ CMenu* pMainMenu = GetMenu();
CCmdUI cmdUI;
for (UINT n = 0; n < pMainMenu->GetMenuItemCount(); ++n)
{
CMenu* pSubMenu = pMainMenu->GetSubMenu(n);
cmdUI.m_nIndexMax = pSubMenu->GetMenuItemCount();
for (UINT i = 0; i < cmdUI.m_nIndexMax;++i)
{
cmdUI.m_nIndex = i;
cmdUI.m_nID = pSubMenu->GetMenuItemID(i);
cmdUI.m_pMenu = pSubMenu;
cmdUI.DoUpdate(this, FALSE);
}
}
return TRUE;}