?? mfc教程_ mfc和win32.htm
字號(hào):
<P
align=justify>視圖CView和CView派生的有特殊功能的視圖如:列表CListView,編輯CEditView,樹形列表CTreeView,支持RTF的CRichEditView,基于對(duì)話框的視CFormView等等。</P>
<P align=justify>對(duì)話框CDialog。</P>
<P align=justify>通常,都要從這些類派生應(yīng)用程序的框架窗口和視窗口或者對(duì)話框。</P>
<P align=justify></P>
<P align=justify>工具條CToolBar</P>
<P align=justify>狀態(tài)條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>窗口對(duì)象使用完畢,應(yīng)該銷毀。在MFC下,一個(gè)窗口對(duì)象的銷毀包括HWND窗口對(duì)象的銷毀和MFC窗口對(duì)象的銷毀。一般情況下,MFC編程框架自動(dòng)地處理了這些。</P>
<P align=justify>(1)對(duì)CFrameWnd和CView的派生類</P>
<P
align=justify>這些窗口的關(guān)閉導(dǎo)致銷毀窗口的函數(shù)DestroyWindow被調(diào)用。銷毀Windows窗口時(shí),MFC框架調(diào)用的最后一個(gè)成員函數(shù)是OnNcDestroy函數(shù),該函數(shù)負(fù)責(zé)Windows清理工作,并在最后調(diào)用虛擬成員函數(shù)PostNcDestroy。CFrameWnd和CView的PostNcDestroy調(diào)用delete
this刪除自身這個(gè)MFC窗口對(duì)象。</P>
<P align=justify>所以,對(duì)這些窗口,如前所述,應(yīng)在堆(Heap)中分配,而且,不要對(duì)這些對(duì)象使用delete操作。</P>
<P align=justify></P>
<P align=justify>(2)對(duì)Windows Control窗口</P>
<P
align=justify>在它們的析構(gòu)函數(shù)中,將調(diào)用DestroyWidnow來(lái)銷毀窗口。如果在棧中分配這樣的窗口對(duì)象,則在超出作用范圍的時(shí)候,隨著析構(gòu)函數(shù)的調(diào)用,MFC窗口對(duì)象和它的Windows
window對(duì)象都被銷毀。如果在堆(Heap)中分配,則顯式調(diào)用delete操作符,導(dǎo)致析構(gòu)函數(shù)的調(diào)用和窗口的銷毀。</P>
<P
align=justify>所以,這種類型的窗口應(yīng)盡可能在棧中分配,避免用額外的代碼來(lái)銷毀窗口。如前所述的CMainFrame的成員變量m_wndStatusBar和m_wndToolBar就是這樣的例子。</P>
<P align=justify>(3)對(duì)于程序員直接從CWnd派生的窗口</P>
<P align=justify>程序員可以在派生類中實(shí)現(xiàn)上述兩種機(jī)制之一,然后,在相應(yīng)的規(guī)范下使用。</P>
<P align=justify>后面章節(jié)將詳細(xì)的討論應(yīng)用程序退出時(shí)關(guān)閉、清理窗口的過(guò)程。</P>
<OL>
<OL>
<P align=justify>
<LI><A name=_Toc445888985></A><A name=_Toc445782388></A><A
name=_Toc452640884></A><A name=_Toc457298949></A><B>設(shè)備描述表</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>設(shè)備描述表概述</B>
<P></P></LI></OL></LI></OL></OL>
<P
align=justify>當(dāng)一個(gè)應(yīng)用程序使用GDI函數(shù)時(shí),必須先裝入特定的設(shè)備驅(qū)動(dòng)程序,然后為繪制窗口準(zhǔn)備設(shè)備描述表,比如指定線的寬度和顏色、刷子的樣式和顏色、字體、剪裁區(qū)域等等。不像其他Win32結(jié)構(gòu),設(shè)備描述表不能被直接訪問(wèn),只能通過(guò)系列Win32函數(shù)來(lái)間接地操作。</P>
<P
align=justify>如同Windows“窗口類”一樣,設(shè)備描述表也是一種Windows數(shù)據(jù)結(jié)構(gòu),用來(lái)描述繪制窗口所需要的信息。它定義了一個(gè)坐標(biāo)映射模式、一組GDI圖形對(duì)象及其屬性。這些GDI對(duì)象包括用于畫線的筆,繪圖、填圖的刷子,位圖,調(diào)色板,剪裁區(qū)域,及路徑(Path)。</P>
<P align=justify>表2-2列出了設(shè)備描述表的結(jié)構(gòu)和各項(xiàng)缺省值,表2-3列出了設(shè)備描述表的類型,表2-4顯示設(shè)備描述表的類型。</P>
<P align=center>表2-2 設(shè)備描述表的結(jié)構(gòu)</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 設(shè)備描述表的分類</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>顯示設(shè)備描述表,提供對(duì)視頻顯示設(shè)備上的繪制操作的支持 </P></TD></TR>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Printer </P></TD>
<TD vAlign=top width="83%">
<P align=justify>打印設(shè)備描述表,提供對(duì)打印機(jī)、繪圖儀設(shè)備上的繪制操作的支持 </P></TD></TR>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Memory </P></TD>
<TD vAlign=top width="83%">
<P align=justify>內(nèi)存設(shè)備描述表,提供對(duì)位圖操作的支持 </P></TD></TR>
<TR>
<TD vAlign=top width="17%">
<P align=justify>Information </P></TD>
<TD vAlign=top width="83%">
<P align=justify>信息設(shè)備描述表,提供對(duì)操作設(shè)備信息獲取的支持 </P></TD></TR></TBODY></TABLE>
<P align=justify>表2-3中的顯示設(shè)備描述表又分三種類型,如表2-4所示。</P>
<P align=center>表2-4 顯示設(shè)備描述表的分類</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>特點(diǎn) </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>提供對(duì)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系統(tǒng)的高速緩沖區(qū),數(shù)量有限 </P></TD>
<TD vAlign=top width="55%">
<P
align=justify>Applicaion獲取設(shè)備描述表時(shí),Windows用缺省值初始化該設(shè)備描述表,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>沒(méi)有數(shù)量限制,用完不需釋放一次獲取,多次使用 </P></TD>
<TD vAlign=top width="55%">
<P align=justify>多次使用過(guò)程中,每次設(shè)備描述表屬性的任何修改或變化都會(huì)被保存,以支持快速繪制
</P></TD></TR></TBODY></TABLE>
<P></P>
<P align=justify></P>
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -