时间: 2021-07-31 作者:daque
翻译:徐景周(原著:piero viano)载入演练源码(http://www.vckbase.com/vckbase/vckbase12/vc/ctrls/menu_07/1207099.htm)(翻译注:因为原文作家所供给例子代码需运用附带rc资源,经自己运用后感触不够通用,故将局部源码窜改并将作品翻译。文中此刻所附例子为我迩来所作一抓图步调的界面局部。不只office 2000智能菜单噢!还囊括多文书档案视图的tab页表露,自绘制菜单等,确定请参看附带范例代码。我的email是:jingzhou_xu@163.net ~o~)在你的工程文献中运用office 2000菜单的话(翻译:暂时仅扶助多文书档案菜单窜改,即使要改单文书档案菜单界面包车型的士话,可对文献中的cmultidoctemplateex类、cmdiframeex类和cmdiframeex类举行窜改,以符合单文书档案界面。),请按底下办法举行: 在资源里的字符串表中新增二字符串:一、id_showfull ,32792,表露实足菜单。二、id_intmode,32794,翻开/遏止智能菜单形式。 将offmenu文献夹中每一个.cpp和.h文献包括井你的工程文献中。 编纂工程文献中的 mainfrm.h (主框架头文献) : 将原类的证明从:class cmainframe : public cmdiframewnd改为:#include "mdifrmex.h"#include "toolbarex.h"class cmainframe : public cmdiframeex接着将类中的东西条类从 ctoolbar 改为 ctoolbarex:ctoolbar m_wndtoolbar;形成:ctoolbarex m_wndtoolbar;编纂工程文献中的 mainfrm.cpp (主框架文献): 变换个中动静映照从:implement_dynamic(cmainframe, cmdiframewnd)begin_message_map(cmainframe, cmdiframewnd)形成:implement_dynamic(cmainframe, cmdiframeex)begin_message_map(cmainframe, cmdiframeex)接着将 cmainframe::oncreate 中的:if (cmdiframewnd::oncreate(lpcreatestruct) == -1)变为:if (cmdiframeex::oncreate(lpcreatestruct) == -1)编纂工程文献中 myapp.h (运用类头文献):变换个中的类证明从:class ctestmdiapp : public cwinapp变为:#include "winappex.h"class ctestmdiapp : public cwinappex编纂工程文献中 myapp.cpp (运用类文献):将个中的动静映照从:begin_message_map(ctestmdiapp, cwinapp)变为:#include "doctplex.h"begin_message_map(ctestmdiapp, cwinappex)接着将 cmyapp::initinstance() 中的底下代码从: cmultidoctemplate* pdoctemplate; pdoctemplate = new cmultidoctemplate( idr_testmdtype, runtime_class(ctestmdidoc), // custom mdi child frame runtime_class(cchildframe), runtime_class(ctestmdiview)); adddoctemplate(pdoctemplate); // create main mdi frame window cmainframe* pmainframe = new cmainframe; if (!pmainframe->loadframe(idr_mainframe)) return false; m_pmainwnd = pmainframe;替代成: uint nid; nid=idr_mainframe; // create main mdi frame window cmainframe* pmainframe = new cmainframe; if (!pmainframe->loadframe(nid)) return false; m_pmainwnd = pmainframe; cmultidoctemplateex* pdoctemplate; pdoctemplate = new cmultidoctemplateex( idr_testmdtype, runtime_class(ctestmdidoc), // custom mdi child frame runtime_class(cchildframe), runtime_class(ctestmdiview), &nid,1); adddoctemplate(pdoctemplate); cwinappex::initinstance();接下来就不妨编释并运转你的步调了。 即使你想本人掌握控制智能菜单的话,可径直重载cmenubar类中的底下涵数既可: word cmenubar::incmenuusage(cmenuex *pparent, uint pos, word curusage)bool cmenubar::evaluateifgrayed(cmenuex *pparent, uint pos, word &curusage, int imed, int irange)第一个涵数用来增添暂时菜单条有效法。第二个涵数确定暂时菜单条能否灰色表露,它也可用来窜改暂时菜单条的用法。即使你想在菜单中保存运用步调中设置的数据的话,可用cmenuex::getextradataptr(uint)来包括进那些数据。