工具栏(toolbar)

创建工具栏方法:

1.CToolBar::Create创建工具栏

m_wndToolbar.Create(this,WS_CHILD | WS_VISIBLE | CBRS_BOTTOM,AFX_IDW_TOOLBAR);

也可以:m_wndToolBar.Create(this);

m_wndToolBar.SetBarStyle((m_wndToolBar.GetBarStyle() & ~CBRS_TOP) | CBRS_BOTTOM);

调用CToolBar::LoadBitmap加载包含按钮的命令

ID static UINT nButtonIDs[]={ ID_FILE_NEW, ID_FILE_OPEN, ...};

m_wndToolBar.Create(this);

m_wndToolBar.LoadBitmap(IDB_BITMAP);

m_wndToolbar.SetButtons(nButtonIDs,10);

CToolBar::SetSizes改变图象和按钮尺寸

2.从资源文件中加载--CToolbar::LoadToolBarCToolBar::SetButtonText改变按钮表面的字符串m_wndToolBar.Create(this);

m_wndToolBar.LoadToolBar(IDR_TOOLBAR);

m_wndToolBar.SetButtonText(0,_T("New"));

m_wndToolBar.SetButtonText(1,_T("Open"));

m_wndToolBar.SetSizes(CSize(48,42),CSize(40,19));

TBBS_CHECKBOX创建一个复选按钮TBBS_CHECKGROUP相当于TBBS_CHECKBOX | TBBS_GROUP这些属性实用CToolBar::SetButtonStyle 把工具栏添加单选按钮,选中其中一个作为默认按钮

int nState=m_wndToolBar.GetToolBarCtrl().GetState(ID_PART_LEFT);

m_wndToolBar.GetToolBarCtrl().SetState(ID_PART_LEFT,nState | TBSTATE_CHECKED);

只有调用工具栏的CControlBar::EnableDocking和框架窗口的CFrameWnd::EnableDocking函数,并有各自的位标志制定框架窗口一侧作为工具栏的安装位置,工具栏的可浮动和可摆放才有效

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

可使停放在父窗口的任一一侧用CFrameWnd的成员函数DockControlBar和FloatControlBar使工具栏浮动DockControlBar(&m_wndToolBar);

FloatControlBar(&m_wndToolBar,CPoint(x,y));

父窗口的坐标系 TBBS_WRAPPED相当于回车,后面的按钮放在下一行

m_wndToolBar.SetButtonStyle(1,m_wndToolBar.GetButtonStyle(0)|TBBS_WRAPPED);

工具栏的可见性:

1.CFrameWnd::OnBarCheck来隐藏或者显示CFrameWnd::OnUpdateControlBarMenu来选中或取消其ID和工具栏ID匹配的菜单项

On_UPDATE_COMMAND_UI(ID_VIEW_STATUS_BAR,OnUpdateControlBarMenu)

On_COMMAND_EX(ID_VIEW_STATUS_BAR,OnBarCheck)

编写自己的命令和更新程序并用CFrameWnd::ShowControlBar隐藏或显示,通过查看WS_VISIBLE确定是否显示

ON_COMMAND(ID_VIEW_TOOLBAR,OnVieToolBar)ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR,OnUpdateViewToolBar)

void CMainFrame::OnViewToolBar()

{

ShowControlBar(&m_wndToolBar,(m_wndToolBar.GetStyle() & WS_VISIBLE)==0,FALSE);

}

void CMainFrame::OnUpdateViewToolBar(CCmdUI *pCmdUI)

{

pCmdUI->SetCheck((m_wndToolBar.GetStyle() & WS_VISIBLE)?1:0);

}

仅仅修改WS_VISIBLE无法实现显示隐藏,因为工具栏的显示隐藏时MFC会调整视图的大小,适应框架窗口客户区域内的变化 CControlBar::OnUpdateCmdUI是个虚函数,主结构在CPU空闲时调用,重载更新那些没有UI更新处理程序的控件设置工具栏永久化的两个函数:CFrameWnd::SaveBarState和CFrameWnd::LoadBarStateSaveBarState把每个工具栏的停放或浮动状态,位置,方向和可见性写到注册表在主框架窗口的OnCreate中调用LoadBarState,在OnClose中调用SaveBarState 在工具栏中添加其他按钮控件1.在TOOLBAR资源中添加一个按钮分隔符或者白按钮,任一ID和图像

2.调用CToolBar::SetButtonInfo来增加预留位置的宽度,使之能容纳控件,在该空白处创建控件SetButtonInfo(8,IDC_COMBOBOX,TBBS_SPEARATOR,nWidth);

CRect rect;

GetItemRect(8,&rect);

rect.botton=rect.top=nHeight;

m_wndComboBox.Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | CBS_DROPDOWNLIST,rect,this,IDC_COMBOBOX);             

HRESULT CALLBACK DllGetVersion(DLLVERSIONINFO *pdvi);

该函数不是API函数,需要用LoadLibrary 和 GetProcAddress来获取函数指针 //检测Common Ctrl的版本void GetCommonCtrlVersion(DWORD &dwMajor,DWORD &dwMinor)

{

dwMajor=dwMinor=0; 

HINSTANCE hLib=::LoadLibrary(_T("Contrl32.dll"));

if( hLib!=NULL )

{

 DLLGETVERSIONPROC pDllGetVersion=   (DLLGETVERSIONPROC )::GetProcAddress(hLib,_T("DllGetVersion"));

 if( pDllGetVersion ) 

 DLLVERSIONINFO dvi;  

ZeroMemory(&dvi,sizeof(dvi)); 

 dvi.cbSize=sizeof(dvi);     

HRESULT hr=(*pDllGetVersion)(&dvi);  

if( SUCCEEDED(hr) )  

{    dwmajor=dvi.dwMajorVersion;    dwMinor=dvi.dwMinorVersion;   } 

else 

{   dwMajor=4;   dwMor=0;  }   

::Freelibrary(hLib); }} DWORD dwMajor,dwMinor;GetComctlVersion(dwMajor,dwMinor);if( (dwMajor==4 && dwMinor>=70) ||  dwMajor>4 )

{  //the feature is supported}

else

{ //not supported}

在SDK的Windows程序中,通常使用WM_MENUSELECT消息来更新状态栏的描述性文本状态栏通过创建状态栏static UINT nIndicator[]={ ID_SEPARATOR, ID_INDICATOR_INS};

m_wndStatusBar.Create(this);

m_wndStatusBar.Setindicators(nIndicators,2);

通过SetPaneInfo来调整窗格信息

m_wndStatusBar.SetPaneInfo(0,ID_SEPARATOR,SBPS_NOBORDERS,64);

可以通过消息映射来更新状态栏的窗格

ON_UPDATE_COMMAND_UI(ID_INDICATORS,OnUpdateTime)

void CMainFrame::OnUpdateTime(CCmdUI *pCmdUI)

{ .... pCmdUI->SetText(...);}

在状态栏德文本前加一个“/t”,窗格文本居中对齐,两个"/t/t",窗格右对齐创建ReBar首先创建ToolBarm_wndToolBar.CreateEx(this);

m_wndToolBar.LoadToolBar(IDR_TOOLBAR);

m_wndReBar.Create(this);

m_wndReBar.AddBar(&m_wndToolBar);

可以使用AddBar的第2、3个参数指定标签和背景

m_bitmap.LoadBitmap(IDB_BKGND);m_wndReBar.AddBar(&m_wndToolBar,_T("Main"),&m_bitmap);


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chenyu2202863/archive/2008/07/01/2601989.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值