最近公司要求寫乙個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...