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

📄 chap11_4.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
📖 第 1 页 / 共 4 页
字号:
    <p ALIGN="JUSTIFY">LPSTR pRes;</p>
    <p ALIGN="JUSTIFY">HGLOBAL hRes;</p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">搜寻指定的资源</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">hFindRes = ::FindResource(hResInst, MAKEINTRESOURCE(nID), RT_BITMAP);</p>
    <p ALIGN="JUSTIFY">if (hFindRes == NULL) return FALSE;</p>
    <p ALIGN="JUSTIFY">hRes = ::LoadResource(hResInst, hFindRes); //</font><font SIZE="3">载入位图资源</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">if (hRes == NULL) return FALSE;</p>
    <p ALIGN="JUSTIFY">DWORD dwSize=::SizeofResource(hResInst,hFindRes);</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwSize);</p>
    <p ALIGN="JUSTIFY">if (hDIB == NULL) return FALSE;</p>
    <p ALIGN="JUSTIFY">pDIB = (LPSTR)::GlobalLock((HGLOBAL)hDIB);</p>
    <p ALIGN="JUSTIFY">pRes = (LPSTR) ::LockResource(hRes);</p>
    <p ALIGN="JUSTIFY">memcpy(pDIB, pRes, dwSize); //</font><font SIZE="3">把</font><font FACE="Times New Roman" SIZE="3">hRes</font><font SIZE="3">中的内容复制</font><font FACE="Times New Roman" SIZE="3">hDIB</font><font SIZE="3">中</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">::GlobalUnlock((HGLOBAL) hDIB);</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">DeleteDIB();</p>
    <p ALIGN="JUSTIFY">m_hDIB=hDIB;</p>
    <p ALIGN="JUSTIFY">m_palDIB = new CPalette;</p>
    <p ALIGN="JUSTIFY">if (::CreateDIBPalette(m_hDIB, m_palDIB) == NULL)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">// DIB</font><font SIZE="3">有可能没有调色板</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">delete m_palDIB;</p>
    <p ALIGN="JUSTIFY">m_palDIB = NULL;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY">return TRUE;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">int CDib::Width()</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">if(m_hDIB==NULL) return 0;</p>
    <p ALIGN="JUSTIFY">LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);</p>
    <p ALIGN="JUSTIFY">int cxDIB = (int) ::DIBWidth(lpDIB); // Size of DIB - x</p>
    <p ALIGN="JUSTIFY">::GlobalUnlock((HGLOBAL) m_hDIB);</p>
    <p ALIGN="JUSTIFY">return cxDIB;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">int CDib::Height()</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">if(m_hDIB==NULL) return 0;</p>
    <p ALIGN="JUSTIFY">LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);</p>
    <p ALIGN="JUSTIFY">int cyDIB = (int) ::DIBHeight(lpDIB); // Size of DIB - y</p>
    <p ALIGN="JUSTIFY">::GlobalUnlock((HGLOBAL) m_hDIB);</p>
    <p ALIGN="JUSTIFY">return cyDIB;</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">显示</font><font FACE="Times New Roman" SIZE="3">DIB</font><font SIZE="3">,该函数具有缩放功能</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//</font><font SIZE="3">参数</font><font FACE="Times New Roman" SIZE="3">x</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">y</font><font SIZE="3">说明了目的矩形的左上角坐标,</font><font FACE="Times New Roman" SIZE="3">cx</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">cy</font><font SIZE="3">说明了目的矩形的尺寸</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">//cx</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">cy</font><font SIZE="3">若有一个为</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">则该函数按</font><font FACE="Times New Roman" SIZE="3">DIB</font><font SIZE="3">的实际大小绘制,</font><font FACE="Times New Roman" SIZE="3">cx</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">cy</font><font SIZE="3">的缺省值是</font><font FACE="Times New Roman" SIZE="3">0</p>
    <p ALIGN="JUSTIFY">BOOL CDib::Draw(CDC *pDC, int x, int y, int cx, int cy)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">if(m_hDIB==NULL) return FALSE;</p>
    <p ALIGN="JUSTIFY">CRect rDIB,rDest;</p>
    <p ALIGN="JUSTIFY">rDest.left=x;</p>
    <p ALIGN="JUSTIFY">rDest.top=x;</p>
    <p ALIGN="JUSTIFY">if(cx==0||cy==0)</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">cx=Width();</p>
    <p ALIGN="JUSTIFY">cy=Height();</p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY">rDest.right=rDest.left+cx;</p>
    <p ALIGN="JUSTIFY">rDest.bottom=rDest.top+cy;</p>
    <p ALIGN="JUSTIFY">rDIB.left=rDIB.top=0;</p>
    <p ALIGN="JUSTIFY">rDIB.right=Width();</p>
    <p ALIGN="JUSTIFY">rDIB.bottom=Height();</p>
    <p ALIGN="JUSTIFY">return 
    ::PaintDIB(pDC-&gt;GetSafeHdc(),&amp;rDest,m_hDIB,&amp;rDIB,m_palDIB);</p>
    <p ALIGN="JUSTIFY">}</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font></b><font color="#3973DE" FACE="Times New Roman" SIZE="3">11.4.3 
    </font><font color="#3973DE"><font SIZE="3">使用</font><font FACE="Times New Roman" SIZE="3">CDib</font><font SIZE="3">类的例子</font></font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">现在让我们来看一个使用</font><font FACE="Times New Roman" SIZE="3">CDib</font><font SIZE="3">类的例子。如图</font><font FACE="Times New Roman" SIZE="3">11.4</font><font SIZE="3">所示,程序名为</font><font FACE="Times New Roman" SIZE="3">ShowDib</font><font SIZE="3">,是一个多文档应用程序,它的功能与</font><font FACE="Times New Roman" SIZE="3">VC</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">DibLook</font><font SIZE="3">例程有些类似,可同时打开和显示多个位图。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="center"><img src="T11_4.jpg" alt="T11_4.jpg (24220 bytes)" WIDTH="447" HEIGHT="337"></p>
    <p ALIGN="center"></font><font SIZE="3">图</font><font FACE="Times New Roman" SIZE="3">11.4 
    </font><font SIZE="3">用</font><font FACE="Times New Roman" SIZE="3">ShowDib</font><font SIZE="3">来显示位图</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">请读者用</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">建立一个名为</font><font FACE="Times New Roman" SIZE="3">ShowDib</font><font SIZE="3">的</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">工程。程序应该用滚动视图来显示较大的位图,所以在</font><font FACE="Times New Roman" SIZE="3">MFC AppWizard</font><font SIZE="3">的第</font><font FACE="Times New Roman" SIZE="3">6</font><font SIZE="3">步应把</font><font FACE="Times New Roman" SIZE="3">CShowDibView</font><font SIZE="3">的基类改为</font><font FACE="Times New Roman" SIZE="3">CScrollView</font><font SIZE="3">。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">由于</font><font FACE="Times New Roman" SIZE="3">ShowDib</font><font SIZE="3">程序要用到</font><font FACE="Times New Roman" SIZE="3">CDib</font><font SIZE="3">类,所以应该把</font><font FACE="Times New Roman" SIZE="3">dibapi.cpp</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">myfile.cpp</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">dibapi.h</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">CDib.cpp</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">CDib.h</font><font SIZE="3">文件拷贝到</font><font FACE="Times New Roman" SIZE="3">ShowDib</font><font SIZE="3">目录下,并选择</font><font FACE="Times New Roman" SIZE="3">Project-&gt;Add to Project-&gt;Files</font><font SIZE="3">命令把这些文件加到</font><font FACE="Times New Roman" SIZE="3">ShowDib</font><font SIZE="3">工程中。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">ShowDib.h</font><font SIZE="3">文件中</font><font FACE="Times New Roman" SIZE="3">CShowDibApp</font><font SIZE="3">类的定义之前加入下面一行:</font><font FACE="Times New Roman" SIZE="3"><b></p>
    <p ALIGN="JUSTIFY">#define WM_DOREALIZE WM_USER+200</b></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">当收到调色板消息时,主框架窗口会发送用户定义的</font><font FACE="Times New Roman" SIZE="3">WM_DOREALIZE</font><font SIZE="3">消息通知视图。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">接下来,需要用</font><font FACE="Times New Roman" SIZE="3">ClassWizard</font><font SIZE="3">为</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">加入</font><font FACE="Times New Roman" SIZE="3">WM_QUERYNEWPALETTE</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">WM_PALETTECHANGED</font><font SIZE="3">消息的处理函数,为</font><font FACE="Times New Roman" SIZE="3">CShowDibDoc</font><font SIZE="3">类加入</font><font FACE="Times New Roman" SIZE="3">OnOpenDocument</font><font SIZE="3">函数。</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3">最后,请读者按清单</font><font FACE="Times New Roman" SIZE="3">11.5</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">11.6</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">11.7</font><font SIZE="3">修改程序。</font><b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">11.5 CMainFrame</font><font SIZE="3">类的部分代码</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">// MainFrm.cpp : implementation of the CMainFrame class</p>
    <p ALIGN="JUSTIFY">void CMainFrame::OnPaletteChanged(CWnd* pFocusWnd) </p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">CMDIFrameWnd::OnPaletteChanged(pFocusWnd);</p>
    <p ALIGN="JUSTIFY">// TODO: Add your message handler code here</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">SendMessageToDescendants(WM_DOREALIZE, 1); //</font><font SIZE="3">通知所有的子窗口</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">BOOL CMainFrame::OnQueryNewPalette() </p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY">// TODO: Add your message handler code here and/or call default</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CMDIChildWnd* pMDIChildWnd = MDIGetActive();</p>
    <p ALIGN="JUSTIFY">if (pMDIChildWnd == NULL)</p>
    <p ALIGN="JUSTIFY">return FALSE; // </font><font SIZE="3">没有活动的</font><font FACE="Times New Roman" SIZE="3">MDI</font><font SIZE="3">子框架窗口</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">CView* pView = pMDIChildWnd-&gt;GetActiveView();</p>
    <p ALIGN="JUSTIFY">pView-&gt;SendMessage(WM_DOREALIZE,0); //</font><font SIZE="3">只通知活动视图</font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">return TRUE; //</font><font SIZE="3">返回</font><font FACE="Times New Roman" SIZE="3">TRUE</font><font SIZE="3">表明实现了逻辑调色板</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">}</p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><b><font SIZE="3"> </p>
    <p ALIGN="JUSTIFY">清单</font><font FACE="Times New Roman" SIZE="3">11.6 CShowDibDoc</font><font SIZE="3">类的部分代码</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">// ShowDibDoc.h : interface of the CShowDibDoc class</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">#include &quot;CDib.h&quot;</b></p>
    <p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY">class CShowDibDoc : public CDocument</p>
    <p ALIGN="JUSTIFY">{</p>
    <p ALIGN="JUSTIFY"><b>. . .</b></p>
    <p ALIGN="JUSTIFY">// Attributes</p>

⌨️ 快捷键说明

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