工具栏和状态栏-1

自定义工具栏和状态栏的方法如下:
定义一个新类派生子CToolBar,然后在该类中加入需要融入的新控件等,并设计相关构建子控件方法.

简要实现代码如下:
class CTBar : public CToolBar
{
public:
 CComboBox m_comBox;
 BOOL CreateComBox(int index);
};

BOOL CTBar::CreateComBox(int index)
{
 if(m_comBox.GetSafeHwnd())
  return FALSE;
 CToolBarCtrl& tb = GetToolBarCtrl();
 TBBUTTON btn;
 CRect rect;
 btn.fsStyle = TBSTYLE_SEP;
 tb.InsertButton(index,&btn);//插入空位
 tb.InsertButton(index,&btn);
 //tb.InsertButton(index,&btn);
 SetButtonInfo(index,ID_SEPARATOR,TBBS_SEPARATOR,100);
 SetButtonInfo(index+1,IDC_TBAR,TBBS_SEPARATOR,5);//中间下拉列表框
 //SetButtonInfo(index+2,ID_SEPARATOR,TBBS_SEPARATOR,20);
 GetItemRect(index,&rect); //获取到了长度 100
 rect.top = 0; //设置高度
 rect.bottom = rect.top + 100;

 if(!m_comBox.Create(CBS_DROPDOWN | WS_VISIBLE | WS_TABSTOP, rect, this, IDC_TBAR))
  return FALSE;
 m_comBox.SetItemHeight(-1,15);
 return TRUE;
}

然后在MainFrame的OnCreate事件函数中,在创建工具栏后加入调用过程

m_wndToolBar.CreateComBox(0);//最左边创建下拉列表框
m_wndToolBar.m_comBox.AddString("item1");
m_wndToolBar.m_comBox.AddString("item2");
m_wndToolBar.m_comBox.AddString("item3");
m_wndToolBar.m_comBox.AddString("item4");

状态栏类推
class CSBar : public CStatusBar
{
public:
 CProgressCtrl m_process;
 int m_nProcessPan;
 BOOL CreateProcessCtrl(int index);
protected:
 DECLARE_MESSAGE_MAP()
public:
 afx_msg void OnSize(UINT nType, int cx, int cy);
};

BOOL CSBar::CreateProcessCtrl(int index){
 if(m_process.GetSafeHwnd())
  return FALSE;
 SetPaneInfo(index,GetItemID(index),SBPS_NORMAL,150);
 CRect rect(0,0,0,1);//创建一个隐藏的矩形区,然后在OnSize中动态的修改它的大小
 if(!m_process.Create(WS_CHILD | WS_VISIBLE,rect,this,IDC_INDICATOR_PROGRESS))
  return FALSE;
 m_nProcessPan = index;
 return TRUE;
}


BEGIN_MESSAGE_MAP(CSBar, CStatusBar)
 ON_WM_SIZE()
END_MESSAGE_MAP()

void CSBar::OnSize(UINT nType, int cx, int cy)
{
 CStatusBar::OnSize(nType, cx, cy); 
 if(!m_process.GetSafeHwnd()) return;
 CRect rect;
 GetItemRect(m_nProcessPan,&rect);
 m_process.MoveWindow(rect);
}

调用过程:
m_wndStatusBar.CreateProcessCtrl(1);//第二个窗格创建进度条
m_wndStatusBar.m_process.SetRange(0,200);
m_wndStatusBar.m_process.SetPos(50);
m_wndStatusBar.SetPaneInfo(2,ID_SEPARATOR,SBPS_NORMAL,110);
SetTimer(1,1000,NULL);//状态栏时钟功能

void CMainFrame::OnTimer(UINT nIDEvent)
{
 if(nIDEvent == 1){
  CTime time = CTime::GetCurrentTime();
  m_wndStatusBar.SetPaneText(2,time.Format("%Y-%m-%d %H:%M:%S"));
 }

 CFrameWnd::OnTimer(nIDEvent);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值