Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14497324
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:52:29

下载本文示例代码
??   MFC应用程序中的状态条可以很方便的显示应用程序的状态,有时需要用Bitmap位图显示程序状态,但是MFC的CStatusBar类只直接支持显示文本,并不支持图形。本文以实例说明了如何在状态条中加入Bitmap位图。本文内容适用于Microsoft Visual C 1.0/2.0/2.1/2.2/4.0/4.1所包含的Microsoft Foundation Classes(MFC)   以下将详细说明如何在状态条的第一个方块中显示Bitmap位图。   1. 首先在图形编辑器中生成一个位图,或从外部文件中加载一个位图资源到应用程序中,并标识其为IDB_BITMAP1。   2. 在状态条中加入一个新的方块。   在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, };   3. 从CstatuBar派生一个新类CbitmapStatusBar,并且用这个新类取代CmainFrame中的CstatuBar //Mainfrm.h //CstatusBar m_wndStatusBar; CbitmapStatusBar m_wndStatuBar;   4. 在新类的.h和.cpp中加入下面两个函数的声明和定义 //BitmapStatusBar.h class CMyStatusBar:public CStatusBar {... #if_MFC_VER $#@60;0x400 virtual void DoPaint(CDC*pDC); #else virtual void DrawItem(LPDRAWITEMSTRUCT 1pDrawItemStruct); #endif ...} //BitmapStatusBar.cpp #if_MFC_VER$#@60;0x400 void CBitampStatusBar::DoPaint(CDC*pDC) { CRect rect; GetItemRect(1,&rect);//得到pane的大小 pDC-$#@62;ExcludeClipRect(&rect);//创建新的裁剪区域 CStatusBar::DoPaint(pDC);//描绘状态条(status bar)的其余部分 CRgn paneRgn; paneRgn.CreateRectRgnIndirect(rect); pDC-$#@62;SelectClipRgn(&paneRgn);//选择裁剪区域 CBitmap pBitmap; //加载位图,使用Import从文件加载资源,可以不受调色板限制 pBitmap.LoadBi p(IDB_BITMAP1); //将当前位图放入兼容CDC CDC SourceDC; SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC CBitmap*pOldBitmap=SourceDC.SelectObject(&pBitmap);//选择位图 pDC-$#@62;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 1pDrawItemStruct) { switch(1pDrawItemStruct-$#@62;itemID) { case 1: //从资源中选择位图 CBitmap pBitmap; //加载位图,使用Import从文件加载资源,可以不受调色板限制 pBitmap.LoadBitmap(IDB_BITMAP1); //将状态条(StatusBar)附加到一个CDC对象 CDC dc,SourceDC; dc.Attach(1pDrawItemStruct-$#@62;hDC); //得到pane的大小和坐标 CRect rect(&1pDrawItemStruct-$#@62;rcItem); //将当前位图放入兼容CDC SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC CBitmap*pOldBitmap=SourceDC.SelectObject(&pBitmap);//选择位图 dc.BitBlt(rect].left,rect.Width(),rect.Height(), &SourceDC,0,0,SRCCOPY);//BitBlt SourceDC.SelectObject(pOldBitmap);//删除CDC中所选择的位图 pBitmap.DeleteObject();//删除位图 //将状态条(StatusBar)与CDC对象分离,否则hDC将会在CDC废弃时被删除 dc.Detach(); return; } CStatusBar::DrawItem(1pDrawItemStruct); } #endif 5. 在Mainfrm.cpp的CMainFrame::OnCreate()函数中加入下面的代码 //Mainfrm.cpp int CMainFrame::OnCreate(LPCREATESTRUCT 1pCreateStruct) {... 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$#@62;=0x400 UINT nID,nStyle; int cxWidth; m_wndStatusBar.GetPaneInfo(1,nID,nStyle,cxWidth); m_wndStatusBar.SetPaneInfo(1,nID,nStyle|SBT_OWNERDRAW,cxWidth); #endif ...}   编译、链接后,运行时在状态条中就出现选定的位图。 ??   MFC应用程序中的状态条可以很方便的显示应用程序的状态,有时需要用Bitmap位图显示程序状态,但是MFC的CStatusBar类只直接支持显示文本,并不支持图形。本文以实例说明了如何在状态条中加入Bitmap位图。本文内容适用于Microsoft Visual C 1.0/2.0/2.1/2.2/4.0/4.1所包含的Microsoft Foundation Classes(MFC)   以下将详细说明如何在状态条的第一个方块中显示Bitmap位图。   1. 首先在图形编辑器中生成一个位图,或从外部文件中加载一个位图资源到应用程序中,并标识其为IDB_BITMAP1。   2. 在状态条中加入一个新的方块。   在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, };   3. 从CstatuBar派生一个新类CbitmapStatusBar,并且用这个新类取代CmainFrame中的CstatuBar //Mainfrm.h //CstatusBar m_wndStatusBar; CbitmapStatusBar m_wndStatuBar;   4. 在新类的.h和.cpp中加入下面两个函数的声明和定义 //BitmapStatusBar.h class CMyStatusBar:public CStatusBar {... #if_MFC_VER $#@60;0x400 virtual void DoPaint(CDC*pDC); #else virtual void DrawItem(LPDRAWITEMSTRUCT 1pDrawItemStruct); #endif ...} //BitmapStatusBar.cpp #if_MFC_VER$#@60;0x400 void CBitampStatusBar::DoPaint(CDC*pDC) { CRect rect; GetItemRect(1,&rect);//得到pane的大小 pDC-$#@62;ExcludeClipRect(&rect);//创建新的裁剪区域 CStatusBar::DoPaint(pDC);//描绘状态条(status bar)的其余部分 CRgn paneRgn; paneRgn.CreateRectRgnIndirect(rect); pDC-$#@62;SelectClipRgn(&paneRgn);//选择裁剪区域 CBitmap pBitmap; //加载位图,使用Import从文件加载资源,可以不受调色板限制 pBitmap.LoadBi p(IDB_BITMAP1); //将当前位图放入兼容CDC CDC SourceDC; SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC CBitmap*pOldBitmap=SourceDC.SelectObject(&pBitmap);//选择位图 pDC-$#@62;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 1pDrawItemStruct) { switch(1pDrawItemStruct-$#@62;itemID) { case 1: //从资源中选择位图 CBitmap pBitmap; //加载位图,使用Import从文件加载资源,可以不受调色板限制 pBitmap.LoadBitmap(IDB_BITMAP1); //将状态条(StatusBar)附加到一个CDC对象 CDC dc,SourceDC; dc.Attach(1pDrawItemStruct-$#@62;hDC); //得到pane的大小和坐标 CRect rect(&1pDrawItemStruct-$#@62;rcItem); //将当前位图放入兼容CDC SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC CBitmap*pOldBitmap=SourceDC.SelectObject(&pBitmap);//选择位图 dc.BitBlt(rect].left,rect.Width(),rect.Height(), &SourceDC,0,0,SRCCOPY);//BitBlt SourceDC.SelectObject(pOldBitmap);//删除CDC中所选择的位图 pBitmap.DeleteObject();//删除位图 //将状态条(StatusBar)与CDC对象分离,否则hDC将会在CDC废弃时被删除 dc.Detach(); return; } CStatusBar::DrawItem(1pDrawItemStruct); } #endif 5. 在Mainfrm.cpp的CMainFrame::OnCreate()函数中加入下面的代码 //Mainfrm.cpp int CMainFrame::OnCreate(LPCREATESTRUCT 1pCreateStruct) {... 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$#@62;=0x400 UINT nID,nStyle; int cxWidth; m_wndStatusBar.GetPaneInfo(1,nID,nStyle,cxWidth); m_wndStatusBar.SetPaneInfo(1,nID,nStyle|SBT_OWNERDRAW,cxWidth); #endif ...}   编译、链接后,运行时在状态条中就出现选定的位图。 下载本文示例代码


如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图如何在应用程序状态条中加入Bitmap位图
阅读(79) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~