ActiveX外掛程式下自定義選單

2021-06-18 18:14:53 字數 4122 閱讀 8031

最近公司要求寫乙個ocx的外掛程式,把那種多文件的整個框架介面全部都分裝到外掛程式裡面,碰到的第乙個問題就是不能正常的載入顯示選單,在網上找了相關的資料都說用按鈕來替代選單,於是本人本著這種思路自定義了乙個選單類,拿來與大家分享一下,封裝的不是很到位,後來也懶得改,貼出來讓大家看看,相互交流下經驗

選單的樣式就是這樣,下面說下具體思路

1.建立乙個對話方塊,在對話方塊上動態的建立選單

crect rectmenu(clinerect.left,clinerect.top,clinerect.right,clinerect.top+120);

m_pmenudlg = new cdlgmenucmd;

bool bret = m_pmenudlg->createex(null,null,_t(""),ws_child|ws_visible,rectmenu,this,idd_dlg_menucdm);

if(!bret)

2.在選單對話方塊的oncreate函式裡建立選單

crect rect(0,0,lpcreatestruct->cx,lpcreatestruct->cy);

m_menu.loadmenu(idr_kqview_tmpl);//注:idr_kqview_tmpl是資源裡建立的選單,當然選單分為下面10個大項,下面新增選單的**實際可以通過遍歷m_menu新增,因為懶所以沒改了

addmenu(new cstaticmenu(_t("檔案"),&m_menu,0,idc_static_menu0));

addmenu(new cstaticmenu(_t("編輯"),&m_menu,1,idc_static_menu1));

addmenu(new cstaticmenu(_t("檢視"),&m_menu,2,idc_static_menu2));

addmenu(new cstaticmenu(_t("格式"),&m_menu,3,idc_static_menu3));

addmenu(new cstaticmenu(_t("公式"),&m_menu,4,idc_static_menu4));

addmenu(new cstaticmenu(_t("表頁"),&m_menu,5,idc_static_menu5));

addmenu(new cstaticmenu(_t("資料"),&m_menu,6,idc_static_menu6));

addmenu(new cstaticmenu(_t("工具"),&m_menu,7,idc_static_menu7));

addmenu(new cstaticmenu(_t("視窗"),&m_menu,8,idc_static_menu8));

addmenu(new cstaticmenu(_t("幫助"),&m_menu,9,idc_static_menu9));

新增後建立選單項

for (std::vector::iterator item=m_menuvector.begin(); item != m_menuvector.end(); item++)*/

menurect.setrect(npreleft,npretop,npreleft+cx,npretop + 23);

npreleft = npreleft+cx;

pmenu->create(null,ws_child|ws_visible|ss_center|ss_notify,menurect,this,pmenu->m_staticid);}

3.下面是cstaticmenu類的具體實現,當然這個類可以做其他的很多用途,熟悉c++的繼承寫起來當然是很簡單的

標頭檔案cstaticmenu.h

class cstaticmenu : public cstatic

;cstaticmenu.cpp檔案的實現

implement_dynamic(cstaticmenu, cstatic)

//cstaticmenu::cstaticmenu()

//cstaticmenu::cstaticmenu(cstring strtext,cmenu * pmenu,int nmenuindext,uint staticid)

cstaticmenu::~cstaticmenu()

begin_message_map(cstaticmenu, cstatic)

on_wm_paint()

on_wm_erasebkgnd()

on_wm_mousemove()

on_wm_lbuttondown()

on_wm_timer()

end_message_map()

// cstaticmenu 訊息處理程式

void cstaticmenu::onpaint()

}bool cstaticmenu::onerasebkgnd(cdc* pdc)

void cstaticmenu::setformat(uint uformat)

void cstaticmenu::setbgcolor(colorref bgcolor)

void cstaticmenu::settextcolor(colorref textcolor)

void cstaticmenu::settext(cstring strtext)

void cstaticmenu::setfontbold(bool bbold)

else

invalidate();

}void cstaticmenu::setfontname(const cstring& strfont)

void cstaticmenu::setfontunderline(bool bset)

void cstaticmenu::setfontitalic(bool bset)

void cstaticmenu::setfontsize(int nsize)

void cstaticmenu::setattrib(colorref bgcolor,colorref textcolor,cstring strtext,bool bbold,cstring strfont,bool bunderline,bool bitatc,int nsize)

else

strfontname = strfont;

m_textunderline = bunderline;

m_textitalic = bitatc;

m_fontsize = nsize;

m_strtext = strtext;

invalidate();

}int cstaticmenu::gettextcx()

cfont tempfont;

tempfont.createfont(m_fontsize,0,0,0,m_textbold,m_textitalic,m_textunderline,false,false,false,false,false,false,strfontname);

cfont * poldfont = pdc->selectobject(&tempfont);

csize size = pdc->gettextextent(m_strtext);

pdc->selectobject(poldfont);

::releasedc(null,hdc);

return (size.cx+15);

}void cstaticmenu::onmousemove(uint nflags, cpoint point)

cstatic::onmousemove(nflags, point);

}void cstaticmenu::onlbuttondown(uint nflags, cpoint point)

cstatic::onlbuttondown(nflags, point);

}void cstaticmenu::ontimer(uint_ptr nidevent)

m_bismouseenter = false;

settimer(1,200,null);

}  

cstatic::ontimer(nidevent);

}void cstaticmenu::setdefaultbgcolor()

自定義選單

對話方塊的系統選單 預處理 define menu button id 10246 cmenu systemmenu systemmenu.createmenu cmenu subpopupmenu subpopupmenu.createpopupmenu cmenu subpopupmenuind...

EXCEL自定義選單,做外掛程式必備。

最近在公司用到excel需要匯入用友u8的資料。所以就想著把這功能做成excel的外掛程式形式。雖然最後沒有用上,但是這些知識學習了一下。記下來備用。也可以給還在找這方面資料的同學一起學習一下。在公司寫的。可能會有點亂。excel自定義選單選項有兩種方法 1 借用officecustomuiedit...

自定義外掛程式

自定義外掛程式 建立自定義外掛程式1.建立工程 qt4 designer plugin 後續配置都使用預設值,這裡我們建立乙個 qhist 外掛程式。2.新建後,直接編譯,會產生如下錯誤 1 link fatal error lnk1181 cannot open input file qtdesi...