窗口状态栏其实能做很多事情,记录下我使用的过程吧:
首先在view->ResourceSymbols里面添加自己需要的ID,我用的是ID_RGB;
然后跑到Resources View界面下点击String Table,在最后一个空白处双击,选择ID_RGB在Caption中填入R=0,G=0,B=0(这里其实就是给状态栏一个初始化);
然后跑到程序名为:MainFrame.cpp文件里找到static UINT indicators[]程序如下:
static UINT indicators[] =
{
ID_SEPARATOR,
ID_RGB,//这是我填入的内容。注意这里是逗号不是分号呀!!
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
然后我们就可以去在view中加代码了:(这里实现的功能是随着鼠标的移动,状态栏第一个栏中显示图片的RGB值)
void CBitmapView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
COLORREF p;
CClientDC dc(this);
p=dc.GetPixel(point);
BYTE R = GetRValue(p); ///得到红颜色
BYTE G = GetGValue(p); ///得到绿颜色
BYTE B = GetBValue(p); ///得到兰颜色
// double H=(0.229*R+0.587*G+0.114*B);
CString str;
str.Format("R=%d,G=%d,B=%d",R,G,B);
//这里就是状态栏显示的部分,具体什么含义还是自己多看看去吧。
CMainFrame*pMainFrame=(CMainFrame*)(AfxGetApp()->GetMainWnd());
pMainFrame->m_wndStatusBar.SetPaneText(1,str);
// CSize sz=dc.GetTextExtent(str);调整状态栏的大小(这里很有意义的^_^)
CMainFrame*pMainFrame1=(CMainFrame*)(AfxGetApp()->GetMainWnd());
int index=0;
index=pMainFrame1->m_wndStatusBar.CommandToIndex(ID_RGB);
pMainFrame1->m_wndStatusBar.SetPaneInfo(index,ID_RGB,SBPS_NORMAL,100/*sz.cx*/);
CView::OnMouseMove(nFlags, point);
}
这样基本就完成代码的添加了,但是此时是编译不成功滴,嘎嘎,因为我们是在view中调用CMainFrane类,所以,一定要在头文件里面增加一下预处理命令呀:
#include "MainFrm.h"
然后编译会提示还有错误,原来是m_wndStatusBar是个保护类型,只有其本身和派生类才能直接用,所以这里我们找到其定义的地方看看:
class CMainFrame : public CFrameWnd
{
//省略前面代码
protected: // control bar embedded members 把这里的protected改成public吧
CStatusBar m_wndStatusBar;
CToolBar m_wndToolBar;
// 省略后面的代码
};
哈哈,这下再去编译就没有问题喽,搞定了。