給對話方塊新增選單 工具欄 狀態列簡易方法 收藏
先建立乙個基於dialog 的程式,我給他起了個名字叫:dlgmenu*******。
一、如何往基於dialog的程式新增選單
[1.1] 先新增選單(idr_menu1)資源,並加上需要的選單項。
[1.2] 編輯對話方塊資源idd_dlgmenu*******_dialog的屬性,在屬性對話方塊中選擇idr_menu1即可。
[1.3] 假如您不希望在對話方塊屬性中直接設定選單,而通過**在程式中動態生成可以採用如下方法:
[1.3.1]在cdlgmenu*******dlg類聲名中新增成員變數cmenu m_menu
再在cdlgmenu*******dlg::oninitdialog() 中新增如下**: //載入選單
m_menu.loadmenu(idr_menu1);
//設定當前選單
setmenu(&m_menu);
//當你不需要選單時可以用 setmenu(null);來取消當前選單
二、如何往基於dialog的程式新增工具欄
[2.1] 先新增工具欄(idr_*******1)資源,並畫好各個按鈕。
[2.2] 在cdlgmenu*******dlg類聲名中新增成員變數 c******* m_wnd*******;
[2.3] 在cdlgmenu*******dlg::oninitdialog() 中新增如下** //新增乙個平面工具條
if (!m_wnd*******.createex( this,tbstyle_flat , ws_child | ws_visible | cbrs_align_top | cbrs_gripper | cbrs_tooltips,
crect(4,4,0,0)) ||!m_wnd*******.load*******(idr_*******1) )
m_wnd*******.showwindow(sw_show);
repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last, 0);
三、為工具欄新增工具提示
[3.1] 在cdlgmenu*******dlg類定義中手工新增訊息對映函式的定義,如下黑體部分 //}afx_msg
declare_message_map()
[3.2] 在cdlgmenu*******dlg.cpp新增函式的實現** //工具欄提示
bool cdlgmenu*******dlg::ontooltiptext(uint, nmhdr* pnmhdr, lresult* presult)
if (nid != 0) //不為分隔符
else
#else
if (pnmhdr->code == ttn_needtexta)
else
#endif
*presult = 0;
// 使工具條提示視窗在最上面
::setwindowpos(pnmhdr->hwndfrom, hwnd_top, 0, 0, 0, 0,swp_noactivate|
swp_nosize|swp_nomove|swp_noownerzorder);
return true;
} return true;
} [3.3] 在cdlgmenu*******dlg.cpp中新增訊息對映,請看如下**中的黑體部分 begin_message_map(cdlgmenu*******dlg, cdialog)
//}afx_msg_map
end_message_map()
四、其它
為了使你的程式看起來更酷,還可以在cdlgmenu*******dlg::onpaint()中修改**實現dialog 填充顏色。
cpaintdc dc(this);
crect rect;
getclientrect(rect);
dc.fillsolidrect(rect, rgb(60,110,170));
五、新增狀態列
static uint indicators =
; void cthreaddemodlg::oninitdialog()
if (!m_wndstatusbar.create(this) ||
!m_wndstatusbar.setindicators(indicators, sizeof(indicators)/sizeof(uint)))
repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last, 0);
void cthreaddemodlg::onbutton1() }
mfc程式 在dialog裡新增工具欄
下列函式為新增工具欄的**:bool ctestdlg::creat*******( void )
// 2 - 得出控制項條大小.
crect rcclientstart;
crect rcclientnow;
getclientrect(rcclientstart);
repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last,
0, reposquery, rcclientnow);
// 3 放置控制項條位置
cpoint ptoffset(rcclientnow.left - rcclientstart.left,
rcclientnow.top - rcclientstart.top);
crect rcchild;
cwnd* pwndchild = getwindow(gw_child);
while (pwndchild)
// 4 - 調整對話方塊尺寸
crect rcwindow;
getwindowrect(rcwindow);
rcwindow.right += rcclientstart.width() - rcclientnow.width();
rcwindow.bottom += rcclientstart.height() - rcclientnow.height();
movewindow(rcwindow, false);
//m_webrect = rcwindow;
// 5 - 控制項條定位
repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last, 0);
//getclientrect( &m_webrect );
m_webrect.left = rcwindow.left;
m_webrect.bottom = rcwindow.bottom;
m_webrect.right = rcwindow.right;
m_webrect.top = rcchild.top;
// 6 - 對框居中
centerwindow();
return true;
} 標頭檔案中新增:
c******* m_*******;
在資源中自定義工具欄資源:idr_*******(該名字可自定義,主要與程式中的匹配)
在oninitdialog()
中呼叫creat*******()即能實現新增工具欄
給對話方塊新增選單 工具欄 狀態列
先建立乙個基於dialog 的程式,名字叫 dlgmenu 一 如何往基於dialog的程式新增選單 1.1 先新增選單 idr menu1 資源,並加上需要的選單項。1.2 編輯對話方塊資源idd dlgmenu dialog的屬性,在屬性對話方塊中選擇idr menu1即可。1.3 假如您不希望...
給對話方塊新增選單 工具欄 狀態列簡易方法
先建立乙個基於dialog 的程式,我給他起了個名字叫 dlgmenu 一 如何往基於dialog的程式新增選單 1.1 先新增選單 idr menu1 資源,並加上需要的選單項。1.2 編輯對話方塊資源idd dlgmenu dialog的屬性,在屬性對話方塊中選擇idr menu1即可。1.3 ...
給對話方塊新增選單 工具欄 狀態列簡易方法
先建立乙個基於dialog的程式,我給他起了個名字叫 dlgmenu 一 如何往基於dialog的程式新增選單 1.1 先新增選單 idr menu1 資源,並加上需要的選單項。1.2 編輯對話方塊資源idd dlgmenu dialog的屬性,在屬性對話方塊中選擇idr menu1即可。1.3 假...