⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vcc35.htm

📁 SHELL排序算法与应用
💻 HTM
字号:
<html>
<head>
<title>c++系列</title>
 
 
 
 
 
 
 
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
 
 
</head>
<p align="center"><script src="../../1.js"></script></a>

<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center> 
  <table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
    <tbody> 
    <tr> 
      <td width=200 height="59"> 
         
    </tr>
    </tbody> 
  </table>
  <table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0 
cellspacing=0 width=685 align="center" height="70">
    <tbody> 
    <tr> 
      <td bgcolor=#F9D23C height=14> 
        <div align=center class=H1> <b><strong><font face="宋体" size="-1"><span class="unnamed1">如何在应用程序状态条中加入Bitmap位图</span></font></strong></b></font></div>
      </td>
    </tr>
    <tr valign=top> 
      <td class=H1 height=212> 
        <p align="center"><font color="#FF0000"><strong><font face="宋体" size="-1">  <br>
          </font></span></font>    
          </font></span></font></strong></font></p>
        <p>     <strong><font face="宋体">摘要<br>
            MFC应用程序中的状态条可以很方便的显示应用程序的状态,有时需要用Bitmap位图显示程序状态,但是MFC的CStatusBar类只直接支持显示文本,并不支持图形。本文以实例说明了如何在状态条中加入Bitmap位图。本文内容适用于Microsoft 
          Visual C++ 1.0/2.0/2.1/2.2/4.0/4.1所包含的Microsoft Foundation Classes(MFC)<br>
          <br>
            以下将详细说明如何在状态条的第一个方块中显示Bitmap位图。<br>
          <br>
            1. 首先在图形编辑器中生成一个位图,或从外部文件中加载一个位图资源到应用程序中,并标识其为IDB_BITMAP1。<br>
          <br>
            2. 在状态条中加入一个新的方块。<br>
          <br>
            在Mainfrm.cpp中加入下列语句<br>
          <br>
          //Mainfrm.cpp<br>
          <br>
          static UINT indicators[]=<br>
          <br>
          {<br>
          <br>
          ID_SEPARATOR,//status line indicator<br>
          <br>
          ID_INDICATOR_BITMAP, //BITMAP状态条<br>
          <br>
          ID_INDICATOR_CAPS,<br>
          <br>
          ID_INDICATOR_NUM,<br>
          <br>
          ID_INDICATOR_SCRL,<br>
          <br>
          };<br>
          <br>
            3. 从CstatuBar派生一个新类CbitmapStatusBar,并且用这个新类取代CmainFrame中的CstatuBar<br>
          <br>
          //Mainfrm.h<br>
          <br>
          //CstatusBar m_wndStatusBar;<br>
          <br>
          CbitmapStatusBar m_wndStatuBar;<br>
          <br>
            4. 在新类的.h和.cpp中加入下面两个函数的声明和定义<br>
          <br>
          //BitmapStatusBar.h<br>
          <br>
          class CMyStatusBar:public CStatusBar {...<br>
          <br>
          #if_MFC_VER ?x400<br>
          <br>
          virtual void DoPaint(CDC*pDC);<br>
          <br>
          #else<br>
          <br>
          virtual void DrawItem(LPDRAWITEMSTRUCT 1pDrawItemStruct);<br>
          <br>
          #endif<br>
          <br>
          ...}<br>
          <br>
          //BitmapStatusBar.cpp<br>
          <br>
          #if_MFC_VER?x400<br>
          <br>
          void CBitampStatusBar::DoPaint(CDC*pDC)<br>
          <br>
          {<br>
          <br>
          CRect rect;<br>
          <br>
          GetItemRect(1,&amp;rect);//得到pane的大小<br>
          <br>
          pDC-&gt;ExcludeClipRect(&amp;rect);//创建新的裁剪区域<br>
          <br>
          CStatusBar::DoPaint(pDC);//描绘状态条(status bar)的其余部分<br>
          <br>
          CRgn paneRgn;<br>
          <br>
          paneRgn.CreateRectRgnIndirect(rect);<br>
          <br>
          pDC-&gt;SelectClipRgn(&amp;paneRgn);//选择裁剪区域<br>
          <br>
          CBitmap pBitmap;<br>
          <br>
          //加载位图,使用Import从文件加载资源,可以不受调色板限制<br>
          <br>
          pBitmap.LoadBitmap(IDB_BITMAP1);<br>
          <br>
          //将当前位图放入兼容CDC<br>
          <br>
          CDC SourceDC;<br>
          <br>
          SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC<br>
          <br>
          CBitmap*pOldBitmap=SourceDC.SelectObject(&amp;pBitmap);//选择位图<br>
          <br>
          pDC-&gt;BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),<br>
          <br>
          &amp;SourceDC,0,0,SRCCOPY);//BitBlt<br>
          <br>
          SourceDC.SelectObject(pOldBitmap);//删除CDC中所选择的位图<br>
          <br>
          pBitmap.DeleteObject();//删除位图<br>
          <br>
          }<br>
          <br>
          #else<br>
          <br>
          void CBitmapStatusBar::DrawItem(LPDRAWITEMSTRUCT 1pDrawItemStruct)<br>
          <br>
          {<br>
          <br>
          switch(1pDrawItemStruct-&gt;itemID)<br>
          <br>
          {<br>
          <br>
          case 1:<br>
          <br>
          //从资源中选择位图<br>
          <br>
          CBitmap pBitmap;<br>
          <br>
          //加载位图,使用Import从文件加载资源,可以不受调色板限制<br>
          <br>
          pBitmap.LoadBitmap(IDB_BITMAP1);<br>
          <br>
          //将状态条(StatusBar)附加到一个CDC对象<br>
          <br>
          CDC dc,SourceDC;<br>
          <br>
          dc.Attach(1pDrawItemStruct-&gt;hDC);<br>
          <br>
          //得到pane的大小和坐标<br>
          <br>
          CRect rect(&amp;1pDrawItemStruct-&gt;rcItem);<br>
          <br>
          //将当前位图放入兼容CDC<br>
          <br>
          SourceDC.CreateCompatibleDC(NULL);//生成兼容的CDC<br>
          <br>
          CBitmap*pOldBitmap=SourceDC.SelectObject(&amp;pBitmap);//选择位图<br>
          <br>
          dc.BitBlt(rect].left,rect.Width(),rect.Height(),<br>
          <br>
          &amp;SourceDC,0,0,SRCCOPY);//BitBlt<br>
          <br>
          SourceDC.SelectObject(pOldBitmap);//删除CDC中所选择的位图<br>
          <br>
          pBitmap.DeleteObject();//删除位图<br>
          <br>
          //将状态条(StatusBar)与CDC对象分离,否则hDC将会在CDC废弃时被删除<br>
          <br>
          dc.Detach();<br>
          <br>
          return;<br>
          <br>
          }<br>
          <br>
          CStatusBar::DrawItem(1pDrawItemStruct);<br>
          <br>
          }<br>
          <br>
          #endif<br>
          <br>
          5. 在Mainfrm.cpp的CMainFrame::OnCreate()函数中加入下面的代码<br>
          <br>
          //Mainfrm.cpp<br>
          <br>
          int CMainFrame::OnCreate(LPCREATESTRUCT 1pCreateStruct)<br>
          <br>
          {...<br>
          <br>
          if(!m_wndStatusBar.Create(this)||!m_wndStatusBar.SetIndicators(indicators,sizeof(indicators)/sizeof(UINT)))<br>
          <br>
          {<br>
          <br>
          TRACE0(“Failed to create status bar\n”);<br>
          <br>
          return-1;//fail to create<br>
          <br>
          }<br>
          <br>
          //加入下列代码<br>
          <br>
          #if_MFC_VER&gt;=0x400<br>
          <br>
          UINT nID,nStyle;<br>
          <br>
          int cxWidth;<br>
          <br>
          m_wndStatusBar.GetPaneInfo(1,nID,nStyle,cxWidth);<br>
          <br>
          m_wndStatusBar.SetPaneInfo(1,nID,nStyle|SBT_OWNERDRAW,cxWidth);<br>
          <br>
          #endif<br>
          <br>
          ...}<br>
          <br>
            编译、链接后,运行时在状态条中就出现选定的位图。 </font></strong></span></font></span></span></span></p>
        <p>     <strong> 洪涛 
          张芝霞&middot;popcool开发专区</font></strong> </span></font></span></span></span>
        <p align="center"> <font 
      color=#ffa000><b></b></font></span><font 
      color=#ffa000><b><br>
                                                      
      </td>
    </tr>
    </tbody> 
  </table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -