⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_35259.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:35259 发表者:asking 发表日期:2003-04-05 09:00:29
<br>主题:请教有关动态生成菜单的问题
<br>内容:<BR>我希望根据用户操作在“文件”菜单下的“历史”菜单中动态生成弹出菜单,以纪录<BR>曾浏览过的文件名。部分代码如下: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMenu* pMenuBar = this-&gt;GetMenu();<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(pMenuBar);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMenu* pSubMenu = pMenuBar-&gt;GetSubMenu(0);&nbsp;&nbsp;//获得“文件”菜单指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(pSubMenu);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CMenu* pSubSubMenu = pSubMenu-&gt;GetSubMenu(3);&nbsp;&nbsp;//获得“历史”菜单指针<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT_VALID(pSubMenu2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pSubMenu2-&gt;AppendMenu(MF_STRING | MF_ENABLED,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp;pHistoryMenu-&gt;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-&gt;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-&gt;GetMenuItemCount();<BR>for (int i = 0; i &lt; nItem; ++i)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;UINT nCmd = pMenu-&gt;GetMenuItemID(i);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (nCmd == nCommand)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pMenu-&gt;CheckMenuRadioItem(0, nFileNum - 1, i, MF_BYPOSITION);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<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-&gt;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 + -