亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? chap8_3.htm

?? VC++編程實例。非常詳細(xì)
?? HTM
?? 第 1 頁 / 共 3 頁
字號:
<html>

<head>
<title>8.3 繪圖程序</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<link rel="stylesheet" href="../../../cpcw.css"></head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<div align="center"><center>
    <table width="85%" border="0">
      <tr bgcolor="#FFFFFF"> 
        <td> 
          <div align="center"> </div>
          <p align="CENTER"><b><font color="red">8.3 繪圖程序</font></b></p>
          <p> 在了解GDI的一些基本知識之后,我們就可以著手編寫繪圖程序了。這個繪圖程序可以讓讀者用鼠標(biāo)器在窗口內(nèi)任意涂寫,并可以保存所畫的內(nèi)容。這里我們參考了Visual 
            C++的例子Scribble,并作了一些修改和簡化。</p>
          <p> 8.3.1 MDI應(yīng)用程序框架</p>
          <p> 首先用AppWizard生成繪圖程序的基本框架:</p>
          <p> 選擇File-&gt;New,彈出New對話框,選擇MFC 
            AppWizard(exe),并指定項目文件名為Draw。</p>
          <p> 在MFC 
            AppWizard-Step1對話框中指定框架類型為Multiple 
            Document(多文檔,這是缺省設(shè)置)。</p>
          <p> Step2,3按缺省值。在MFC AppWizard Step 4 of 6對話框中,點“Advanced...”按鈕,彈出Advanced 
            Options對話框。在File Extension編輯框中指定文件名后綴為.drw,按OK關(guān)閉Advanced 
            Options對話框。</p>
          <p> Step5按缺省設(shè)置。在MFC 
            AppWizard Step 6 of 6中,在應(yīng)用程序所包含的類列表中選擇CDrawView,并為其指定基類為CScrollView,因為繪圖程序需要卷滾文檔。現(xiàn)在點Finish按鈕生成繪圖所需的應(yīng)用程序框架。</p>
          <p> 在往框架里添加代碼實現(xiàn)繪圖程序之前,先看看多文檔框架與單文檔框架的差別。</p>
          <p> AppWizard為多文檔框架創(chuàng)建了以下類: 
            </p>
          <p> CAboutDlg:“關(guān)于”對話框</p>
          <p> CChildFrame:子框架窗口,用于容納視圖</p>
          <p> CDrawApp:應(yīng)用程序類</p>
          <p> CDrawDoc:繪圖程序視圖類</p>
          <p> CDrawView:繪圖視圖類</p>
          <p> CMainFrame:主框架窗口,用來容納子窗口,它是多文檔應(yīng)用程序的主窗口。</p>
          <p> 在生成的類上,MDI比SDI多了一個CChildFrame子框架窗口類,而且CMainFrame的職責(zé)也不同了。</p>
          <p> 另外,MDI和SDI在初始化應(yīng)用程序?qū)嵗弦灿兴煌DI應(yīng)用程序InitInstance函數(shù)如清單8.2定義。</p>
          
          <p> <b>清單</b><b>8.2 
            多文檔程序的InitInstance成員函數(shù)定義</b></p>
           
          <p>BOOL CDrawApp::InitInstance()</p>
          <p>{</p>
          
          <p>//一些初始化工作......</p>
           
          <p>// Register the application's document templates. Document templates</p>
          <p>// serve as the connection between documents, frame windows and views.</p>
          <p>CMultiDocTemplate* pDocTemplate;</p>
          <p>pDocTemplate = new CMultiDocTemplate(</p>
          <p>IDR_DRAWTYPE,</p>
          <p>RUNTIME_CLASS(CDrawDoc),</p>
          <p>RUNTIME_CLASS(CChildFrame), // custom MDI child frame</p>
          <p>RUNTIME_CLASS(CDrawView));</p>
          <p>AddDocTemplate(pDocTemplate);</p>
          <p>// create main MDI Frame window</p>
          <p>CMainFrame* pMainFrame = new CMainFrame;</p>
          <p>if (!pMainFrame-&gt;LoadFrame(IDR_MAINFRAME))</p>
          <p>return FALSE;</p>
          <p>m_pMainWnd = pMainFrame;</p>
          <p>// Enable drag/drop open</p>
          <p>m_pMainWnd-&gt;DragAcceptFiles();</p>
          <p>// Enable DDE Execute open</p>
          <p>EnableShellOpen();</p>
          <p>RegisterShellFileTypes(TRUE);</p>
          <p>// Parse command line for standard shell commands, DDE, file open</p>
          <p>CCommandLineInfo cmdInfo;</p>
          <p>ParseCommandLine(cmdInfo);</p>
          <p>// Dispatch commands specified on the command line</p>
          <p>if (!ProcessShellCommand(cmdInfo))</p>
          <p>return FALSE;</p>
          <p>// The main window has been initialized, so show and update it.</p>
          <p>pMainFrame-&gt;ShowWindow(m_nCmdShow);</p>
          <p>pMainFrame-&gt;UpdateWindow();</p>
          <p>return TRUE;</p>
          <p>}</p>
          
          <p>在注冊文檔模板時,首先創(chuàng)建一個CMultiDocTemplate類型(在SDI下是CSingleDocTemplate)的模板對象,然后用AddDocTemplate()把它加入到文檔模板鏈表中去。</p>
          <p> CMultiDocTemplate構(gòu)造函數(shù)帶四個參數(shù),第一個參數(shù)是文檔使用的資源ID定義。第二個是文檔類型,第三個是子窗口類型,第四個是視圖類型。</p>
          <p> 與SDI不同,由于MDI的主框架窗口并不直接與文檔相對應(yīng),因此無法通過創(chuàng)建文檔來創(chuàng)建主框架窗口,而需要自己去創(chuàng)建。</p>
          <p> //定義一個主窗口類指針,并創(chuàng)建一個窗口的空的實例</p>
           
          <p>CMainFrame* pMainFrame = new CMainFrame;</p>
          
          <p>//從資源文件中載入菜單、圖標(biāo)等信息,并創(chuàng)建窗口</p>
           
          <p>if (!pMainFrame-&gt;LoadFrame(IDR_MAINFRAME))</p>
          <p>return FALSE;</p>
          
          <p>//將應(yīng)用程序?qū)ο蟮闹鞔翱谥羔様?shù)據(jù)成員設(shè)為當(dāng)前創(chuàng)建的窗口</p>
           
          <p>m_pMainWnd = pMainFrame;</p>
          
          <p><b> </b></p>
          <p><b> </b>8.3.2 設(shè)計繪圖程序的文檔類</p>
          <p> Draw需要保存用戶在屏幕上涂寫的每一個筆劃。一副畫由許多筆劃組成,可以把它看作是筆劃組成的鏈表。每一個筆劃可以看作一個對象,它由許多點組成。這樣,我們可以把繪圖文檔的數(shù)據(jù)看作是筆劃對象CStroke組成的鏈表。另外,我們還需要一些數(shù)據(jù)成員表示當(dāng)前畫圖所使用的畫筆和畫筆的寬度。</p>
          <p> 修改后的文檔類聲明文件如清單8-1:</p>
          
          <p> <b>清單</b><b>8.3文檔類聲明</b></p>
           
          <p>// DrawDoc.h : interface of the CDrawDoc class</p>
          <p>//</p>
          <p>/////////////////////////////////////////////////////////////////////////////</p>
          <p>#if !defined(AFX_DRAWDOC_H__143330AE_85BC_11D1_9304_444553540000__INCLUDED_)</p>
          <p>#define AFX_DRAWDOC_H__143330AE_85BC_11D1_9304_444553540000__INCLUDED_</p>
          <p>#if _MSC_VER &gt;= 1000</p>
          <p>#pragma once</p>
          <p>#endif // _MSC_VER &gt;= 1000</p>
          
          <p> </p>
           
          <p>class CDrawDoc : public CDocument</p>
          <p>{</p>
          <p>protected: // create from serialization only</p>
          <p>CDrawDoc();</p>
          <p>DECLARE_DYNCREATE(CDrawDoc)</p>
          <p>// Attributes</p>
          
          <p><b> </b></p>
          <b> 
          <p>public:</p>
          <p>UINT m_nPenWidth; // current user-selected pen width</p>
          <p>CPen m_penCur; // pen created according to</p>
          <p>// user-selected pen style (width)</p>
          <p>public:</p>
          <p>CTypedPtrList&lt;CObList,CStroke*&gt; m_strokeList; </p>
          
          <p>//獲取當(dāng)前使用的畫筆,為視圖所使用</p>
           
          <p>CPen* GetCurrentPen() { return &amp;m_penCur; }</p>
          <p>protected:</p>
          <p>CSize m_sizeDoc;</p>
          <p>public:</p>
          <p>CSize GetDocSize() { return m_sizeDoc; }</p>
          <p>// Operations</p>
          <p>public:</p>
          
          <p>//往鏈表里增加一個筆劃</p>
           
          <p>CStroke* NewStroke();</p>
          <p>// Operations</p>
          
          <p>//用于初始化文檔</p>
           
          <p>protected:</p>
          <p>void InitDocument();</p>
          </b> 
          <p>// Overrides</p>
          <p>// ClassWizard generated virtual function overrides</p>
          <p>//{{AFX_VIRTUAL(CDrawDoc)</p>
          <p>public:</p>
          <p>virtual BOOL OnNewDocument();</p>
          <p>virtual void Serialize(CArchive&amp; ar);</p>
          <p>//}}AFX_VIRTUAL</p>
          <p>// Implementation</p>
          <p>public:</p>
          <p>virtual ~CDrawDoc();</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>// Generated message map functions</p>
          <p>protected:</p>
          <p>//{{AFX_MSG(CDrawDoc)</p>
          <p>// NOTE - the ClassWizard will add and remove member functions here.</p>
          <p>// DO NOT EDIT what you see in these blocks of generated code !</p>
          <p>//}}AFX_MSG</p>
          <p>DECLARE_MESSAGE_MAP()</p>
          <p>};</p>
          
          <p> </p>
          <p> 這里我們使用 
            指針鏈表模板來保存指向每個筆劃的指針:</p>
           
          <p>CTypedPtrList&lt;CObList,CStroke*&gt; m_strokeList; </p>
          
          <p>其中“&lt;&gt;”第一個參數(shù)表示鏈表基本類型,第二個參數(shù)代表鏈表中所存放的元素的類型。</p>
          <p> 為了使用模板,還要修改stdafx.h,在其中加入afxtempl..h頭文件,它包含了使用模板時所需的類型定義和宏:</p>
           
          <p>//.........</p>
          <p>#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers</p>
          <p>#include &lt;afxwin.h&gt; // MFC core and standard components</p>
          <p>#include &lt;afxext.h&gt; // MFC extensions</p>
          
          <p><b> </b></p>
          <b> 
          <p>#include &lt;afxtempl.h&gt; // MFC templates</p>
          </b> 
          <p>#include &lt;afxdisp.h&gt; // MFC OLE automation classes</p>
          <p>#ifndef _AFX_NO_AFXCMN_SUPPORT</p>
          <p>#include &lt;afxcmn.h&gt; // MFC support for Windows Common Controls</p>
          <p>#endif // _AFX_NO_AFXCMN_SUPPORT</p>
          <p>//......</p>
          
          <p>由于繪圖程序需要卷滾文檔,因此象前面的編輯那樣,增加一個m_sizeDoc數(shù)據(jù)成員存放文檔的大小。另外,還需要提供一個GetDocSize()來訪問它。NewStroke()用于往鏈表里增加一個筆劃。</p>
          <p> 現(xiàn)在,開始設(shè)計CStroke類。筆劃可以看作由一系列點組成,這樣CStroke可以用一個點的數(shù)組來表示。另外,還需要一些成員函數(shù)來訪問這個數(shù)組。我們還希望筆劃能夠自己繪制自己,并用串行化機制保存自己的數(shù)據(jù)。</p>
          <p> CStroke類定義清單如8.4,我們把它在CDrawDoc類定義之前。</p>
          
          <p> <b>清單</b><b>8.4 
            CStroke類定義</b></p>
           
          <p>class CStroke : public CObject</p>
          <p>{</p>
          <p>public:</p>
          
          <p>CStroke(UINT nPenWidth);//用筆的寬度構(gòu)造一個畫筆</p>
          <p> //用于串行化筆劃對象</p>
           
          <p>protected:</p>
          
          <p>CStroke(); //串行化對象所需的不帶參數(shù)的構(gòu)造函數(shù)</p>
           
          <p>DECLARE_SERIAL(CStroke)</p>
          <p>// Attributes</p>
          <p>protected:</p>
          <p>UINT m_nPenWidth; // one pen width applies to entire stroke</p>
          <p>public:</p>
          
          <p>//用數(shù)組模板類保存筆劃的所有點</p>
           
          <p>CArray&lt;CPoint,CPoint&gt; m_pointArray; // series of connected 
            points</p>
          
          <p>//包圍筆劃所有的點的一個最小矩形,關(guān)于它的作用以后會提到</p>
           
          <p>CRect m_rectBounding; // smallest rect that surrounds all</p>
          <p>// of the points in the stroke</p>
          <p>// measured in MM_LOENGLISH units</p>
          <p>// (0.01 inches, with Y-axis inverted)</p>
          <p>public:</p>
          <p>CRect&amp; GetBoundingRect() { return m_rectBounding; }</p>
          
          <p>//結(jié)束筆劃,計算最小矩形</p>

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区精品欧美日韩一区二区三区 | 欧美性一二三区| 欧美电影精品一区二区| 亚洲精品ww久久久久久p站| 蜜桃av噜噜一区二区三区小说| 成人久久18免费网站麻豆| 3d动漫精品啪啪一区二区竹菊| 国产精品丝袜91| 久久精品国产精品亚洲精品 | 韩国理伦片一区二区三区在线播放| 91丨九色丨国产丨porny| 久久蜜臀中文字幕| 男人的天堂亚洲一区| 欧美日韩中文一区| 国产精品久久看| 国产老女人精品毛片久久| 欧美一级欧美三级在线观看 | 久久99热99| 欧美日韩精品三区| 亚洲综合免费观看高清完整版在线| 丁香激情综合国产| 久久九九久久九九| 激情图区综合网| 日韩一级片在线播放| 亚洲国产成人va在线观看天堂 | 国产一区二区三区四区五区美女 | 国产精品18久久久久| 日韩欧美国产午夜精品| 日产国产欧美视频一区精品| 精品视频色一区| 亚洲国产裸拍裸体视频在线观看乱了| 91在线你懂得| 一区二区三区四区激情| 色屁屁一区二区| 亚洲综合色婷婷| 欧美日韩久久久| 五月综合激情日本mⅴ| 欧美午夜影院一区| 午夜精品久久久久久久99水蜜桃| 欧美在线一二三| 日日骚欧美日韩| 欧美一区二区啪啪| 国产一区视频导航| 国产精品区一区二区三| 9久草视频在线视频精品| 亚洲女同女同女同女同女同69| 91女人视频在线观看| 亚洲综合色噜噜狠狠| 9191久久久久久久久久久| 奇米精品一区二区三区在线观看一| 日韩欧美一级二级三级| 国产麻豆视频精品| 中文字幕在线观看不卡视频| 色狠狠综合天天综合综合| 亚洲伊人伊色伊影伊综合网| 欧美精品久久一区二区三区| 看片的网站亚洲| 久久久久国产精品人| 一本一道综合狠狠老| 日韩精品亚洲一区| 精品久久久网站| 9i看片成人免费高清| 午夜成人在线视频| 国产午夜精品在线观看| 一本色道亚洲精品aⅴ| 美女网站在线免费欧美精品| 亚洲欧洲日韩综合一区二区| 欧美精品丝袜中出| 高清shemale亚洲人妖| 亚洲一区二区三区四区在线免费观看 | 午夜精彩视频在线观看不卡| 精品日韩在线一区| 色哟哟日韩精品| 经典三级一区二区| 亚洲黄色尤物视频| 精品国产凹凸成av人网站| 色嗨嗨av一区二区三区| 激情小说亚洲一区| 亚洲自拍偷拍av| 国产精品无人区| 日韩精品一区二区三区中文不卡 | 国产在线播放一区三区四| 亚洲日本乱码在线观看| 精品裸体舞一区二区三区| 欧洲另类一二三四区| 成人动漫中文字幕| 经典三级视频一区| 日本亚洲视频在线| 一区二区三区四区精品在线视频| 国产午夜精品美女毛片视频| 678五月天丁香亚洲综合网| kk眼镜猥琐国模调教系列一区二区| 蜜桃av噜噜一区| 亚洲高清久久久| 亚洲人精品午夜| 久久久噜噜噜久久中文字幕色伊伊 | 日韩一区二区在线观看视频 | 99精品在线观看视频| 狠狠色2019综合网| 日韩中文字幕一区二区三区| 一区二区三区精品久久久| 亚洲国产精品av| 久久久天堂av| 精品粉嫩超白一线天av| 日韩欧美在线网站| 91精品国产高清一区二区三区 | 久久久99精品免费观看| 欧美成人伊人久久综合网| 91精品欧美一区二区三区综合在 | 99久久久精品| 不卡电影一区二区三区| 成人免费黄色大片| 成人小视频在线| 成人a免费在线看| 成人免费高清视频在线观看| 国产剧情一区二区| 国产成人av电影在线观看| 国产成人综合在线观看| 国产福利一区在线| 国产999精品久久久久久绿帽| 国产一区二区三区免费播放| 激情小说欧美图片| 国产成人精品亚洲午夜麻豆| av在线综合网| 一本色道久久综合精品竹菊| 日本久久电影网| 欧美系列一区二区| 欧美一区二区三区影视| 精品久久一区二区| 亚洲国产高清aⅴ视频| 中文字幕在线不卡| 亚洲一区二区三区四区在线观看 | 亚洲欧美福利一区二区| 亚洲午夜久久久久久久久电影院| 亚洲福中文字幕伊人影院| 免费高清在线一区| 国产成人av电影| 欧美在线观看你懂的| 日韩一区二区电影网| 欧美高清在线视频| 亚洲妇女屁股眼交7| 久久av中文字幕片| 91麻豆免费观看| 91精品欧美综合在线观看最新| 久久日韩粉嫩一区二区三区| 国产精品国产三级国产aⅴ原创| 亚洲自拍另类综合| 精品一区二区成人精品| 成人免费高清在线| 欧美老人xxxx18| 国产欧美1区2区3区| 亚洲自拍偷拍欧美| 国产91精品一区二区麻豆网站 | 亚洲精品伦理在线| 久久精品国产精品亚洲综合| 不卡电影免费在线播放一区| 欧美精品成人一区二区三区四区| 久久久av毛片精品| 亚洲va欧美va国产va天堂影院| 国内一区二区视频| 欧美日韩一区久久| 日本一区二区三区免费乱视频| 亚洲成人在线免费| 成人18精品视频| 欧美成人在线直播| 亚洲成在人线在线播放| 成人免费视频app| 日韩精品一区二区三区swag| 一区二区在线观看免费视频播放| 久久aⅴ国产欧美74aaa| 欧美优质美女网站| 国产精品国产三级国产普通话99 | 成人av在线一区二区三区| 日韩视频在线你懂得| 亚洲欧美一区二区久久| 国产一区二区中文字幕| 日韩一区二区三区四区五区六区| 亚洲桃色在线一区| 成人综合在线视频| 精品国产电影一区二区| 日韩精品视频网| 在线观看区一区二| 综合久久国产九一剧情麻豆| 国产成人午夜视频| 2024国产精品| 美女精品自拍一二三四| 欧美二区乱c少妇| 亚洲午夜激情av| 91黄色激情网站| 亚洲精品免费视频| 99久久免费视频.com| 国产精品国产三级国产普通话99| 国产大陆亚洲精品国产| 久久夜色精品国产欧美乱极品| 日本不卡一区二区| 在线播放日韩导航| 亚洲第一综合色| 欧美情侣在线播放| 日韩黄色一级片| 日韩欧美亚洲国产精品字幕久久久|