?? mfc
字號:
<P
align=justify>視圖CView和CView派生的有特殊功能的視圖如:列表CListView,編輯CEditView,樹形列表CTreeView,支持RTF的CRichEditView,基于對話框的視CFormView等等。</P>
<P align=justify>對話框CDialog。</P>
<P align=justify>通常,都要從這些類派生應用程序的框架窗口和視窗口或者對話框。</P>
<P align=justify></P>
<P align=justify>工具條CToolBar</P>
<P align=justify>狀態條CStatusBar</P>
<P align=justify>其他各類控制窗口,如列表框CList,編輯框CEdit,組合框CComboBox,按鈕Cbutton等。</P>
<P align=justify>通常,直接使用這些類。</P>
<P align=justify></P>
<LI><A name=_Toc445888984></A><A name=_Toc445782387></A><A
name=_Toc452640883></A><A name=_Toc457298948></A><B>在MFC下窗口的銷毀</B>
<P></P></LI></OL></OL></OL>
<P
align=justify>窗口對象使用完畢,應該銷毀。在MFC下,一個窗口對象的銷毀包括HWND窗口對象的銷毀和MFC窗口對象的銷毀。一般情況下,MFC編程框架自動地處理了這些。</P>
<P align=justify>(1)對CFrameWnd和CView的派生類</P>
<P
align=justify>這些窗口的關閉導致銷毀窗口的函數DestroyWindow被調用。銷毀Windows窗口時,MFC框架調用的最后一個成員函數是OnNcDestroy函數,該函數負責Windows清理工作,并在最后調用虛擬成員函數PostNcDestroy。CFrameWnd和CView的PostNcDestroy調用delete
this刪除自身這個MFC窗口對象。</P>
<P align=justify>所以,對這些窗口,如前所述,應在堆(Heap)中分配,而且,不要對這些對象使用delete操作。</P>
<P align=justify></P>
<P align=justify>(2)對Windows Control窗口</P>
<P
align=justify>在它們的析構函數中,將調用DestroyWidnow來銷毀窗口。如果在棧中分配這樣的窗口對象,則在超出作用范圍的時候,隨著析構函數的調用,MFC窗口對象和它的Windows
window對象都被銷毀。如果在堆(Heap)中分配,則顯式調用delete操作符,導致析構函數的調用和窗口的銷毀。</P>
<P
align=justify>所以,這種類型的窗口應盡可能在棧中分配,避免用額外的代碼來銷毀窗口。如前所述的CMainFrame的成員變量m_wndStatusBar和m_wndToolBar就是這樣的例子。</P>
<P align=justify>(3)對于程序員直接從CWnd派生的窗口</P>
<P align=justify>程序員可以在派生類中實現上述兩種機制之一,然后,在相應的規范下使用。</P>
<P align=justify>后面章節將詳細的討論應用程序退出時關閉、清理窗口的過程。</P>
<OL>
<OL>
<P align=justify>
<LI><A name=_Toc445888985></A><A name=_Toc445782388></A><A
name=_Toc452640884></A><A name=_Toc457298949></A><B>設備描述表</B>
<P></P>
<OL>
<P align=justify>
<LI><B><A name=_Toc445888986></A><A name=_Toc445782389></A><A
name=_Toc452640885></A><A name=_Toc457298950></A>設備描述表概述</B>
<P></P></LI></OL></LI></OL></OL>
<P
align=justify>當一個應用程序使用GDI函數時,必須先裝入特定的設備驅動程序,然后為繪制窗口準備設備描述表,比如指定線的寬度和顏色、刷子的樣式和顏色、字體、剪裁區域等等。不像其他Win32結構,設備描述表不能被直接訪問,只能通過系列Win32函數來間接地操作。</P>
<P
align=justify>如同Windows“窗口類”一樣,設備描述表也是一種Windows數據結構,用來描述繪制窗口所需要的信息。它定義了一個坐標映射模式、一組GDI圖形對象及其屬性。這些GDI對象包括用于畫線的筆,繪圖、填圖的刷子,位圖,調色板,剪裁區域,及路徑(Path)。</P>
<P align=justify>表2-2列出了設備描述表的結構和各項缺省值,表2-3列出了設備描述表的類型,表2-4顯示設備描述表的類型。</P>
<P align=center>表2-2 設備描述表的結構</P>
<TABLE cellSpacing=1 cellPadding=7 width=497 border=1>
<TBODY>
<TR>
<TD vAlign=top width="27%">
<P align=justify>屬性 </P></TD>
<TD vAlign=top width="73%">
<P align=justify>缺省值 </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Background color </P></TD>
<TD vAlign=top width="73%">
<P align=justify>Background color setting from Windows Control Panel
(typically, white) </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Background mode </P></TD>
<TD vAlign=top width="73%">
<P align=justify>OPAQUE </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Bitmap </P></TD>
<TD vAlign=top width="73%">
<P align=justify>None </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Brush </P></TD>
<TD vAlign=top width="73%">
<P align=justify>WHITE_BRUSH </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Brush origin </P></TD>
<TD vAlign=top width="73%">
<P align=justify>(0,0) </P></TD></TR>
<TR>
<TD vAlign=top width="27%" rowSpan=3>
<P align=justify>Clipping region </P></TD>
<TD vAlign=top width="73%" rowSpan=3>
<P align=justify>Entire window or client area with the update region
clipped, as appropriate. Child and pop-up windows in the client area may
also be clipped </P></TD></TR>
<TR></TR>
<TR></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Palette </P></TD>
<TD vAlign=top width="73%">
<P align=justify>DEFAULT_PALETTE </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Current pen position </P></TD>
<TD vAlign=top width="73%">
<P align=justify>(0,0) </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Device origin </P></TD>
<TD vAlign=top width="73%">
<P align=justify>Upper left corner of the window or the client area
</P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Drawing mode </P></TD>
<TD vAlign=top width="73%">
<P align=justify>R2_COPYPEN </P></TD></TR>
<TR>
<TD vAlign=top width="27%" rowSpan=2>
<P align=justify>Font </P></TD>
<TD vAlign=top width="73%" rowSpan=2>
<P align=justify>SYSTEM_FONT (SYSTEM_FIXED_FONT for applications written
to run with Windows versions 3.0 and earlier) </P></TD></TR>
<TR></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Intercharacter spacing </P></TD>
<TD vAlign=top width="73%">
<P align=justify>0 </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Mapping mode </P></TD>
<TD vAlign=top width="73%">
<P align=justify>MM_TEXT </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Pen </P></TD>
<TD vAlign=top width="73%">
<P align=justify>BLACK_PEN </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Polygon-fill mode </P></TD>
<TD vAlign=top width="73%">
<P align=justify>ALTERNATE </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Stretch mode </P></TD>
<TD vAlign=top width="73%">
<P align=justify>BLACKONWHITE </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Text color </P></TD>
<TD vAlign=top width="73%">
<P align=justify>Text color setting from Control Panel (typically, black)
</P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Viewport extent </P></TD>
<TD vAlign=top width="73%">
<P align=justify>(1,1) </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Viewport origin </P></TD>
<TD vAlign=top width="73%">
<P align=justify>(0,0) </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Window extent </P></TD>
<TD vAlign=top width="73%">
<P align=justify>(1,1) </P></TD></TR>
<TR>
<TD vAlign=top width="27%">
<P align=justify>Window origin </P></TD>
<TD vAlign=top width="73%">
<P align=justify>(0,0) </P></TD></TR></TBODY></TABLE>
<P align=justify> </P>
<P align=center>表2-3 設備描述表的分類</P>
<TABLE cellSpacing=1 cellPadding=7 width=497 border=1>
<TBODY>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Display </P></TD>
<TD vAlign=top width="83%">
<P align=justify>顯示設備描述表,提供對視頻顯示設備上的繪制操作的支持 </P></TD></TR>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Printer </P></TD>
<TD vAlign=top width="83%">
<P align=justify>打印設備描述表,提供對打印機、繪圖儀設備上的繪制操作的支持 </P></TD></TR>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Memory </P></TD>
<TD vAlign=top width="83%">
<P align=justify>內存設備描述表,提供對位圖操作的支持 </P></TD></TR>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Information </P></TD>
<TD vAlign=top width="83%">
<P align=justify>信息設備描述表,提供對操作設備信息獲取的支持 </P></TD></TR></TBODY></TABLE>
<P align=justify>表2-3中的顯示設備描述表又分三種類型,如表2-4所示。</P>
<P align=center>表2-4 顯示設備描述表的分類</P>
<P align=left>
<TABLE cellSpacing=1 cellPadding=7 width=499 border=1>
<TBODY>
<TR>
<TD vAlign=top width="19%">
<P align=justify>名稱 </P></TD>
<TD vAlign=top width="27%">
<P align=justify>特點 </P></TD>
<TD vAlign=top width="55%">
<P align=justify>功能 </P></TD></TR>
<TR>
<TD vAlign=top width="19%">
<P align=justify>Class Device</P>
<P align=justify>Contexts </P></TD>
<TD vAlign=top width="27%">
<P align=justify>提供對Win16的向后兼容 </P></TD>
<TD vAlign=top width="55%"> </TD></TR>
<TR>
<TD vAlign=top width="19%">
<P align=justify>Common</P>
<P align=justify>Device</P>
<P align=justify>Contexts </P></TD>
<TD vAlign=top width="27%">
<P align=justify>在Windows系統的高速緩沖區,數量有限 </P></TD>
<TD vAlign=top width="55%">
<P
align=justify>Applicaion獲取設備描述表時,Windows用缺省值初始化該設備描述表,Application使用它完成繪制操作,然后釋放
</P></TD></TR>
<TR>
<TD vAlign=top width="19%">
<P align=justify>Private</P>
<P align=justify>Device</P>
<P align=justify>Contexts </P></TD>
<TD vAlign=top width="27%">
<P align=justify>沒有數量限制,用完不需釋放一次獲取,多次使用 </P></TD>
<TD vAlign=top width="55%">
<P align=justify>多次使用過程中,每次設備描述表屬性的任何修改或變化都會被保存,以支持快速繪制
</P></TD></TR></TBODY></TABLE>
<P></P>
<P align=justify></P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -