在用vc做資訊管理系統時,我們有時會做基於對話方塊的程式,在對話方塊中新增工具欄用以這種方法,我們可以隨心新增自己想要的ico圖示到工具欄上,不受新增乙個bmp時想要圖示沒有不想要的卻很多,難以找到合適的bmp以對應相應的工具欄按鈕從而形象的表達按鈕的功能.當然能過別的處理工具編輯bmp後也能達到程式需求,但不如這種方法方便.
先找到自己想要的ico圖示,並將這些圖示依次加到程式資源中,宣告乙個c******* m_wnd*******工具欄變數和 cimagelist img變數;
// 在程式中建立工具欄如下,其中各項引數可以參考msdn:
if(m_wnd*******.createex(this, tbstyle_flat, ws_child | ws_visible | cbrs_top
| cbrs_gripper | cbrs_tooltips | cbrs_flyby | cbrs_size_dynamic )
||m_wnd*******.load*******(idr_*******1))
m_wnd*******.get*******ctrl().setbuttonwidth(43, 70);
// 在imagelist中加上自己想要的圖示,可以設定圖示使滑鼠指上去時和沒指上去時的圖示各異,大小不同.
// 比如我們用此可以把同一圖示做成灰色和彩色,就可以得到想windows工具欄那樣的效果.
// 以下這是滑鼠指上去時圖示的顯示效果:
img.create(22, 22, ilc_color8|ilc_mask,2,2);
img.setbkcolor(::getsyscolor(color_btnface));
m_wnd*******.get*******ctrl().sethotimagelist(&img);
img.detach();
// 以下這是滑鼠沒指上去時圖示的顯示效果:
img.create(19, 19, ilc_color8|ilc_mask,8,8);
img.setbkcolor(::getsyscolor(color_btnface));
m_wnd*******.get*******ctrl().setimagelist(&img);
img.detach();
//以下是在工具欄按鈕上新增文字和設定分隔條:
m_wnd*******.modifystyle(0,tbstyle_flat|cbrs_tooltips|tbbs_checkbox );
m_wnd*******.setbuttons(null,6);
m_wnd*******.setbuttoninfo(0, id_file_new, tbstyle_button, 0);
m_wnd*******.setbuttontext(0, "開啟窗體");
m_wnd*******.setbuttoninfo(1, idc_msg_buttonspli, tbbs_separator, 0);
m_wnd*******.setbuttoninfo(2, id_file_print, tbstyle_button, 1);
m_wnd*******.setbuttontext(2, "列印");
m_wnd*******.setbuttoninfo(3, id_print_view, tbstyle_button, 2);
m_wnd*******.setbuttontext(3, "列印預覽");
m_wnd*******.setbuttoninfo(4, idc_msg_buttonspli2, tbbs_separator, 0);
m_wnd*******.setbuttontext(5, "退出");
//得到按鈕的大小,設定按鈕的大小
crect rect*******;
m_wnd*******.getitemrect(0, &rect*******);
m_wnd*******.setsizes(rect*******.size(), csize(20,20));
以下**讓工具欄顯示在對話方塊中:
repositionbars(afx_idw_controlbar_first,afx_idw_controlbar_last,0);在對話方塊中新增工具欄浮動提示用以下函式實現 ,idc_string1為字串資源先在資源視窗中設定要顯示的字串:
bool cmaindlg::notifyfunction( uint id, nmhdr * ptttstruct, lresult * presult )
return(true);
}
這種方法也可在文件檢視的程式中實現漂亮的工具欄效果.希望以上方法能給大家一幫助
1 新增工具欄資源
2 標頭檔案中加c******* m_wnd*******
3 在oninitdialog()中加入類似以下**:
// 1建立工具欄
if (!m_wnd*******.create(this) ||
!m_wnd*******.load*******(idr_dlg_*******))
// 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);
// 5控制項條定位
repositionbars(afx_idw_controlbar_first, afx_idw_controlbar_last, 0);
// 6對框居中
centerwindow();
4 手工新增處理函式
//afx_msg void onbtn***(); 檔案中加宣告
//on_command(id_btn_***, ondrawsquare) 檔案中加巨集 對應的工具條目的id號
// void c***dlg::onbtn***(){}//在c***dlg.cpp中加處理函式
vc對話方塊中新增工具欄
轉http www.programfan.com blog article.asp?id 27914 1 新增工具欄資源id為idr 2 在對話方塊的類定義中加 c m 3 在oninitdialog中或其它合適的訊息響應中加如下 函式可檢視msdn m create this 建立工具欄 m lo...
在對話方塊中插入 工具欄
一 技術要點分析 所有的windows 控制項 包括工具欄 編輯框等 都派生自 cwnd 類,這就意味著,我們可以用視窗類的 create 函式把它們 建立 並顯示到另乙個視窗 例如對話方塊 上。把工具欄加入到對話方塊中正是使用了這樣的一種方法。通常,我們使用 c ctrl 類 派生自 cwnd 類...
VC 之對話方塊中新增工具欄
1 新增工具欄資源id為idr 2 在對話方塊的類定義中加 c m 3 在oninitdialog中或其它合適的訊息響應中加如下 函式可檢視msdn 01m create this 建立工具欄 02m load idr 載入工具欄 03 04 得出控制項條大小.05crect rect 06crec...