Dialog 程序
有个对话框程序;
给它添加菜单后,给它加 toolbar,却怎么搞都不行,谁能帮忙?
CToolBar tb;
tb.Create(this);
tb.LoadToolBar(IDR_TOOLBAR1);
问题点数:20、回复次数:8Top
1 楼highersong(对月长啸)回复于 2003-08-01 19:43:59 得分 10
我以前也遇到过这个问题:CToolBar被成功地创建了,却看不见。加tb.ShowWindow()也不行。解决的办法是在后面加
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
注意:应该在OnInitDialog中创建Top
2 楼jjqiao710102(aqiao)回复于 2003-08-01 19:47:11 得分 0
upTop
3 楼highersong(对月长啸)回复于 2003-08-01 20:01:23 得分 10
以下是在一个Dialog的OnInitDialog()函数里创建一个ToolBar的例子,我用的是CRebar,创建好toolbar后加入rebar中:
/////////////////////////////////////////////////////创建工具条
// CImageList img; //定义一个imageList
CString str;
if (!m_wndReBar.Create(this))
{
TRACE0("Failed to create rebar\n");
return -1; // fail to create
}
if (!m_wndToolBar.CreateEx(this,TBSTYLE_LIST|TBSTYLE_FLAT))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// set up toolbar properties
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(20, 150);
//m_wndToolBar.GetToolBarCtrl().SetExtendedStyle(TBSTYLE_EX_DRAWDDARROWS);
if(m_il.Create(IDB_TOOLBAR, 16, 0, RGB(255, 0, 255)))
TRACE0("Success");
m_wndToolBar.GetToolBarCtrl().SetImageList(&m_il);
//m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT);
m_wndToolBar.SetButtons(NULL, 10);//为toolbar分配10个item的空间
// set up each toolbar button
m_wndToolBar.SetButtonInfo(0, ID_SCH_SAVE, TBSTYLE_BUTTON, 2);
str="保存并关闭(&S)";
m_wndToolBar.SetButtonText(0, str);
m_wndToolBar.SetButtonInfo(1, 0, TBBS_SEPARATOR, 5);//分隔符
m_wndToolBar.SetButtonInfo(2, ID_SCH_PRINT, TBSTYLE_BUTTON | TBBS_AUTOSIZE, 6);//打印
m_wndToolBar.SetButtonInfo(3, ID_SCH_INSERT, TBSTYLE_BUTTON| TBBS_AUTOSIZE, 5);//附件文件
m_wndToolBar.SetButtonInfo(4, 0, TBBS_SEPARATOR, 5);//分隔符
m_wndToolBar.SetButtonInfo(5, ID_SCH_CIRCLE, TBSTYLE_BUTTON|TBBS_AUTOSIZE, 7);//重复周期
str="重复周期(&U)";
m_wndToolBar.SetButtonText(5, str);
m_wndToolBar.SetButtonInfo(6, 0, TBBS_SEPARATOR, 5);//分隔符
m_wndToolBar.SetButtonInfo(7, ID_SCH_HIGH, TBSTYLE_BUTTON| TBBS_AUTOSIZE, 0);//重要性高
m_wndToolBar.SetButtonInfo(8, ID_SCH_LOW, TBSTYLE_BUTTON| TBBS_AUTOSIZE, 8); //重要性低
m_wndToolBar.SetButtonInfo(9, 0, TBBS_SEPARATOR, 5); //分隔符
CRect rectToolBar;
// set up toolbar button sizes
m_wndToolBar.GetItemRect(0, &rectToolBar);
m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(16,15));
//m_wndToolBar.SetSizes(CSize(rectToolBar.Width(),rectToolBar.Height()), CSize(30,20));
// create the animation control
//m_wndAnimate.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 10, 10), this, AFX_IDW_TOOLBAR + 2);
//m_wndAnimate.Open(IDR_MFCAVI);
//m_wndAnimate.Play(0,-1,-1);
// add the toolbar, animation, and address bar to the rebar
m_wndReBar.AddBar(&m_wndToolBar);
//m_wndReBar.SetBarStyle()
//m_wndReBar.AddBar(&m_wndAnimate, NULL, NULL, RBBS_FIXEDSIZE | RBBS_FIXEDBMP);
// set up min/max sizes and ideal sizes for pieces of the rebar
REBARBANDINFO rbbi;
rbbi.cbSize = sizeof(rbbi);
rbbi.fMask = RBBIM_CHILDSIZE | RBBIM_IDEALSIZE | RBBIM_SIZE;
rbbi.cxMinChild = rectToolBar.Width();
rbbi.cyMinChild = rectToolBar.Height();
rbbi.cx = rbbi.cxIdeal = rectToolBar.Width() * 9;
m_wndReBar.GetReBarCtrl().SetBandInfo(0, &rbbi);
rbbi.cxMinChild = 0;
m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_FIXED);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);
/////////////////////////////////////////////////////创建工具条Top
4 楼newvagabond(流浪者)回复于 2003-08-02 08:20:51 得分 0
OK
但是参数 AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST 在哪里查啊?
--我经常碰到这种情况!Top
5 楼triout(笨牛)回复于 2003-08-02 08:29:34 得分 0
完全同意以上解法!Top
6 楼highersong(对月长啸)回复于 2003-08-02 09:01:36 得分 0
不需要查,只不过是定义的两个ID号,下面是MSDN上的说明:
All control bar objects/windows will be child windows of some parent frame window. They are usually added as a sibling to the client area of the frame (for example, an MDI Client or view). The child window ID of a control bar is important. The default layout of control bar only works for control bars with IDs in the range of AFX_IDW_CONTROLBAR_FIRST to AFX_IDW_CONTROLBAR_LAST. Note that even though there is a range of 256 control bar IDs, the first 32 of these control bar IDs are special since they are directly supported by the print preview architecture.
Top
7 楼newvagabond(流浪者)回复于 2003-08-02 09:49:06 得分 0
Thanks to AllTop
8 楼newvagabond(流浪者)回复于 2003-08-02 09:54:07 得分 0
哎,僧多粥少,我只能给 对月长啸先生多一点分了,csdn 做得不好,有的问题没有解决。,又不能取消,白白浪费我的信誉分,给分多了又不行!Top




