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

📄 chap7_5.htm

📁 着重介绍基于C++的web编程技术
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>7.5不使用串行化的文档视结构程序</title>
</head>

<body link="#3973DE" alink="#3973DE">
<font SIZE="5"><b><div align="center"><center>

<table border="0" width="615" cellspacing="0" cellpadding="0">
  <tr>
    </b><td><div align="center"><center><table border="0" width="615" cellpadding="0" cellspacing="0" height="20">
      <tr>
        <td width="377" bgcolor="#15397D" height="20"></td>
        <td width="238" bgcolor="#000000" height="20"><p align="right"></font><span style="text-decoration: none"><a href="../../index.htm"><font color="#FFFFFF">电脑报Visual 
        C++网络教程</font></a></span></td>
      </tr>
    </table>
    </center></div><font FACE="Times New Roman" SIZE="4"><b><p ALIGN="CENTER"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="4">7.5</font><font SIZE="4" color="#3973DE">不使用串行化的文档视结构程序</font><font FACE="Times New Roman" SIZE="3"></p>
    <p></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">DIBLOOK</font><font SIZE="3">(见</font><font FACE="Times New Roman" SIZE="3">SAMPLES\MFC\GENERAL\DIBLOOK</font><font SIZE="3">目录),它是一个位图显示程序,演示了在不使用串行化的情况下实现文档的输入输出功能。有关位图、调色板的使用在第十一章有详细介绍,这里只讨论与文档视结构相关的内容。我们先看</font><font FACE="Times New Roman" SIZE="3">DIBLOOK</font><font SIZE="3">的文档声明和定义。<b></p>
    <p>清单</font><font FACE="Times New Roman" SIZE="3">7-16 CDibDoc</font><font SIZE="3">的类声明文件</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p>// dibdoc.h : interface of the CDibDoc class</p>
    <p>#include &quot;dibapi.h&quot;</p>
    <p>class CDibDoc : public CDocument</p>
    <p>{</p>
    <p>protected: // create from serialization only</p>
    <p>CDibDoc();</p>
    <p>DECLARE_DYNCREATE(CDibDoc)</p>
    <p>// Attributes</p>
    <p>public:</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>HDIB GetHDIB() const</p>
    <p>{ return m_hDIB; }</p>
    <p>CPalette* GetDocPalette() const</p>
    <p>{ return m_palDIB; }</p>
    <p>CSize GetDocSize() const</p>
    <p>{ return m_sizeDoc; }</p>
    <p>// Operations</p>
    <p>public:</p>
    <p>void ReplaceHDIB(HDIB hDIB);</p>
    <p>void InitDIBData();</b></p>
    <p>// Implementation</p>
    <p>protected:</p>
    <p>virtual ~CDibDoc();</p>
    <p>virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);</p>
    <p>virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);</p>
    <p>protected:</p>
    <p>HDIB m_hDIB;</p>
    <p>CPalette* m_palDIB;</p>
    <p>CSize m_sizeDoc;</p>
    <p>#ifdef _DEBUG</p>
    <p>virtual void AssertValid() const;</p>
    <p>virtual void Dump(CDumpContext&amp; dc) const;</p>
    <p>#endif</p>
    <p>protected:</p>
    <p>virtual BOOL OnNewDocument();</p>
    <p>// Generated message map functions</p>
    <p>protected:</p>
    <p>//{{AFX_MSG(CDibDoc)</p>
    <p>//}}AFX_MSG</p>
    <p>DECLARE_MESSAGE_MAP()</p>
    <p>};</p>
    <p>/////////////////////////////////////////////////////////////////////////////</font><b><font SIZE="3"></p>
    <p>清单</font><font FACE="Times New Roman" SIZE="3">7-17 CDibDoc</font><font SIZE="3">类的实现文件</font></b><font FACE="Times New Roman" SIZE="3"></p>
    <p>// dibdoc.cpp : implementation of the CDibDoc class</p>
    <p>#include &quot;stdafx.h&quot;</p>
    <p>#include &quot;diblook.h&quot;</p>
    <p>#include &lt;limits.h&gt;</p>
    <p>#include &quot;dibdoc.h&quot;</p>
    <p>#ifdef _DEBUG</p>
    <p>#undef THIS_FILE</p>
    <p>static char BASED_CODE THIS_FILE[] = __FILE__;</p>
    <p>#endif</p>
    <p>/////////////////////////////////////////////////////////////////////////////</p>
    <p>// CDibDoc</p>
    <p>IMPLEMENT_DYNCREATE(CDibDoc, CDocument)</p>
    <p>BEGIN_MESSAGE_MAP(CDibDoc, CDocument)</p>
    <p>//{{AFX_MSG_MAP(CDibDoc)</p>
    <p>//}}AFX_MSG_MAP</p>
    <p>END_MESSAGE_MAP()</p>
    <p>/////////////////////////////////////////////////////////////////////////////</p>
    <p>// CDibDoc construction/destruction</p>
    <p>CDibDoc::CDibDoc()</p>
    <p>{</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>//</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>m_hDIB = NULL;</p>
    <p>m_palDIB = NULL;</p>
    <p>m_sizeDoc = CSize(1,1); // dummy value to make CScrollView happy</b></p>
    <p>}</p>
    <p>CDibDoc::~CDibDoc()</p>
    <p>{</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>if (m_hDIB != NULL)</p>
    <p>{</p>
    <p>::GlobalFree((HGLOBAL) m_hDIB);</p>
    <p>}</p>
    <p>if (m_palDIB != NULL)</p>
    <p>{</p>
    <p>delete m_palDIB;</p>
    <p>}</b></p>
    <p>}</p>
    <p>BOOL CDibDoc::OnNewDocument()</p>
    <p>{</p>
    <p>if (!CDocument::OnNewDocument())</p>
    <p>return FALSE;</p>
    <p>return TRUE;</p>
    <p>}</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>void CDibDoc::InitDIBData()</p>
    <p>{</p>
    <p>if (m_palDIB != NULL)</p>
    <p>{</p>
    <p>delete m_palDIB;</p>
    <p>m_palDIB = NULL;</p>
    <p>}</p>
    <p>if (m_hDIB == NULL)</p>
    <p>{</p>
    <p>return;</p>
    <p>}</p>
    <p>// Set up document size</p>
    <p>LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);</p>
    <p>if (::DIBWidth(lpDIB) &gt; INT_MAX ||::DIBHeight(lpDIB) &gt; INT_MAX)</p>
    <p>{</p>
    <p>::GlobalUnlock((HGLOBAL) m_hDIB);</p>
    <p>::GlobalFree((HGLOBAL) m_hDIB);</p>
    <p>m_hDIB = NULL;</p>
    <p>CString strMsg;</p>
    <p>strMsg.LoadString(IDS_DIB_TOO_BIG);</p>
    <p>MessageBox(NULL, strMsg, NULL, MB_ICONINFORMATION | MB_OK);</p>
    <p>return;</p>
    <p>}</p>
    <p>m_sizeDoc = CSize((int) ::DIBWidth(lpDIB), (int) ::DIBHeight(lpDIB));</p>
    <p>::GlobalUnlock((HGLOBAL) m_hDIB);</p>
    <p>// Create copy of palette</p>
    <p>m_palDIB = new CPalette;</p>
    <p>if (m_palDIB == NULL)</p>
    <p>{</p>
    <p>// we must be really low on memory</p>
    <p>::GlobalFree((HGLOBAL) m_hDIB);</p>
    <p>m_hDIB = NULL;</p>
    <p>return;</p>
    <p>}</p>
    <p>if (::CreateDIBPalette(m_hDIB, m_palDIB) == NULL)</p>
    <p>{</p>
    <p>// DIB may not have a palette</p>
    <p>delete m_palDIB;</p>
    <p>m_palDIB = NULL;</p>
    <p>return;</p>
    <p>}</p>
    <p>}</b></p>
    <p></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>BOOL CDibDoc::OnOpenDocument(LPCTSTR lpszPathName)</p>
    <p>{</p>
    <p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
    <p>CFile file;</p>
    <p>CFileException fe;</p>
    <p>if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &amp;fe))</p>
    <p>{</p>
    <p>ReportSaveLoadException(lpszPathName, &amp;fe,</p>
    <p>FALSE, AFX_IDP_FAILED_TO_OPEN_DOC);</p>
    <p>return FALSE;</p>
    <p>}</p>

⌨️ 快捷键说明

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