給對話方塊新增選單 工具欄 狀態列簡易方法

2021-05-23 09:45:45 字數 3733 閱讀 5681

給對話方塊新增選單 工具欄 狀態列簡易方法 收藏

先建立乙個基於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 假...