?? vctip3.html
字號:
<html><head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80"><meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 3.0"><meta NAME="doccomm" CONTENT="sss"><meta NAME="Template" CONTENT="C:\MSOffice\Template\Sl_BOOK.dot"><meta NAME="Author" CONTENT="Cheng Jinxing"><title>Visual C++編程技巧之三</title></head><body TEXT="#000000" BGCOLOR="#CCFFFF" LINK="#0000EE" VLINK="#551A8B" ALINK="#FF0000"><p align="center"><br><font SIZE="+3" FACE="楷體_GB2312">Visual C++編程技巧之三</font> </p><p><a HREF="#tip17"><font SIZE="+0" FACE="Times New Roman">17</font><font SIZE="+0">、如何創建一個字回繞的</font><fontSIZE="+0" FACE="Times New Roman">CEditView</font></a> </p><p><a HREF="#tip18"><font SIZE="+0" FACE="Times New Roman">18</font><font SIZE="+0">、通用控件的顯示窗口</font></a> </p><p><a HREF="#tip19"><font SIZE="+0" FACE="Times New Roman">19</font><font SIZE="+0">、移動窗口</font></a> </p><p><a HREF="#tip20"><font SIZE="+0" FACE="Times New Roman">20</font><font SIZE="+0">、重置窗口的大小</font></a> </p><p><a HREF="#tip21"><font SIZE="+0" FACE="Times New Roman">21</font><font SIZE="+0">、如何單擊除了窗口標題欄以外的區域使窗口移動</font></a> </p><p><a HREF="#tip22"><font SIZE="+0" FACE="Times New Roman">22</font><font SIZE="+0">、如何改變視窗的背景顏色</font></a> </p><p><a HREF="#tip23"><font SIZE="+0" FACE="Times New Roman">23</font><font SIZE="+0">、如何改變窗口標題</font></a> </p><p><a HREF="#tip24"><font SIZE="+0" FACE="Times New Roman">24</font><font SIZE="+0">、如何防止主框窗口在其說明中顯示活動的文檔名</font></a> </p><p><font SIZE="+2"><b> </b></font> </p><p><a NAME="tip17"></a><b><font SIZE="+2"><font FACE="Times New Roman">17</font><fontFACE="黑體">、如何創建一個字回繞的</font><font FACE="Times New Roman">CEditView</font></font></b> </p><p><font SIZE="+0">重載<font FACE="Times New Roman">CWnd : : PreCreateWindow</font>和修改<fontFACE="Times New Roman">CREATESTRUCT</font>結構,關閉<font FACE="Times New Roman">CEditView</font>對象的<fontFACE="Times New Roman">ES_AUTOHSCROLL</font>和<font FACE="Times New Roman">WS_HSCROLL</font>風格位, 由于<font FACE="Times New Roman">CEditView : : PreCreateWindow</font>顯示設置<fontFACE="Times New Roman">cs. style</font>,調用基類函數后要修改<fontFACE="Times New Roman">cs . style</font>。</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleEDitView : : PreCreateWindow (CREATESTRUCT&cs)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//First call basse class function .</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL bResutl =CEditView : : PreCreateWindow (cs) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Now specify the new window style .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">cs.style &= ~ (ES_AUTOHSCROLL </font>|<fontFACE="Times New Roman">WS_HSCROLL);</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">return bResult ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip18"></a><b><font SIZE="+2"><font FACE="Times New Roman">18</font><fontFACE="黑體">、通用控件的顯示窗口</font></font></b> </p><p><font SIZE="+0"><font FACE="Times New Roman">MFC</font>提供了幾個<fontFACE="Times New Roman">CView</font>派生的視窗類, 封裝了通用控件的功能,但仍然使用工</font> </p><p><font SIZE="+0">作框文檔顯示窗口體系結構:<font FACE="Times New Roman">CEditView</font>封裝了編輯控件,<fontFACE="Times New Roman">CTreeView</font>保持了樹列表</font> </p><p><font SIZE="+0">控件,<font FACE="Times New Roman">CListView</font>封裝了列表顯示窗口控件,<fontFACE="Times New Roman">CRichEditView</font>可以處理多種編輯控件。</font> </p><p><a NAME="tip19"></a><b><font SIZE="+2"><font FACE="Times New Roman">19</font><fontFACE="黑體">、移動窗口</font></font></b> </p><p><font SIZE="+0">調用<font FACE="Times New Roman">CWnd : : SetWindowPos</font>并指定<fontFACE="Times New Roman">SWP_NOSIZE</font>標志。目的位置與父窗口</font> </p><p><font SIZE="+0">有關(頂層窗口與屏幕有關)。調用<fontFACE="Times New Roman">CWnd : : MoveWindow</font>時必須要指定窗口</font> </p><p><font SIZE="+0">的大小。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Move window to positoin 100 , 100 of its parent window .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">SetWindowPos (NULL, 100 , 100 , 0 , 0 , SWP_NOSIZE </font>|<font FACE="Times New Roman">SWP_NOAORDER);</font></font> </p><p><a NAME="tip20"></a><b><font SIZE="+2"><font FACE="Times New Roman">20</font><fontFACE="黑體">、重置窗口的大小</font></font></b> </p><p><font SIZE="+0">調用<font FACE="Times New Roman">CWnd: : SetWindowPos</font>并指定<fontFACE="Times New Roman">SWP_NOMOVE</font>標志, 也可調用</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">CWnd : : MoveWindow </font>但必須指定窗口的位置。</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Get the size of the window .</font> </p><p><font SIZE="+0" FACE="Times New Roman">Crect reWindow ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetWindowRect (reWindow );</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Make the window twice as wide and twice as tall .</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetWindowPos (NULL , 0 , 0 , reWindow . Width ( ) *2,</font> </p><p><font SIZE="+0" FACE="Times New Roman">reWindow . Height () * 2,</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">SWP_NOMOVE </font>|<fontFACE="Times New Roman">SWP_NOZORDER );</font></font> </p><p><a NAME="tip21"></a><b><font SIZE="+2"><font FACE="Times New Roman">21</font><fontFACE="黑體">、如何單擊除了窗口標題欄以外的區域使窗口移動</font></font></b> </p><p><font SIZE="+0">當窗口需要確定鼠標位置時<font FACE="Times New Roman">Windows</font>向窗口發送<fontFACE="Times New Roman">WM_NCHITTEST</font>信息,可以處理</font> </p><p><font SIZE="+0">該信息使<font FACE="Times New Roman">Windows</font>認為鼠標在窗口標題上。對于對話框和基于對話的應用程序,可</font> </p><p><font SIZE="+0">以使用<font FACE="Times New Roman">ClassWizard</font>處理該信息并調用基類函數, 如果函數返回<font FACE="Times New Roman">HTCLIENT </font>則表明</font> </p><p><font SIZE="+0">鼠標在客房區域,返回<font FACE="Times New Roman">HTCAPTION</font>表明鼠標在<fontFACE="Times New Roman">Windows</font>的標題欄中。</font> </p><p><font SIZE="+0" FACE="Times New Roman">UINT CSampleDialog : : OnNcHitTest (Cpoint point )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">UINT nHitTest =Cdialog: : OnNcHitTest (point );</font> </p><p><font SIZE="+0" FACE="Times New Roman">return (nHitTest = =HTCLIENT)? HTCAPTION : nHitTest ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">上述技術有兩點不利之處, 其一是在窗口的客戶區域雙擊時, 窗口將極大;</font> </p><p><font SIZE="+0">其二, 它不適合包含幾個視窗的主框窗口。還有一種方法,當用戶按下鼠標左鍵</font> </p><p><font SIZE="+0">使主框窗口認為鼠標在其窗口標題上,使用<fontFACE="Times New Roman">ClassWizard</font>在視窗中處理<font FACE="Times New Roman">WM_LBUTTODOWN</font></font> </p><p><font SIZE="+0">信息并向主框窗口發送一個<font FACE="Times New Roman">WM_NCLBUTTONDOWN</font>信息和一個單擊測試<fontFACE="Times New Roman">HTCAPTION</font>。</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleView : : OnLButtonDown (UINT nFlags , Cpoint point )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CView : : OnLButtonDow (nFlags , pont );</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Fool frame window into thinking somene clicked on</font> </p><p><font SIZE="+0" FACE="Times New Roman">its caption bar .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">GetParentFrame ( ) </font>—<fontFACE="Times New Roman">> PostMessage (</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">WM_NCLBUTTONDOWN , HTCAPTION , MAKELPARAM (poitn .x , point .y) );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -