需求:单文档中,默认的状态栏是分隔开来的,而且是无法点击的。现需要在状态栏上添加一个按钮,并实现点击按钮删除按钮上文本的功能。
实现步骤:
第一步,先在初始化的时候,动态创建一个按钮。
1 CButtonST m_btnStatusBarErrorTips;//状态栏上的错误提示
CButtonST是一个button的实现类,可自行百度。(可参考http://www.cnblogs.com/lidabo/archive/2012/12/17/2821122.html)
1 void HelloBtn::SetNormalBtnStatus(CWnd*pWnd,CButtonST* pBtn,int nBmpIn,int nBmpOut,int nWidthOffset,int nHeightOffset) 2 { 3 CRect rect; 4 5 //设置按钮 6 pBtn->GetWindowRect(&rect); 7 pWnd->ScreenToClient(&rect); 8 rect.right = rect.left + nWidthOffset; 9 rect.bottom= rect.top + nHeightOffset;10 pBtn->MoveWindow(&rect);11 pBtn->SetAlign(CButtonST::ST_ALIGN_OVERLAP);12 pBtn->SetBitmaps(nBmpIn,RGB(255,255,255),nBmpOut,RGB(255,255,255)); 13 }
开始创建按钮
1 //添加状态栏错误提示按钮2 m_btnStatusBarErrorTips.Create(_T(""), WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,3 CRect(900,0,600,20), &m_wndStatusBar, ID_BUTTON_ERROR_TIPS);4 m_btnStatusBarErrorTips.SetFont(&m_font);5 m_btnStatusBarErrorTips.SetAlign(CButtonST::ST_ALIGN_HORIZ_RIGHT);6 m_btnStatusBarErrorTips.SetTheTextColor(RGB(255,0,0));
第二步,初始化状态栏时,设置按钮背景图
1 HELLOBTN.SetNormalBtnStatus(this,&m_btnStatusBarErrorTips,IDB_BMP_ERROR_TIPS,IDB_BMP_ERROR_TIPS,600,20);
第三步,给按钮添加响应函数,这个步骤就不细说了,很简单。
然后初始化状态栏即可。(具体实现步骤可参考我其他的随笔)
总结:总的来说,要想在状态栏添加按钮,首先要将按钮作为状态栏的子控件创建出来。然后再根据需要添加按钮的位置,对按钮进行步骤,修饰和响应的实现。
缺陷:目前还未实现将按钮的文本左对齐处理,若后期有处理,再进行说明。