




免費預覽已結束,剩余70頁可下載查看
下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
* /htm/produ/special/vc/list1.asp第一章 VC入門1.1 如何學好VC1.2 理解Windows消息機制1.3 利用Visual C+/MFC開發Windows程序的優勢1.4 利用MFC進行開發的通用方法介紹1.5 MFC中常用類、宏、函數介紹第二章 圖形輸出2.1 和GUI有關的各種對象2.2 在窗口中輸出文字2.3 使用點、刷子、筆進行繪圖2.4 在窗口中繪制設備相關位圖、圖標、設備無關位圖2.5 使用各種映射方式2.6 多邊形和剪貼區域第三章 文檔視結構3.1 文檔 視圖 框架窗口間的關系和消息傳送規律3.2 接收用戶輸入3.3 使用菜單3.4 文檔、視、框架之間相互作用3.5 利用序列化進行文件讀寫3.6 MFC中所提供的各種視類介紹第四章 窗口控件4.1 Button4.2 Static Box4.3 Edit Box4.4 Scroll Bar4.5 List Box/Check List Box4.6 Combo Box/Combo Box Ex4.7 Tree Ctrl4.8 List Ctrl4.9 Tab Ctrl4.A Tool Bar4.B Status Bar4.C Dialog Bar4.D 利用AppWizard創建并使用ToolBar StatusBar Dialog Bar4.E General Window4.F 關于WM_NOTIFY的使用方法第五章 對話框5.1 使用資源編輯器編輯對話框5.2 創建有模式對話框5.3 創建無模式對話框5.4 在對話框中進行消息映射5.5 在對話框中進行數據交換和數據檢查5.6 使用屬性對話框5.7 使用通用對話框5.8 建立以對話框為基礎的應用5.9 使用對話框作為子窗口第六章 網絡通信開發6.1 WinSock介紹6.2 利用WinSock進行無連接的通信6.3 利用WinSock建立有連接的通信第一章 VC入門1.1 如何學好VC這個問題很多朋友都問過我,當然流汗是必須的,但同時如果按照某種思路進行有計劃的學習就會起到更好的效果。萬事開頭難,為了幫助朋友們更快的掌握VC開發,下面我將自己的一點體會講一下:1、需要有好的C/C+基礎。正所謂“磨刀不誤砍柴工”,最開始接觸VC時不要急于開始Windows程序開發,而是應該進行一些字符界面程序的編寫。這樣做的目的主要是增加對語言的熟悉程度,同時也訓練自己的思維和熟悉一些在編程中常犯的錯誤。更重要的是理解并能運用C+的各種特性,這些在以后的開發中都會有很大的幫助,特別是利用MFC進行開發的朋友對C+一定要能熟練運用。 2、理解Windows的消息機制,窗口句柄和其他GUI句柄的含義和用途。了解和MFC各個類功能相近的API函數。3、一定要理解MFC中消息映射的作用。4、訓練自己在編寫代碼時不使用參考書而是使用Help Online。5、記住一些常用的消息名稱和參數的意義。6、學會看別人的代碼。7、多看書,少買書,買書前一定要慎重。8、閑下來的時候就看參考書。9、多來我的主頁。O后面幾條是我個人的一點意見,你可以根據需要和自身的情況選用適用于自己的方法。此外我將一些我在選擇參考書時的原則:對于初學者:應該選擇一些內容比較全面的書籍,并且書籍中的內容應該以合理的方式安排,在使用該書時可以達到循序漸進的效果,書中的代碼要有詳細的講解。盡量買翻譯的書,因為這些書一般都比較易懂,而且語言比較輕松。買書前一定要慎重如果買到不好用的書可能會對自己的學習積極性產生打擊。對于已經掌握了VC的朋友:這種程度的開發者應該加深自己對系統原理,技術要點的認識。需要選擇一些對原理講解的比較透徹的書籍,這樣一來才會對新技術有更多的了解,最好書中對技術的應用有一定的闡述。盡量選擇示范代碼必較精簡的書,可以節約銀子。此外最好涉獵一些輔助性的書籍1.2 理解Windows消息機制Windows系統是一個消息驅動的OS,什么是消息呢?我很難說得清楚,也很難下一個定義(誰在噓我),我下面從不同的幾個方面講解一下,希望大家看了后有一點了解。 1、消息的組成:一個消息由一個消息名稱(UINT),和兩個參數(WPARAM,LPARAM)。當用戶進行了輸入或是窗口的狀態發生改變時系統都會發送消息到某一個窗口。例如當菜單轉中之后會有WM_COMMAND消息發送,WPARAM的高字中(HIWORD(wParam))是命令的ID號,對菜單來講就是菜單ID。當然用戶也可以定義自己的消息名稱,也可以利用自定義消息來發送通知和傳送數據。 2、誰將收到消息:一個消息必須由一個窗口接收。在窗口的過程(WNDPROC)中可以對消息進行分析,對自己感興趣的消息進行處理。例如你希望對菜單選擇進行處理那么你可以定義對WM_COMMAND進行處理的代碼,如果希望在窗口中進行圖形輸出就必須對WM_PAINT進行處理。 3、未處理的消息到那里去了:M$為窗口編寫了默認的窗口過程,這個窗口過程將負責處理那些你不處理消息。正因為有了這個默認窗口過程我們才可以利用Windows的窗口進行開發而不必過多關注窗口各種消息的處理。例如窗口在被拖動時會有很多消息發送,而我們都可以不予理睬讓系統自己去處理。 4、窗口句柄:說到消息就不能不說窗口句柄,系統通過窗口句柄來在整個系統中唯一標識一個窗口,發送一個消息時必須指定一個窗口句柄表明該消息由那個窗口接收。而每個窗口都會有自己的窗口過程,所以用戶的輸入就會被正確的處理。例如有兩個窗口共用一個窗口過程代碼,你在窗口一上按下鼠標時消息就會通過窗口一的句柄被發送到窗口一而不是窗口二。5、示例:下面有一段偽代碼演示如何在窗口過程中處理消息 LONG yourWndProc(HWND hWnd,UINT uMessageType,WPARAM wP,LPARAM)switch(uMessageType)/使用SWITCH語句將各種消息分開case(WM_PAINT):doYourWindow(.);/在窗口需要重新繪制時進行輸出break;case(WM_LBUTTONDOWN):doYourWork(.);/在鼠標左鍵被按下時進行處理break;default:callDefaultWndProc(.);/對于其它情況就讓系統自己處理break;接下來談談什么是消息機制:系統將會維護一個或多個消息隊列,所有產生的消息都回被放入或是插入隊列中。系統會在隊列中取出每一條消息,根據消息的接收句柄而將該消息發送給擁有該窗口的程序的消息循環。每一個運行的程序都有自己的消息循環,在循環中得到屬于自己的消息并根據接收窗口的句柄調用相應的窗口過程。而在沒有消息時消息循環就將控制權交給系統所以Windows可以同時進行多個任務。下面的偽代碼演示了消息循環的用法: while(1)id=getMessage(.);if(id = quit)break;translateMessage(.);當該程序沒有消息通知時getMessage就不會返回,也就不會占用系統的CPU時間。 圖示消息投遞模式在16位的系統中系統中只有一個消息隊列,所以系統必須等待當前任務處理消息后才可以發送下一消息到相應程序,如果一個程序陷如死循環或是耗時操作時系統就會得不到控制權。這種多任務系統也就稱為協同式的多任務系統。Windows3.X就是這種系統。而32位的系統中每一運行的程序都會有一個消息隊列,所以系統可以在多個消息隊列中轉換而不必等待當前程序完成消息處理就可以得到控制權。這種多任務系統就稱為搶先式的多任務系統。Windows95/NT就是這種系統1.3 利用Visual C+/MFC開發Windows程序的優勢MFC借助C+的優勢為Windows開發開辟了一片新天地,同時也借助ApplicationWizzard使開發者擺脫離了那些每次都必寫基本代碼,借助ClassWizard和消息映射使開發者擺脫了定義消息處理時那種混亂和冗長的代碼段。更令人興奮的是利用C+的封裝功能使開發者擺脫Windows中各種句柄的困擾,只需要面對C+中的對象,這樣一來使開發更接近開發語言而遠離系統。(但我個人認為了解系統原理對開發很有幫助) 正因為MFC是建立在C+的基礎上,所以我強調C/C+語言基礎對開發的重要性。利用C+的封裝性開發者可以更容易理解和操作各種窗口對象;利用C+的派生性開發者可以減少開發自定義窗口的時間和創造出可重用的代碼;利用虛擬性可以在必要時更好的控制窗口的活動。而且C+本身所具備的超越C語言的特性都可以使開發者編寫出更易用,更靈活的代碼。在MFC中對消息的處理利用了消息映射的方法,該方法的基礎是宏定義實現,通過宏定義將消息分派到不同的成員函數進行處理。下面簡單講述一下這種方法的實現方法。 代碼如下BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) /AFX_MSG_MAP(CMainFrame)ON_WM_CREATE() /AFX_MSG_MAPON_COMMAND(ID_FONT_DROPDOWN, DoNothing)END_MESSAGE_MAP()經過編譯后,代碼被替換為如下形式(這只是作講解,實際情況比這復雜得多):/BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) CMainFrame:newWndProc(.)switch(.)/AFX_MSG_MAP(CMainFrame)/ ON_WM_CREATE() case(WM_CREATE):OnCreate(.);break;/AFX_MSG_MAP/ ON_COMMAND(ID_FONT_DROPDOWN, DoNothing)case(WM_COMMAND):if(HIWORD(wP)=ID_FONT_DROPDOWN)DoNothing(.);break;/END_MESSAGE_MAP()newWndProc就是窗口過程只要是該類的實例生成的窗口都使用該窗口過程。 所以了解了Windows的消息機制在加上對消息映射的理解就很容易了解MFC開發的基本思路了1.4 利用MFC進行開發的通用方法介紹以下是我在最初學習VC時所常用的開發思路和方法,希望能對初學VC的朋友有所幫助和啟發。開發需要讀寫文件的應用程序并且有簡單的輸入和輸出可以利用單文檔視結構開發注重交互的簡單應用程序可以使用對話框為基礎的窗口,如果文件讀寫簡單這可利用CFile進行開發注重交互并且文件讀寫復雜的的簡單應用程序可以利用以CFormView為基礎視的單文檔視結構利用對話框得到用戶輸入的數據,在等級提高后可使用就地輸入在對多文檔要求不強烈時盡量避免多文檔視結構,可以利用分隔條產生單文檔多視結構在要求在多個文檔間傳遞數據時使用多文檔視結構學會利用子窗口,并在自定義的子窗口包含多個控件達到封裝功能的目的盡量避免使用多文檔多視結構不要使用多重繼承并盡量減少一個類中封裝過多的功能 1.5 MFC中常用類、宏、函數介紹 常用類CRect:用來表示矩形的類,擁有四個成員變量:top left bottom right。分別表是左上角和右下角的坐標。可以通過以下的方法構造。 CRect( int l, int t, int r, int b ); 指明四個坐標 CRect( const RECT& srcRect ); 由RECT結構構造 CRect( LPCRECT lpSrcRect ); 由RECT結構構造 CRect( POINT point, SIZE size ); 有左上角坐標和尺寸構造 CRect( POINT topLeft, POINT bottomRight ); 有兩點坐標構造 下面介紹幾個成員函數: int Width( ) const; 得到寬度 int Height( ) const; 得到高度 CSize Size( ) const; 得到尺寸 CPoint& TopLeft( ); 得到左上角坐標 CPoint& BottomRight( ); 得到右下角坐標 CPoint CenterPoint( ) const; 得當中心坐標 此外矩形可以和點(CPoint)相加進行位移,和另一個矩形相加得到“并”操作后的矩形。 CPoint:用來表示一個點的坐標,有兩個成員變量:x y。 可以和另一個點相加。 CString:用來表示可變長度的字符串。使用CString可不指明內存大小,CString會根據需要自行分配。下面介紹幾個成員函數: GetLength 得到字符串長度 GetAt 得到指定位置處的字符 operator + 相當于strcat void Format( LPCTSTR lpszFormat, . ); 相當于sprintf Find 查找指定字符,字符串 Compare 比較 CompareNoCase 不區分大小寫比較 MakeUpper 改為小寫 MakeLower 改為大寫 CStringArray:用來表示可變長度的字符串數組。數組中每一個元素為CString對象的實例。下面介紹幾個成員函數: Add 增加CString RemoveAt 刪除指定位置CString對象 RemoveAll 刪除數組中所有CString對象 GetAt 得到指定位置的CString對象 SetAt 修改指定位置的CString對象 InsertAt 在某一位置插入CString對象常用宏:RGB、 TRACE、ASSERT、VERIFY常用函數 CWindApp* AfxGetApp(); HINSTANCE AfxGetInstanceHandle( ) HINSTANCE AfxGetResourceHandle( ) int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );用于彈出一個消息框第二章 圖形輸出2.1 和GUI有關的各種對象2.2 在窗口中輸出文字2.3 使用點、刷子、筆進行繪圖2.4 在窗口中繪制設備相關位圖、圖標、設備無關位圖2.5 使用各種映射方式2.6 多邊形和剪貼區域21 和GUI有關的各種對象在Windows中有各種GUI對象(不要和C+對象混淆),當你在進行繪圖就需要利用這些對象。而各種對象都擁有各種屬性,下面分別講述各種GUI對象和擁有的屬性字體對象CFont用于輸出文字時選用不同風格和大小的字體。可選擇的風格包括:是否為斜體,是否為粗體,字體名稱,是否有下劃線等。顏色和背景色不屬于字體的屬性。關于如何創建和使用字體在2.2 在窗口中輸出文字中會詳細講解刷子CBrush對象決定填充區域時所采用的顏色或模板。對于一個固定色的刷子來講它的屬性為顏色,是否采用網格和網格的類型如水平的,垂直的,交叉的等。你也可以利用8*8的位圖來創建一個自定義模板的刷子,在使用這種刷子填充時系統會利用位圖逐步填充區域。關于如何創建和使用刷子在2.3 使用刷子、筆進行繪圖中會詳細講解畫筆CPen對象在畫點和畫線時有用。它的屬性包括顏色,寬度,線的風格,如虛線,實線,點劃線等。關于如何創建和使用畫筆在2.3 使用刷子、筆進行繪圖中會詳細講解位圖CBitmap對象可以包含一幅圖像,可以保存在資源中。關于如何使用位圖在2.4 在窗口中繪制設備相關位圖、圖標、設備無關位圖中會詳細講解還有一種特殊的GUI對象是多邊形,利用多邊形可以很好的限制作圖區域或是改變窗口外型。關于如何創建和使用多邊形在2.6 多邊形和剪貼區域中會詳細講解。在Windows中使用GUI對象必須遵守一定的規則。首先需要創建一個合法的對象,不同的對象創建方法不同。然后需要將該GUI對象選入DC中,同時保存DC中原來的GUI對象。如果選入一個非法的對象將會引起異常。在使用完后應該恢復原來的對象,這一點特別重要,如果保存一個臨時對象在DC中,而在臨時對象被銷毀后可能引起異常。有一點必須注意,每一個對象在重新創建前必須銷毀,下面的代碼演示了這一種安全的使用方法。OnDraw(CDC* pDC)CPen pen1,pen2;pen1.CreatePen(PS_SOLID,2,RGB(128,128,128);/創建對象pen2.CreatePen(PS_SOLID,2,RGB(128,128,0);/創建對象CPen* pPenOld=(CPen*)pDC-SelectObject(&pen1);/選擇對象進DCdrawWithPen1.(CPen*)pDC-SelectObject(&pen2);/選擇對象進DCdrawWithPen2.pen1.DeleteObject();/再次創建前先銷毀pen1.CreatePen(PS_SOLID,2,RGB(0,0,0);/再次創建對象(CPen*)pDC-SelectObject(&pen1);/選擇對象進DCdrawWithPen1.pDC-SelectObject(pOldPen);/恢復此外系統中還擁有一些庫存GUI對象,你可以利用CDC:SelectStockObject(SelectStockObject( int nIndex )選入這些對象,它們包括一些固定顏色的刷子,畫筆和一些基本字體. BLACK_BRUSH Black brush. DKGRAY_BRUSH Dark gray brush. GRAY_BRUSH Gray brush. HOLLOW_BRUSH Hollow brush. LTGRAY_BRUSH Light gray brush. NULL_BRUSH Null brush. WHITE_BRUSH White brush. BLACK_PEN Black pen. NULL_PEN Null pen. WHITE_PEN White pen. ANSI_FIXED_FONT ANSI fixed system font. ANSI_VAR_FONT ANSI variable system font. DEVICE_DEFAULT_FONT Device-dependent font. OEM_FIXED_FONT OEM-dependent fixed font. SYSTEM_FONT The system font. By default, Windows uses the system font to draw menus, dialog-box controls, and other text. In Windows versions 3.0 and later, the system font is proportional width; earlier versions of Windows use a fixed-width system font. SYSTEM_FIXED_FONT The fixed-width system font used in Windows prior to version 3.0. This object is available for compatibility with earlier versions of Windows. DEFAULT_PALETTE Default color palette. This palette consists of the 20 static colors in the system palette.這些對象留在DC中是安全的,所以你可以利用選入庫存對象來作為恢復DC中GUI對象。大家可能都注意到了繪圖時都需要一個DC對象,DC(Device Context設備環境)對象是一個抽象的作圖環境,可能是對應屏幕,也可能是對應打印機或其它。這個環境是設備無關的,所以你在對不同的設備輸出時只需要使用不同的設備環境就行了,而作圖方式可以完全不變。這也就是Windows耀眼的一點設備無關性。如同你將對一幅畫使用照相機或復印機將會產生不同的輸出,而不需要對畫進行任何調整。DC的使用會穿插在本章中進行介紹2.2 在窗口中輸出文字 在這里我假定讀者已經利用ApplicationWizard生成了一個SDI界面的程序代碼。接下來的你只需要在CView派生類的OnDraw成員函數中加入繪圖代碼就可以了。在這里我需要解釋一下OnDraw函數的作用,OnDraw函數會在窗口需要重繪時自動被調用,傳入的參數CDC* pDC對應的就是DC環境。使用OnDraw的優點就在于在你使用打印功能的時候傳入OnDraw的DC環境將會是打印機繪圖環境,使用打印預覽時傳入的是一個稱為CPreviewDC的繪圖環境,所以你只需要一份代碼就可以完成窗口/打印預覽/打印機繪圖三重功能。利用Windows的設備無關性和M$為打印預覽所編寫的上千行代碼你可以很容易的完成一個具有所見即所得的軟件。輸出文字一般使用CDC:BOOL TextOut( int x, int y, const CString& str )和CDC:int DrawText( const CString& str, LPRECT lpRect, UINT nFormat )兩個函數,對TextOut來講只能輸出單行的文字,而DrawText可以指定在一個矩形中輸出單行或多行文字,并且可以規定對齊方式和使用何種風格。nFormat可以是多種以下標記的組合(利用位或操作)以達到選擇輸出風格的目的。 pDC- TextOut(100,100,”wqewr”); DT_BOTTOM底部對齊 Specifies bottom-justified text. This value must be combined with DT_SINGLELINE. DT_CALCRECT計算指定文字時所需要矩形尺寸 Determines the width and height of the rectangle. If there are multiple lines of text, DrawText will use the width of the rectangle pointed to by lpRect and extend the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText will modify the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text, but does not draw the text. DT_CENTER中部對齊 Centers text horizontally. DT_END_ELLIPSIS or DT_PATH_ELLIPSIS Replaces part of the given string with ellipses, if necessary, so that the result fits in the specified rectangle. The given string is not modified unless the DT_MODIFYSTRING flag is specified.You can specify DT_END_ELLIPSIS to replace characters at the end of the string, or DT_PATH_ELLIPSIS to replace characters in the middle of the string. If the string contains backslash () characters, DT_PATH_ELLIPSIS preserves as much as possible of the text after the last backslash. DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight. DT_EXTERNALLEADING Includes the font抯 external leading in the line height. Normally, external leading is not included in the height of a line of text. DT_LEFT左對齊 Aligns text flush-left. DT_MODIFYSTRING Modifies the given string to match the displayed text. This flag has no effect unless the DT_END_ELLIPSIS or DT_PATH_ELLIPSIS flag is specified.Note Some uFormat flag combinations can cause the passed string to be modified. Using DT_MODIFYSTRING with either DT_END_ELLIPSIS or DT_PATH_ELLIPSIS may cause the string to be modified, causing an assertion in the CString override. DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used. DT_NOPREFIX禁止使用&前綴 Turns off processing of prefix characters. Normally, DrawText interprets the ampersand (&) mnemonic-prefix character as a directive to underscore the character that follows, and the two-ampersand (&) mnemonic-prefix characters as a directive to print a single ampersand. By specifying DT_NOPREFIX, this processing is turned off. DT_PATH_ELLIPSIS DT_RIGHT右對齊 Aligns text flush-right. DT_SINGLELINE單行輸出 Specifies single line only. Carriage returns and linefeeds do not break the line. DT_TABSTOP設置TAB字符所占寬度 Sets tab stops. The high-order byte of nFormat is the number of characters for each tab. The default number of characters per tab is eight. DT_TOP定部對齊 Specifies top-justified text (single line only). DT_VCENTER中部對齊 Specifies vertically centered text (single line only). DT_WORDBREAK每行只在單詞間被折行 Specifies word-breaking. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by lpRect. A carriage return杔inefeed sequence will also break the line. 在輸出文字時如果希望改變文字的顏色,你可以利用CDC:SetTextColor( COLORREF crColor )進行設置,如果你希望改變背景色就利用CDC:SetBkColor( COLORREF crColor ),很多時候你可能需要透明的背景色你可以利用CDC:SetBkMode( int nBkMode )設置,可接受的參數有 OPAQUE Background is filled with the current background color before the text, hatched brush, or pen is drawn. This is the default background mode. TRANSPARENT Background is not changed before drawing. 接下來講講如何創建字體,你可以創建的字體有兩種:庫存字體CDC:CreateStockObject( int nIndex )和自定義字體。在創建非庫存字體時需要填充一個LOGFONT結構并使用CFont:CreateFontIndirect(const LOGFONT* lpLogFont )(可以參考文章在同一系統中顯示GB字符和BIG5字符),或使用CFont:CreateFont( int nHeight, int nWidth, int nEscapement, int nOrientation, int nWeight, BYTE bItalic, BYTE bUnderline, BYTE cStrikeOut, BYTE nCharSet, BYTE nOutPrecision, BYTE nClipPrecision, BYTE nQuality, BYTE nPitchAndFamily, LPCTSTR lpszFacename )其中的參數和LOGFONT中的分量有一定的對應關系。下面分別講解參數的意義:nHeight 字體高度(邏輯單位)等于零為缺省高度,否則取絕對值并和可用的字體高度進行匹配。nWidth 寬度(邏輯單位)如果為零則使用可用的橫縱比進行匹配。nEscapement 出口矢量與X軸間的角度nOrientation 字體基線與X軸間的角度nWeight 字體粗細,可取以下值ConstantValueFW_DONTCARE0FW_THIN100FW_EXTRALIGHT200FW_ULTRALIGHT200FW_LIGHT300FW_NORMAL400FW_REGULAR400FW_MEDIUM500FW_SEMIBOLD600FW_DEMIBOLD600FW_BOLD700FW_EXTRABOLD800FW_ULTRABOLD800FW_BLACK900FW_HEAVY900bItalic 是否為斜體bUnderline 是否有下劃線cStrikeOut 是否帶刪除線nCharSet 指定字符集合,可取以下值ConstantValueANSI_CHARSET0DEFAULT_CHARSET1SYMBOL_CHARSET2SHIFTJIS_CHARSET128OEM_CHARSET255nOutPrecision 輸出精度OUT_CHARACTER_PRECISOUT_STRING_PRECISOUT_DEFAULT_PRECISOUT_STROKE_PRECISOUT_DEVICE_PRECISOUT_TT_PRECISOUT_RASTER_PRECIS nClipPrecision 剪輯精度,可取以下值CLIP_CHARACTER_PRECISCLIP_MASKCLIP_DEFAULT_PRECISCLIP_STROKE_PRECISCLIP_ENCAPSULATECLIP_TT_ALWAYSCLIP_LH_ANGLES nQuality 輸出質量,可取以下值 DEFAULT_QUALITY Appearance of the font does not matter. DRAFT_QUALITY Appearance of the font is less important than when PROOF_QUALITY is used. For GDI raster fonts, scaling is enabled. Bold, italic, underline, and strikeout fonts are synthesized if necessary. PROOF_QUALITY Character quality of the font is more important than exact matching of the logical-font attributes. For GDI raster fonts, scaling is disabled and the font closest in size is chosen. Bold, italic, underline, and strikeout fonts are synthesized if necessary. nPitchAndFamily 字體間的間距lpszFacename 指定字體名稱,為了得到系統所擁有的字體可以利用EmunFontFamiliesEx。(可以參考文章在同一系統中顯示GB字符和BIG5字符)此外可以利用CFontDialog來得到用戶選擇的字體的LOGFONT數據。最后我講一下文本坐標的計算,利用CDC:GetTextExtent( const CString& str )可以得到字符串的在輸出時所占用的寬度和高度,這樣就可以在手工輸出多行文字時使用正確的行距。另外如果需要更精確的對字體高度和寬度進行計算就需要使用CDC:GetTextMetrics( LPTEXTMETRIC lpMetrics ) 該函數將會填充TEXTMETRIC結構,該結構中的分量可以非常精確的描述字體的各種屬性。2.3 使用點、刷子、筆進行繪圖在Windows中畫點的方法很簡單,只需要調用COLORREF CDC:SetPixel( int x, int y, COLORREF crColor )就可以在指定點畫上指定顏色,同時返回原來的顏色。COLORREF CDC:GetPixel( int x, int y)可以得到指定點的顏色。在Windows中應該少使用畫點的函數,因為這樣做的執行效率比較低。刷子和畫筆在Windows作圖中是使用最多的GUI對象,本節在講解刷子和畫筆使用方法的同時也講述一寫基本作圖函數。在畫點或畫線時系統使用當前DC中的畫筆,所以在創建畫筆后必須將其選入DC才會在繪圖時產生效果。畫筆可以通過CPen對象來產生,通過調用CPen:CreatePen( int nPenStyle, int nWidth, COLORREF crColor )來創建。其中nPenStyle指名畫筆的風格,可取如下值: PS_SOLID 實線 Creates a solid pen. PS_DASH 虛線,寬度必須為一 Creates a dashed pen. Valid only when the pen width is 1 or less, in device units. PS_DOT 點線,寬度必須為一 Creates a dotted pen. Valid only when the pen width is 1 or less, in device units. PS_DASHDOT 點劃線,寬度必須為一 Creates a pen with alternating dashes and dots. Valid only when the pen width is 1 or less, in device units. PS_DASHDOTDOT 雙點劃線,寬度必須為一 Creates a pen with alternating dashes and double dots. Valid only when the pen width is 1 or less, in device units. PS_NULL 空線,使用時什么也不會產生 Creates a null pen. PS_ENDCAP_ROUND 結束處為圓形 End caps are round. PS_ENDCAP_SQUARE 結束處為方形 End caps are square.nWidth和crColor為線的寬度和顏色。刷子是在畫封閉曲線時用來填充的顏色,例如當你畫圓形或方形時系統會用當前的刷子對內部進行填充。刷子可利用CBrush對象產生。通過以下幾種函數創建刷子: BOOL CreateSolidBrush( COLORREF crColor ); 創建一種固定顏色的刷子 BOOL CreateHatchBrush( int nIndex, COLORREF crColor ); 創建指定顏色和網格的刷子,nIndex可取以下值: HS_BDIAGONAL Downward hatch (left to right) at 45 degrees HS_CROSS Horizontal and vertical crosshatch HS_DIAGCROSS Crosshatch at 45 degrees HS_FDIAGONAL Upward hatch (left to right) at 45 degrees HS_HORIZONTAL Horizontal hatch HS_VERTICAL Vertical hatch BOOL CreatePatternBrush( CBitmap* pBitmap ); 創建以8*8位圖為模板的刷子 在選擇了畫筆和刷子后就可以利用Windows的作圖函數進行作圖了,基本的畫線函數有以下幾種 CDC:MoveTo( int x, int y ); 改變當前點的位置 CDC:LineTo( int x, int y ); 畫一條由當前點到參數指定點的線 CDC:BOOL Arc( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 畫弧線 CDC:BOOL Polyline( LPPOINT lpPoints, int nCount ); 將多條線依次序連接 基本的作圖函數有以下幾種: CDC:BOOL Rectangle( LPCRECT lpRect ); 矩形 CDC:RoundRect( LPCRECT lpRect, POINT point ); 圓角矩形 CDC:Draw3dRect( int x, int y, int cx, int cy, COLORREF clrTopLeft, COLORREF clrBottomRight ); 3D邊框 CDC:Chord( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); 扇形 CDC:Ellipse( LPCRECT lpRect ); 橢圓形 CDC:Pie( LPCRECT lpRect, POINT ptStart, POINT ptEnd ); CDC:Polygon( LPPOINT lpPoints, int nCount ); 多邊形 對于矩形,圓形或類似的封閉曲線,系統會使用畫筆繪制邊緣,使用刷子填充內部。如果你不希望填充或是畫出邊緣,你可以選入空刷子(NULL_PEN)或是(NULL_BRUSH)空筆。 下面的代碼創建一條兩象素寬的實線并選入DC。并進行簡單的作圖:.CPen
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業園區綠色制造與節能減排技術
- 工業廢棄地生態修復與再利用
- 工業廢水處理技術進展及政策解讀
- 工業安全防護與自動化技術的融合
- 工業機器人技術的應用與發展
- 工業污染防治與環境教育案例分析
- 工業自動化中的數據驅動決策技術
- 工業物聯網的實時數據傳輸與處理
- 工業機械設備的節能與環保改造
- 工業遺址改造為文創園區的策略
- 2025年濟南鐵路局招聘筆試參考題庫含答案解析
- 《生產公司崗位職責》課件
- 《缺血-再灌注損傷》課件
- 加油站安全事故隱患排查治理制度
- 國際法學(山東聯盟)知到智慧樹章節測試課后答案2024年秋煙臺大學
- 農產品安全生產技術與應用
- 中國特色社會主義理論體系的形成的歷史條件
- 環境藝術設計專業職業生涯規劃
- 2024-2025學年陜西省西安市雁塔區高新一中七年級(上)期中數學試卷
- 《西方經濟學(本)》形考任務(1-6)試題答案解析
- 《消防應急疏散培訓》課件
評論
0/150
提交評論