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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap8_3.htm

?? VC++編程實例。非常詳細
?? 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的一些基本知識之后,我們就可以著手編寫繪圖程序了。這個繪圖程序可以讓讀者用鼠標器在窗口內任意涂寫,并可以保存所畫的內容。這里我們參考了Visual 
            C++的例子Scribble,并作了一些修改和簡化。</p>
          <p> 8.3.1 MDI應用程序框架</p>
          <p> 首先用AppWizard生成繪圖程序的基本框架:</p>
          <p> 選擇File-&gt;New,彈出New對話框,選擇MFC 
            AppWizard(exe),并指定項目文件名為Draw。</p>
          <p> 在MFC 
            AppWizard-Step1對話框中指定框架類型為Multiple 
            Document(多文檔,這是缺省設置)。</p>
          <p> Step2,3按缺省值。在MFC AppWizard Step 4 of 6對話框中,點“Advanced...”按鈕,彈出Advanced 
            Options對話框。在File Extension編輯框中指定文件名后綴為.drw,按OK關閉Advanced 
            Options對話框。</p>
          <p> Step5按缺省設置。在MFC 
            AppWizard Step 6 of 6中,在應用程序所包含的類列表中選擇CDrawView,并為其指定基類為CScrollView,因為繪圖程序需要卷滾文檔。現在點Finish按鈕生成繪圖所需的應用程序框架。</p>
          <p> 在往框架里添加代碼實現繪圖程序之前,先看看多文檔框架與單文檔框架的差別。</p>
          <p> AppWizard為多文檔框架創建了以下類: 
            </p>
          <p> CAboutDlg:“關于”對話框</p>
          <p> CChildFrame:子框架窗口,用于容納視圖</p>
          <p> CDrawApp:應用程序類</p>
          <p> CDrawDoc:繪圖程序視圖類</p>
          <p> CDrawView:繪圖視圖類</p>
          <p> CMainFrame:主框架窗口,用來容納子窗口,它是多文檔應用程序的主窗口。</p>
          <p> 在生成的類上,MDI比SDI多了一個CChildFrame子框架窗口類,而且CMainFrame的職責也不同了。</p>
          <p> 另外,MDI和SDI在初始化應用程序實例上也有所不同。MDI應用程序InitInstance函數如清單8.2定義。</p>
          
          <p> <b>清單</b><b>8.2 
            多文檔程序的InitInstance成員函數定義</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>在注冊文檔模板時,首先創建一個CMultiDocTemplate類型(在SDI下是CSingleDocTemplate)的模板對象,然后用AddDocTemplate()把它加入到文檔模板鏈表中去。</p>
          <p> CMultiDocTemplate構造函數帶四個參數,第一個參數是文檔使用的資源ID定義。第二個是文檔類型,第三個是子窗口類型,第四個是視圖類型。</p>
          <p> 與SDI不同,由于MDI的主框架窗口并不直接與文檔相對應,因此無法通過創建文檔來創建主框架窗口,而需要自己去創建。</p>
          <p> //定義一個主窗口類指針,并創建一個窗口的空的實例</p>
           
          <p>CMainFrame* pMainFrame = new CMainFrame;</p>
          
          <p>//從資源文件中載入菜單、圖標等信息,并創建窗口</p>
           
          <p>if (!pMainFrame-&gt;LoadFrame(IDR_MAINFRAME))</p>
          <p>return FALSE;</p>
          
          <p>//將應用程序對象的主窗口指針數據成員設為當前創建的窗口</p>
           
          <p>m_pMainWnd = pMainFrame;</p>
          
          <p><b> </b></p>
          <p><b> </b>8.3.2 設計繪圖程序的文檔類</p>
          <p> Draw需要保存用戶在屏幕上涂寫的每一個筆劃。一副畫由許多筆劃組成,可以把它看作是筆劃組成的鏈表。每一個筆劃可以看作一個對象,它由許多點組成。這樣,我們可以把繪圖文檔的數據看作是筆劃對象CStroke組成的鏈表。另外,我們還需要一些數據成員表示當前畫圖所使用的畫筆和畫筆的寬度。</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>//獲取當前使用的畫筆,為視圖所使用</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;”第一個參數表示鏈表基本類型,第二個參數代表鏈表中所存放的元素的類型。</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數據成員存放文檔的大小。另外,還需要提供一個GetDocSize()來訪問它。NewStroke()用于往鏈表里增加一個筆劃。</p>
          <p> 現在,開始設計CStroke類。筆劃可以看作由一系列點組成,這樣CStroke可以用一個點的數組來表示。另外,還需要一些成員函數來訪問這個數組。我們還希望筆劃能夠自己繪制自己,并用串行化機制保存自己的數據。</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);//用筆的寬度構造一個畫筆</p>
          <p> //用于串行化筆劃對象</p>
           
          <p>protected:</p>
          
          <p>CStroke(); //串行化對象所需的不帶參數的構造函數</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>//用數組模板類保存筆劃的所有點</p>
           
          <p>CArray&lt;CPoint,CPoint&gt; m_pointArray; // series of connected 
            points</p>
          
          <p>//包圍筆劃所有的點的一個最小矩形,關于它的作用以后會提到</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>//結束筆劃,計算最小矩形</p>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美无乱码久久久免费午夜一区| 国产精品18久久久久久久网站| 成人黄色av电影| 亚洲国产成人一区二区三区| 成人深夜视频在线观看| 国产精品美女久久久久久久久久久| 岛国精品在线观看| 亚洲欧美另类图片小说| 91蜜桃在线观看| 天天爽夜夜爽夜夜爽精品视频| 欧美精品久久一区| 国内精品国产三级国产a久久| 欧美国产97人人爽人人喊| 91亚洲精华国产精华精华液| 一级中文字幕一区二区| 91精品国产综合久久婷婷香蕉 | 自拍av一区二区三区| 色妹子一区二区| 免费在线观看一区二区三区| 久久中文字幕电影| 91日韩精品一区| 偷拍自拍另类欧美| 国产女同性恋一区二区| 欧洲在线/亚洲| 久久精品国产秦先生| 国产精品高潮呻吟| 777a∨成人精品桃花网| 国产成人精品综合在线观看| 一区二区欧美国产| 久久午夜老司机| 欧美视频一区二区三区四区| 黄色日韩三级电影| 伊人色综合久久天天人手人婷| 精品日韩av一区二区| 一本大道av伊人久久综合| 九九视频精品免费| 亚洲已满18点击进入久久| 精品成人在线观看| 欧洲av一区二区嗯嗯嗯啊| 国产成人8x视频一区二区| 日日夜夜免费精品视频| 亚洲色图视频免费播放| www国产成人| 欧美酷刑日本凌虐凌虐| 白白色亚洲国产精品| 精品一区二区三区在线观看国产| 亚洲免费观看视频| 亚洲国产精品成人综合| 91麻豆精品国产综合久久久久久| 成a人片国产精品| 青椒成人免费视频| 亚洲国产成人91porn| 国产精品无遮挡| 久久色视频免费观看| 欧美日韩国产大片| 91久久久免费一区二区| 成人午夜在线播放| 国产一区二区三区综合| 日本不卡高清视频| 亚洲图片一区二区| 亚洲欧美日韩电影| 国产精品久久久久久久蜜臀| 久久精品亚洲麻豆av一区二区| 欧美一区二区观看视频| 欧美日韩三级一区| 欧美亚洲一区二区在线观看| 色婷婷精品久久二区二区蜜臀av| 成人免费视频视频| 成人丝袜18视频在线观看| 国产一区二区在线影院| 国产精品69毛片高清亚洲| 久久国产精品免费| 老司机精品视频在线| 日韩成人av影视| 偷拍日韩校园综合在线| 日本成人在线网站| 捆绑调教美女网站视频一区| 日韩电影在线一区二区| 视频一区视频二区中文| 秋霞成人午夜伦在线观看| 日韩激情一二三区| 久久成人久久鬼色| 国产成人亚洲综合a∨婷婷| 国产精品一区二区果冻传媒| 国产激情精品久久久第一区二区 | 欧美一二区视频| 日韩一级片网站| 精品国产三级a在线观看| 精品久久人人做人人爱| 久久综合色8888| 国产亚洲成av人在线观看导航| 久久女同性恋中文字幕| 亚洲欧洲国产日本综合| 亚洲一区二区在线免费看| 亚洲国产美女搞黄色| 免费观看一级欧美片| 激情久久五月天| 99综合电影在线视频| 色哦色哦哦色天天综合| 3d动漫精品啪啪1区2区免费| 日韩午夜小视频| 国产亲近乱来精品视频| 自拍偷拍国产亚洲| 日日欢夜夜爽一区| 国产成人在线网站| 色婷婷激情综合| 欧美一区二区三区在线看| 久久久久久电影| 一区二区三区国产精品| 日韩精品一级二级 | 亚洲日本一区二区| 亚洲成人精品影院| 国产剧情av麻豆香蕉精品| 99精品国产99久久久久久白柏| 欧美日韩一区二区欧美激情| 精品国产3级a| 亚洲人成人一区二区在线观看| 青青草原综合久久大伊人精品| 国产精品一区二区在线观看不卡| 91成人网在线| 久久精品一区二区三区不卡牛牛| 亚洲高清免费视频| 国产.精品.日韩.另类.中文.在线.播放 | 成人一区二区三区| 欧美日韩高清不卡| 国产精品久线在线观看| 日韩激情在线观看| 色女孩综合影院| 久久久久久97三级| 首页国产欧美日韩丝袜| 成人高清视频在线观看| 日韩欧美国产综合| 一区二区三区不卡在线观看| 国产精品一区二区在线播放| 在线观看一区二区视频| 欧美极品少妇xxxxⅹ高跟鞋| 午夜精品成人在线| 91免费在线播放| 国产亚洲一区二区在线观看| 日韩中文字幕不卡| 欧洲国内综合视频| 亚洲欧美日韩国产综合| 国产精品资源网| 91精品国产美女浴室洗澡无遮挡| 亚洲精品成人精品456| 国产美女精品一区二区三区| 日韩一区二区免费视频| 一区二区三区加勒比av| 91免费视频大全| 国产精品私房写真福利视频| 激情综合网最新| 欧美一级日韩免费不卡| 午夜精品久久久久久久久| 91麻豆精品视频| 亚洲视频在线一区观看| 成人激情小说乱人伦| 国产欧美一区二区精品性色| 久久精品国产99久久6| 91精品国产色综合久久| 午夜精品一区二区三区电影天堂 | 国产剧情一区在线| 精品久久久久久最新网址| 蜜臀av在线播放一区二区三区| 欧美午夜精品久久久| 亚洲专区一二三| 色婷婷综合在线| 亚洲一二三区在线观看| 欧美影院精品一区| 亚洲伊人伊色伊影伊综合网| 在线观看欧美日本| 亚洲综合视频网| 欧美日韩一级黄| 日日欢夜夜爽一区| 日韩欧美一区二区视频| 美女精品自拍一二三四| 日韩欧美美女一区二区三区| 美日韩黄色大片| 亚洲精品在线免费播放| 国产精品91一区二区| 中文字幕精品—区二区四季| 欧美日韩一级大片网址| 日韩专区中文字幕一区二区| 日韩三级在线免费观看| 国产一区二区精品久久99| 国产精品久久久久四虎| 在线视频观看一区| 日韩av在线发布| 久久精品视频一区二区三区| proumb性欧美在线观看| 亚洲一区二区三区三| 日韩欧美久久一区| 成人黄色片在线观看| 亚洲综合在线五月| 日韩视频在线观看一区二区| 国产成人小视频| 午夜成人在线视频| 欧美精品一区在线观看| 91丨九色丨黑人外教| 日韩国产在线观看| 国产精品视频yy9299一区|