在對話方塊中新增工具欄的兩種方法

2021-09-30 09:57:32 字數 3865 閱讀 4168

在用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...