窗口状态栏的设置

来源:互联网 发布:快期期货交易软件 编辑:程序博客网 时间:2024/05/16 12:32

窗口状态栏其实能做很多事情,记录下我使用的过程吧:

首先在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;

// 省略后面的代码
};

哈哈,这下再去编译就没有问题喽,搞定了。

原创粉丝点击