1、我在框架里建立了两个CToolBar对象,他们产生后默认在窗口的上部,但是他们的排列位置是两排(如 = ),能不能让他们自动排成一排(如 - - )?
2、CToolBar里面怎么添加下拉菜单,单选复选框等?可以加哪些控件?怎么响应消息?
解决方案 »
- 无模式对话框的销毁
- vc 添加OnSize消息响应函数问题!
- MFC编的程序主函数在哪?那几部分分别是干什么的?
- AddVectoredExceptionHandler : undeclared identifier
- 200分 帮完善下钩子函数
- 我现在需要一个线程来接收数据,然后放在数组里,接收到的数据是一个一个的往前顶的,然后另一个线程来处理数据,我现在不知道存数据是用
- 怎样根据一个窗口名来获得这窗口的句柄?
- 怎么没生成lib
- WTL 自绘控件中不能使用PreTranslateMessage该如何截获消息呢
- 怎样创建2维数组后带函数,比如a[1][1].number,a[1][1].name啊
- ATL控件实现autosize(利用stock property 的 Autosize)即让它随父窗口大小改变自动调整大小?
- 在IE中如何将指定的工具栏显示在工具栏面板中,重分感谢!!!
RecalcLayout
还有我想让一个CDialogBar在创建以后能够浮动在窗口里,而不是靠边,怎么做?
如果不加CBRS_RIGHT等,启动的时候要弹出警告框,怎么回事?
pFrame->RecalcLayout();
bar->GetWindowRect(&rect);第一个bar
rect.OffsetRect(1,1);
pFrame->DockControlBar(pnewbar,id,&rect);//第二个bar
CToolBar里面怎么添加下拉菜单,单选复选框等?可以加哪些控件?怎么响应消息?
还有我想让一个CDialogBar在创建以后能够浮动在窗口里,而不是靠边,怎么做?
如果不加CBRS_RIGHT等,启动的时候要弹出警告框,怎么回事?
有个Internet Explore ReBar 选项,将他选中,就可以看见程序中多了一个工具栏,这个工具栏就是你说的那中可以伸缩的那种,在程序中可以看见对应的对话框,在这个对话框中可以添加各种控件,但这个对话框的大小不能调整的,
如果需要添加更多的控件,需要使用DialogBar
.Enabledock(CBRS_FLOAT_MULTI)
class CMainFrame : public CFrameWnd
{
...
CDialogBar m_wndDlgBar1;
CDialogBar m_wndDlgBar2;
...
}int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
.... if( !m_wndDlgBar1.Create( this, IDD_DLGBAR1, CBRS_RIGHT|CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY, IDD_DLGBAR1 ) )
{
TRACE0("未能创建DB1\n");
return -1; // fail to create
} //CBRS_TOOLTIPS|CBRS_FLYBY | CBRS_HIDE_INPLACE
if( !m_wndDlgBar2.Create( this, IDD_DLGBAR2, CBRS_RIGHT|CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS | CBRS_FLYBY, IDD_DLGBAR2 ) )
{
TRACE0("未能创建2\n");
return -1; // fail to create
} m_wndDlgBar1.EnableDocking( CBRS_ALIGN_ANY);
m_wndDlgBar2.EnableDocking( CBRS_ALIGN_ANY );//CBRS_FLOAT_MULTI 会出错
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDlgBar1, AFX_IDW_DOCKBAR_RIGHT); RecalcLayout( false );
CRect rect;
m_wndDlgBar1.GetWindowRect(&rect);
rect.OffsetRect( 0, 200 );
//DockControlBar(&m_wndDlgBar2, IDD_SHOWCTRLDLG, &rect ); // 会出错
...
}
不知道你的
m_wndDlgBar1
m_wndDlgBar2
对应的的对话框的风格是否是Child??
我把代码做了调整就解决了:
1)错误://自定义的工具栏
m_wndDlgBar2.EnableDocking( CBRS_ALIGN_ANY );//CBRS_FLOAT_MULTI 会出错
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDlgBar1, AFX_IDW_DOCKBAR_RIGHT);//系统的工具栏m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
2)正确:
//系统的工具栏m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
//自定义的工具栏
m_wndDlgBar2.EnableDocking( CBRS_ALIGN_ANY );//CBRS_FLOAT_MULTI 会出错
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndDlgBar1, AFX_IDW_DOCKBAR_RIGHT);只是顺序变化了,就没问题了
m_wndDlgBar2.EnableDocking( CBRS_FLOAT_MULTI);//这样出错
DockControlBar(&m_wndDlgBar2, IDD_SHOWCTRLDLG, &rect ); // 这儿也会出错
只有
CBRS_ALIGN_TOP Allows docking at the top of the client area.
CBRS_ALIGN_BOTTOM Allows docking at the bottom of the client area.
CBRS_ALIGN_LEFT Allows docking on the left side of the client area.
CBRS_ALIGN_RIGHT Allows docking on the right side of the client area.
CBRS_ALIGN_ANY Allows docking on any side of the client area. 而 CBRS_FLOAT_MULTI是CControlBar::SetBarStyle中定义的参数.
这个可以查MSDN
我的目的是想让两个CDialogBar一出来就在同一个边,紧挨着并列,或者悬浮。我该怎么做呢?
只有使用CReBar
这里有关于制作toolbar 的下拉菜单等的说明
如新建一个CToolBar 对象bar1...
...
bar1.EnableDock(CBRS_ALIGN_ANY);
...DockControlBar(&m_wndToolBar);//这是系统的工具栏...
CRect rect,re1;
UINT n=0;
RecalcLayOut();
Bar1.GetClinetRect(&rect);
m_wndToolBar.GetWindowRect(&re1);rect.top=re1.top;
rect.bottom=re1.bottom;
rect.left+=re1.right
DockControlBar(&Bar1,n,&rect);
你可以通过调节rect来放置在不同的地方,调节n来获得不同的停放风格