📄 subject_35259.htm
字号:
<p>
序号:35259 发表者:asking 发表日期:2003-04-05 09:00:29
<br>主题:请教有关动态生成菜单的问题
<br>内容:<BR>我希望根据用户操作在“文件”菜单下的“历史”菜单中动态生成弹出菜单,以纪录<BR>曾浏览过的文件名。部分代码如下: <BR> CMenu* pMenuBar = this->GetMenu();<BR> ASSERT_VALID(pMenuBar);<BR> CMenu* pSubMenu = pMenuBar->GetSubMenu(0); //获得“文件”菜单指针<BR> ASSERT_VALID(pSubMenu);<BR> CMenu* pSubSubMenu = pSubMenu->GetSubMenu(3); //获得“历史”菜单指针<BR> ASSERT_VALID(pSubMenu2);<BR> pSubMenu2->AppendMenu(MF_STRING | MF_ENABLED,<BR> i, filename[i]);<BR>可每次执行到“ASSERT_VALID(pSubMenu2);”即出错。调试显示“pSubSubMenu”为空值。<BR>而此时“pSubMenu”有赋值。我不明白“pSubSubMenu”和“pSubMenu”同为popup menu,<BR>且使用相同的方法却会出错。<BR>哪位大侠能指点一二?<BR> <BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-08 15:17:46
<br>内容:在编辑你的"历史"菜单中给它添加一个空的子项,以后再动态删除该空的子项。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:asking 回复日期:2003-04-10 13:30:24
<br>内容:果然如此,非常感谢!<BR>还有一个问题想请教:我想在点击动态生成的"历史"菜单中的某一项后出现RADIO标记。<BR>我的程序如下:<BR>ON_COMMAND_RANGE(ID_BEGIN, ID_END, OnFile)<BR>void CMainFrame::OnFile(UINT nID)<BR>{<BR> pHistoryMenu->CheckMenuRadioItem(0, nFileNum - 1, nID, MF_BYPOSITION);<BR>}<BR>pHistoryMenu为"历史"菜单指针,nFileNum为文件数量。<BR>可是未能实现。是不是未将nID赋置,可我不知该如何获得"历史"菜单中的某一项对应的序数。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-11 08:37:38
<br>内容:如果不知道具体的次序,可以用:<BR>pHistoryMenu->CheckMenuRadioItem(0, nFileNum - 1, nID, MF_BYCOMMAND);<BR>其中的nID为你的菜单项的命令ID,而不是次序。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:asking 回复日期:2003-04-11 10:08:40
<br>内容:是我没说清楚。我的动态菜单是按其命令ID依次生成的,获得菜单项的命令ID也就等于获得其次序。可我不知如何在点击动态菜单项时获得其命令ID,是不是用和鼠标操作有关的<BR>方法来获得?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:wowow 回复日期:2003-04-11 18:18:57
<br>内容:OK,点击菜单后你可以通过OnCommand得到菜单项对应的ID值,然后遍历你的该子菜单,检测哪一项的ID值与你的命令ID相等,这样就可以得到菜单的次序。程序如下:<BR>int nItem = pMenu->GetMenuItemCount();<BR>for (int i = 0; i < nItem; ++i)<BR>{<BR> UINT nCmd = pMenu->GetMenuItemID(i);<BR> if (nCmd == nCommand)<BR> {<BR> pMenu->CheckMenuRadioItem(0, nFileNum - 1, i, MF_BYPOSITION);<BR> break;<BR> }<BR>}<BR>其中的nCommand是你从OnCommand中得到的命令ID。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:asking 回复日期:2003-04-15 14:11:32
<br>内容:我又发现了新问题。<BR>我用pHistoryMenu->AppendMenu(MF_STRING | MF_ENABLED , ID_BEGIN+nFileNumber-1, strFileName);的方法向“历史”菜单中添加文件名菜单。调试中察看任一文件名菜单对应<BR>的CommandID也正确,为添加时的ID_BEGIN+nFileNumber-1。本来点击希望点击任一文件名菜单响应OnFile(UINT nID),应出现radio标记。可调试中发现点击后文件名菜单对应的CommandID没有正确传给OnFile(UINT nID)。<BR>真是不知这是什么原因?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:wowow 回复日期:2003-04-15 14:35:57
<br>内容:这是你程序的Bug,你的原问题已经解决的话,把分给我吧,以资鼓励嘛。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:asking 回复日期:2003-04-15 15:06:01
<br>内容:我解决了,原来是我把ID_BEGIN, ID_END定义的太大了。<BR>谢谢你!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -