VS2008 CMFCToolBar如何加入搜索用的那种输入框

青稞 2010-01-12 11:34:29
请问,如何往CMFCToolBar里面添加输入框呢?我想在CMFCToolBar里面加入一个用来搜索的输入框,刚才试了下CMFCToolBarEditBoxButton,结果发现默认的CMFCToolBarEditBoxButton不能进行输入,而且可恨的是他创建的大小默认我改变不了,我用了SetRect,但发现他的大小还是没有变..后来我改用CMFCToolBarComboBoxEdit,但又不知道怎么用,这个是继成CEdit的,貌似不能加入到CMFCToolBar里面..谁知道这个问题怎么解决?
1,用CMFCToolBarEditBoxButton的话,如何让其可以输入,并且可以改变大小;
2,用CMFCToolBarComboBoxEdit的话,如何用?
谢谢!!
...全文
1943 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
sanyecao111 2011-11-08
  • 打赏
  • 举报
回复
好难啊,看不懂
锋流不羁 2011-04-15
  • 打赏
  • 举报
回复
如何在不用“重置工具栏”情况下,更新组合框的的下拉列表的数据?
zjllwy263263263263 2011-01-05
  • 打赏
  • 举报
回复
楼主,还有marrco2005大大,小弟也在做 工具栏上面添加输入框 的程序,可是说什么也添加不上去...
我按照你们的说法,在继承了CMFCToolBarEditBoxButton类之后,就不能加上
DECLARE_SERIAL(myEdit) 和
ON_REGISTERED_MESSAGE(AFX_WM_RESETTOOLBAR, &CMainFrame::OnToolbarReset)
这两句话!
加上第一句,编译就报错;加上第二句,编译能通过,不能运行...
去掉这两句话,仍然会报错,错误出在m_wndToolBar.InsertButton(m_boxButton, 0)这里,经我初步追踪,是这个函数调用了CMFCToolBarButton类的OnChangeParentWnd函数,在改变m_boxButton的父窗口时出错了,可是这个问题...实在纠结!......
拜托帮帮忙啊大大们!~~~~~~
东明雅客 2010-11-01
  • 打赏
  • 举报
回复
然后setrect作对就对了。
东明雅客 2010-11-01
  • 打赏
  • 举报
回复
问题的关键是,你替换以后的按钮,不用能cmfctoolbarbutton指针,而是要用cmfctoolbarcomboxbutton指针。
东明雅客 2010-11-01
  • 打赏
  • 举报
回复
哈哈,我上个月也遇到差不多的问题,我要把一个组合框插到toolbar中,然后动态的改变大小。
我实现了。
青稞 2010-01-14
  • 打赏
  • 举报
回复
非常感谢marrco2005这两天的帮助..字体我也改了,基本能撑满整个输入框了...然后点击按钮也能得到输入框的文字了(最开始我也用了你的方法,但忘记强转了,所以没有得到文字..呵呵..失败..),现在看起来效果很不错了,当然还有点小缺陷,就是那个移动的问题..如果我拖动了CMFCToolBar这个工具栏,让其大小变化,我想让本来再上面的输入框的大小也跟这变化,我在输入框里面重写了OnSize方法,但貌似不起作用,工具栏变化的时候,输入框的OnSize方法根本没有触发..而且我怀疑,本身的输入框已经变化了,但Insert到CMFCToolBar的那个输入框是他的副本,根本没有改变什么..
青稞 2010-01-14
  • 打赏
  • 举报
回复
怎么没有人来呢??
你们有谁用过CMFCTasksPane的??我想用这个做个可以展开和收缩的窗口,但那个窗口总是有标题栏,然后下面才是可以展开和收缩的窗口,我就想直接拥有展开和收缩的这个窗口
青稞 2010-01-13
  • 打赏
  • 举报
回复
我看到有个OnSize方法,这个应该可以动态改变m_iWidth的宽度。
但不知道怎么触发这个OnSize方法,而且这个方法的参数不知道是从哪里来的呢
marrco2005 2010-01-13
  • 打赏
  • 举报
回复
至于宽度动态调整,
我想还得动态改变 m_iWidth 这个变量
然后调用 CMFCToolBar::AdjustLayout

呵呵,这个我没试过
marrco2005 2010-01-13
  • 打赏
  • 举报
回复
字体大小通过 CEdit::SetFont 就可以设置


class myEdit : public CMFCToolBarEditBoxButton
{
public:

DECLARE_SERIAL(myEdit)

CFont m_font;

myEdit()
{
m_iWidth = 300;


VERIFY(m_font.CreateFont(
18, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("Arial"))); // lpszFacename


}

void OnChangeParentWnd(CWnd* pWndParent)
{
CMFCToolBarEditBoxButton::OnChangeParentWnd(pWndParent);

m_pWndEdit->SetFont(&m_font); // <<<<<<<<<<<<<<< 设置字体
}

void OnMove()
{
if (m_pWndEdit->GetSafeHwnd() == NULL ||
(m_pWndEdit->GetStyle() & WS_VISIBLE) == 0)
{
return;
}

int cy = afxGlobalData.GetTextHeight() + 6;
int yOffset = max(0, (m_rect.Height() - m_sizeText.cy - cy) / 2);

m_pWndEdit->SetWindowPos(NULL, m_rect.left + 3, m_rect.top + yOffset, m_rect.Width() - 2 * 3, cy, SWP_NOZORDER | SWP_NOACTIVATE);
m_pWndEdit->SetSel(-1, 0);
}
};
青稞 2010-01-13
  • 打赏
  • 举报
回复
果然可以进去了..呵呵..太高兴了..
非常感谢..
但我发现鼠标点进取后,光标的大小高度还是只有初始的那么大,并且里面的字体也是默认的那么大,怎么让里面的字和输入框一样大呢??
还有,我想让我的CMFCToolBar变换的时候,这个输入框也跟着变化,比如我现在CMFCToolBar的Width为300,那么我的输入框width=100,当我拖动CMFCToolBar让其Width变大的时候,我想让输入框的Width也变大。不然我CMFCToolBar变得很长了,但我的输入框还是只有100,那样不好看。。
marrco2005 2010-01-13
  • 打赏
  • 举报
回复
class myEdit : public CMFCToolBarEditBoxButton
{
public:

DECLARE_SERIAL(myEdit)

你看一下你的类类定义里面有这一句没?我一开始忘写了这一句,结果调试的时候就死活不进myEdit::OnMove
加上就好了
你试一下
marrco2005 2010-01-13
  • 打赏
  • 举报
回复
MFCToolBar 在调用 InsertButton 的时候,会调用 myEdit::CreateObject 创建一个 m_boxButton 的副本,以后就不在使用 m_boxButton 了。

从你的描述来看,myEdit::OnMove 没有被调用,可能是CreateObject 创建出来的不是一个 myEdit 对象,而是一个CMFCToolBarEditBoxButton对象
所以不会调用 myEdit::OnMove


青稞 2010-01-13
  • 打赏
  • 举报
回复
我看了下,CEdit* CMFCToolBarEditBoxButton::CreateEdit创建的时候,确实不为NULL,是创建成功的,但始终是调用的CMFCToolBarEditBoxButton::OnMove方法,我自己的myEdit::OnMove方法并没有调用..我在其他地方手动调用的时候,m_pWndEdit->GetSafeHwnd() == NULL 就出去了..不太明白是怎么回事啊..
dvlinker 2010-01-13
  • 打赏
  • 举报
回复
学习了~
marrco2005 2010-01-13
  • 打赏
  • 举报
回复
EditCtrl 的垂直居中, 我也没有太好的办法
你尽量把字体设的大一点吧,让字体高度能够填满 editctrl
marrco2005 2010-01-13
  • 打赏
  • 举报
回复
CString strText;
myEdit *pBtn = (myEdit*)m_wndToolBar.GetButton(4);
pBtn->GetEditBox()->GetWindowText( strText);
MessageBox( strText );


// m_wndToolBar.GetButton(4); 这个 4 是搜索框在 toolbar 中的index序号
cdsnpeter 2010-01-13
  • 打赏
  • 举报
回复
MK
青稞 2010-01-13
  • 打赏
  • 举报
回复
再问marrco2005:
请问我如何得到这个输入框里面输入的内容阿..我现在在CMFCToolBar里面添加了个CMFCToolBarButton,只要点击这个Button,就读取输入框里面的输入内容,但现在不管怎么样读出来都是空的,请问如何得到这个输入框的刚输入的内容阿??
加载更多回复(19)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧