在状态栏中加入BitMap

原创 2000年12月10日 13:51:00
  1. 在一个AppWizard应用的状态条中加入一个新的方块,在Mainfrm.cpp中加入下列语句

//Mainfrm.cpp

static UINT indicators[] =
{
    ID_SEPARATOR, // status line indicator
    ID_INDICATOR_BITMAP,    // BITMAP状态条
    ID_INDICATOR_CAPS,
    ID_INDICATOR_NUM,
    ID_INDICATOR_SCRL,
};

  1. 从CStatusBar派生一个新类(例如CBitmapStatusBar),并且用这个新类取代CMainFrame中的CStatusBar(Mainfrm.h)

//Mainfrm.h

//CStatusBar m_wndStatusBar;
CBitmapStatusBar m_wndStatusBar;

  1. 在新类的.h和.cpp中加入下面两个函数的声明和定义

//BitmapStatusBar.h

class CMyStatusBar : public CStatusBar {...
    #if _MFC_VER < 0x400
        virtual void DoPaint(CDC* pDC);
    #else
        virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
    #endif
     ...}

//BitmapStatusBar.cpp

#if _MFC_VER < 0x400
    void CBitmapStatusBar::DoPaint(CDC* pDC)
    {
        CRect rect;
        GetItemRect(1, &rect); //得到pane的大小
        pDC->ExcludeClipRect(&rect); //创建新的裁剪区域
        CStatusBar::DoPaint(pDC); //描绘状态条(status bar)的其余部分

        CRgn paneRgn;
        paneRgn.CreateRectRgnIndirect(rect);
        pDC->SelectClipRgn(&paneRgn); //选择裁剪区域

        CBitmap pBitmap;
        //加载位图,使用Import从文件加载资源,可以不受调色板限制
        pBitmap.LoadBitmap(IDB_BITMAP1);

        //将当前位图放入兼容CDC
        CDC SourceDC;
        SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC
        CBitmap* pOldBitmap = SourceDC.SelectObject(&pBitmap);//选择位图
        pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
                   &SourceDC, 0, 0, SRCCOPY);//BitBlt
        SourceDC.SelectObject(pOldBitmap);//删除CDC中所选择的位图
        pBitmap.DeleteObject();//删除位图
    }
#else
    void CBitmapStatusBar::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
    {
        switch(lpDrawItemStruct->itemID)
        {
        case 1:
            //从资源中选择位图
            CBitmap pBitmap;
            //加载位图,使用Import从文件加载资源,可以不受调色板限制
            pBitmap.LoadBitmap(IDB_BITMAP1);

            //将状态条(StatusBar)附加到一个CDC对象
            CDC dc,SourceDC;
            dc.Attach(lpDrawItemStruct->hDC);

            //得到pane的大小和坐标
            CRect rect(&lpDrawItemStruct->rcItem);

            //将当前位图放入兼容CDC
            SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC
            CBitmap* pOldBitmap = SourceDC.SelectObject(&pBitmap);//选择位图
            dc.BitBlt(rect].left, rect.top, rect.Width(), rect.Height(),
                     &SourceDC, 0, 0, SRCCOPY);//BitBlt
            SourceDC.SelectObject(pOldBitmap);//删除CDC中所选择的位图
            pBitmap.DeleteObject();//删除位图

            //将状态条(StatusBar)与CDC对象分离,否则hDC将会在CDC废弃时被删除
            dc.Detach();

            return;
        }
        CStatusBar::DrawItem(lpDrawItemStruct);
    }
#endif

  1. 在Mainfrm.cppCMainFrame::OnCreate()中加入下面的代码

//Mainfrm.cpp

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){...
    if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))){
    TRACE0("Failed to create status bar/n");
    return -1;      // fail to create
    }
   //加入下列代码
   #if _MFC_VER >= 0x400
      UINT nID, nStyle;
      int cxWidth;

      m_wndStatusBar.GetPaneInfo(1, nID, nStyle, cxWidth);
      m_wndStatusBar.SetPaneInfo(1, nID, nStyle | SBT_OWNERDRAW, cxWidth);
   #endif
...}

qt中的状态栏的使用

将qlabel添加到状态栏,作为显示信息,     addStatusBar()->addWidget(label)      其提示消息在创建QAction时进行设置 setStatusTip ...
  • u014660247
  • u014660247
  • 2016年09月05日 18:42
  • 326

在macOS Sierra dock栏中增加钥匙串访问

Dock栏就是macOS上的一个快速启动栏。 默认情况下,钥匙串访问不在Dock栏中。 首先打开钥匙串访问,程序的位置 应用程序-实用工具-双击钥匙串访问程序 钥匙串访问就会出现在dock栏中。右...
  • freehome_2311
  • freehome_2311
  • 2017年06月03日 07:57
  • 323

javascript状态栏文字由左端弹出

var msg="欢迎来到本站,谢谢! "; var len=msg.length; var x=0; var interval=200; function scroll(){ window.sta...
  • hanshileiai
  • hanshileiai
  • 2013年07月12日 18:41
  • 680

跑 马 灯 效 果,状态栏的字一个一个出来(javascript)

var msg="欢迎光临  欢迎光临  欢迎光临";//声明一个变量。var interval = 300;//声明一个变量,设置一个时间间隔为300毫秒。seq = 0;//赋给seq初值为0。f...
  • zhaoxiaoyang5156
  • zhaoxiaoyang5156
  • 2007年07月15日 09:16
  • 2029

在窗体的标题栏中加入按钮

unit unit1; interface uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Di...
  • Trassion
  • Trassion
  • 2012年02月22日 15:43
  • 836

VS2010中创建C#的位图(BitMap)的方法与步骤

C#位图与图标的制作方法:1.方法1:右击项目创建位图: ①右击项目名称,从弹出的右键菜单中,选择“添加(D)”,选择“资源字典(R)…; ②在弹出的窗口中找到位图文件,并在下面添加位图名称,点击...
  • xiefei20098648
  • xiefei20098648
  • 2017年03月20日 16:09
  • 1133

VC2008在CMFCToolBar工具栏中加入组合框

VC2008在CMFCToolBar工具栏中加入组合框2011-01-16 18:54http://hi.baidu.com/zll2117/blog/item/80792e0fe5ce3ad87bc...
  • ding_net
  • ding_net
  • 2011年07月20日 14:57
  • 638

VC++2010在CMFCToolBar工具栏中加入组合框

如何在CMFCToolBar工具栏中加入组合框等控件,且先看在线MSDN上怎么说的: To add a combo box button to a toolbar, follow these s...
  • dxy408460910
  • dxy408460910
  • 2015年03月11日 10:24
  • 342

在状态栏上显示鼠标当前位置

想要获取鼠标的当前位置,就需要捕获它。这里需要注意的是:视类窗口始终覆盖在框架类窗口之上,所以如果想要捕获与鼠标相关的消息,应该在视类中完成。因此,我们可以为CstyleView类添加WM_MOUSE...
  • Narvik
  • Narvik
  • 2013年05月07日 10:15
  • 544

在网页标题栏中加入图标

在标签下面加入
  • Sbangm
  • Sbangm
  • 2011年11月06日 09:04
  • 509
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在状态栏中加入BitMap
举报原因:
原因补充:

(最多只允许输入30个字)