如何做一个只有2个combobox的toolbar?

luokun 2005-07-20 03:16:09
在工具条上添加2个combobox,但工具条上只有这2个 combobox 没有其它按钮
在运行的时候工具条无法显示。

添加 combobox 的方法是参照这里写的
http://www.vckbase.com/document/viewdoc/?id=469

有没有办法显示出来,或者用别的bar控件。
...全文
114 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yhl10000 2005-07-21
msn: yhl10000@hotmail.com
回复
yhl10000 2005-07-21
我的email是
fish.yu@suzsoft.com
如果可能的话可以将源程序给我。

回复
allenhiman 2005-07-21
m_wndToolBar.SetButtonInfo(index, ID_TOOL_ZOOM, TBBS_SEPARATOR, 80);

怀疑Index的值没取对?试个固定的比较大的index,看看是不是这得问题
(只是建议)
回复
yhl10000 2005-07-21
要得不是这个源代码,这个在http://www.vckbase.com/document/viewdoc/?id=469 有,
需要的是你创建wndToolBar的源代码。
不知你调试过没有。
回复
luokun 2005-07-21
int index = 0;
RECT rect;

while(m_wndToolBar.GetItemID(index) != ID_TOOL_ZOOM)
index++;
m_wndToolBar.SetButtonInfo(index, ID_TOOL_ZOOM, TBBS_SEPARATOR, 80);
m_wndToolBar.GetItemRect(index, &rect);

rect.top += 2;
rect.bottom += 200;

if(!m_wndToolBar.m_cmbZoom.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL|
CBS_DROPDOWN | CBS_HASSTRINGS | WS_DISABLED, rect,
&m_wndToolBar, ID_TOOL_ZOOM))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}

while(m_wndToolBar.GetItemID(index) != ID_TOOL_SELECT)
index++;
m_wndToolBar.SetButtonInfo(index, ID_TOOL_SELECT, TBBS_SEPARATOR, 160);
m_wndToolBar.GetItemRect(index, &rect);

rect.top += 2;
rect.bottom += 200;

m_wndToolBar.SetHeight(60);
if(!m_wndToolBar.m_cmbSelect.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL|
CBS_DROPDOWNLIST | CBS_SORT | WS_DISABLED, rect,
&m_wndToolBar, ID_TOOL_SELECT))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}

m_wndToolBar.m_cmbZoom.SetFont(&m_font);
m_wndToolBar.m_cmbSelect.SetFont(&m_font);
//////////////////////////////
m_wndToolBar.SetHeight(60);
回复
yhl10000 2005-07-21
调试一下你的toolbar的元素总共有多少,还有就是create的时候的资源文件。
建议贴上源代码。
回复
yhl10000 2005-07-21
体会一下这段代码的奥妙。

int index = 0;
RECT rect;

while(m_wndToolBar.GetItemID(index) != ID_TOOL_ZOOM)
index++;
m_wndToolBar.SetButtonInfo(index, ID_TOOL_ZOOM, TBBS_SEPARATOR , 400);
m_wndToolBar.GetItemRect(index, &rect);

rect.top += 2;
rect.bottom += 200;
rect.left= 2;
rect.right= 400;
if(!m_wndToolBar.m_cmbZoom.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL|
CBS_DROPDOWN | CBS_HASSTRINGS, rect,
&m_wndToolBar, ID_TOOL_ZOOM))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}

m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.SetCurSel(3);
m_wndToolBar.m_cmbZoom.ShowWindow(SW_SHOW);
index= 0;
while(m_wndToolBar.GetItemID(index) != ID_TOOL_SELECT)
index++; //TBBS_SEPARATOR
m_wndToolBar.SetButtonInfo(index, ID_TOOL_SELECT,TBBS_BUTTON , 200);
m_wndToolBar.GetItemRect(index, &rect);

rect.top += 2;
rect.bottom += 200;
rect.left= 402;
rect.right= 600;
m_wndToolBar.SetHeight(60);
if(!m_wndToolBar.m_cmbSelect.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL|
CBS_DROPDOWNLIST | CBS_SORT , rect,
&m_wndToolBar, ID_TOOL_SELECT))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.SetCurSel(3);
m_wndToolBar.m_cmbSelect.ShowWindow(SW_SHOW);
//////////////////////////////
m_wndToolBar.SetHeight(60);
回复
luokun 2005-07-21
现在可以出来了,不过还有个问题,这两个ComboBox的宽度只能一样,不能设成不同的值。这个问题有办法解决吗?
回复
yhl10000 2005-07-21
或者给我email,我将程序给你。
回复
yhl10000 2005-07-21
终于搞定了,哈哈,你仔细看我的源代码,还有在资源文件中,我把按钮宽度设为200。
int index = 0;
RECT rect;

while(m_wndToolBar.GetItemID(index) != ID_TOOL_ZOOM)
index++;
m_wndToolBar.SetButtonInfo(index, ID_TOOL_ZOOM, TBBS_BUTTON , 200);
m_wndToolBar.GetItemRect(index, &rect);

rect.top += 2;
rect.bottom += 200;
rect.left= 2;
rect.right= 200;
if(!m_wndToolBar.m_cmbZoom.Create(WS_CHILD|WS_VISIBLE| CBS_AUTOHSCROLL|
CBS_DROPDOWN | CBS_HASSTRINGS, rect,
&m_wndToolBar, ID_TOOL_ZOOM))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}

m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.AddString("dfadslfk");
m_wndToolBar.m_cmbZoom.SetCurSel(3);
m_wndToolBar.m_cmbZoom.ShowWindow(SW_SHOW);
index= 0;
while(m_wndToolBar.GetItemID(index) != ID_TOOL_SELECT)
index++; //TBBS_SEPARATOR
m_wndToolBar.SetButtonInfo(index, ID_TOOL_SELECT,TBBS_SEPARATOR , 200);
m_wndToolBar.GetItemRect(index, &rect);

rect.top += 2;
rect.bottom += 200;
rect.left= 202;
rect.right= 400;
m_wndToolBar.SetHeight(60);
if(!m_wndToolBar.m_cmbSelect.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL|
CBS_DROPDOWNLIST | CBS_SORT , rect,
&m_wndToolBar, ID_TOOL_SELECT))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.AddString("fffffffffff");
m_wndToolBar.m_cmbSelect.SetCurSel(3);
m_wndToolBar.m_cmbSelect.ShowWindow(SW_SHOW);
//////////////////////////////
m_wndToolBar.SetHeight(60);
回复
luokun 2005-07-21
所有的按钮?我想要的工具栏是没有按钮,只有两个ComboBox的效果。也就是把默认的那些新建、打开、复制……都删掉。
回复
yhl10000 2005-07-21
我没有增加任何按钮。
回复
yhl10000 2005-07-21
我用你的代码所有的按钮都出来了。
回复
luokun 2005-07-21
调试了,一切正常。
如果在资源编辑器里,在工具栏上多加一个普通按钮(什么位置都行),那么结果是正确的。
但是如果没有普通按钮,或者在运行时删掉了那个普通按钮,工具栏都会出不来。
回复
yhl10000 2005-07-21
发现一个bug。
while(m_wndToolBar.GetItemID(index) != ID_TOOL_SELECT)
index++;
这个index没有赋初值0。
程序逻辑中应该赋初值。
如果m_wndToolBar.GetItemID(index) != ID_TOOL_SELECT一直不成立,那么index在上一个index的值(相对ID_TOOL_ZOOM)将会一直增加。

还有你调试了没有。
回复
oyljerry 2005-07-21
单步调试一下,看哪里有问题,多注意初始化,显示等
回复
luokun 2005-07-21
m_wndToolBar就是简单的从CToolBar继承,加上了m_cmbZoom和m_cmbSelect这两个成员,除此之外没有作其它任何修改。
回复
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2005-07-20 03:16
社区公告
暂无公告