?? vctip4.html
字號:
<p><font SIZE="+0" FACE="Times New Roman">CStatusBar * pStatusBar =</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">(CStatusBar *) AfxGetMainWnd ( ) </font>—<fontFACE="Times New Roman">> GetDescendantWindow</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">(AFX_IDW_STUTUS_BAR);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Get pointer to toolbar .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CToolBar * pToolBar =</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">(CToolBar * ) AfxGetMainWnd ( ) </font>—<fontFACE="Times New Roman">> GetDescendantWindow (AFX_IDW_TOOLBAR);</font></font> </p><p><a NAME="tip28"></a><b><font SIZE="+2"><font FACE="Times New Roman">28</font><fontFACE="黑體">、如何使能和禁止工具條的工具提示</font></font></b> </p><p><font SIZE="+0">如果設置了<font FACE="Times New Roman">CBRS_TOOLTIPS</font>風格位,工具條將顯示工具提示,要使能或者禁止</font> </p><p><font SIZE="+0">工具提示,需要設置或者清除該風格位。下例通過調用<fontFACE="Times New Roman">CControlBar : : GetBarStyle</font></font> </p><p><font SIZE="+0">和<font FACE="Times New Roman">CControlBar : : SetBarStyle</font>建立一個完成此功能的成員函數:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMainFrame : : EnableToolTips ( BOOL bDisplayTips )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT_VALID (m_wndToolBar);</font> </p><p><font SIZE="+0" FACE="Times New Roman">DWORD dwStyle = m _wndToolBar.GetBarStyle ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (bDisplayTips)</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">dwStyle </font>|<fontFACE="Times New Roman">=CBRS_TOOLTIPS ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">else</font> </p><p><font SIZE="+0" FACE="Times New Roman">dwStyle & = ~ CBRS_TOOLTIPS ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndToolBar.SetBarStyle (dwStyle );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip29"></a><b><font SIZE="+2"><font FACE="Times New Roman">29</font><fontFACE="黑體">、如何設置工具條標題</font></font></b> </p><p><font SIZE="+0">工具條是一個窗口,所以可以在調用<fontFACE="Times New Roman">CWnd : : SetWindowText</font>來設置標題,例子如下:</font> </p><p><font SIZE="+0" FACE="Times New Roman">int CMainFrame : : OnCreate (LPCREATESTRUCT lpCreateStruct )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Set the caption of the toolbar .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_wndToolBar.SetWindowText (_T "Standdard");</font> </p><p><a NAME="tip30"></a><b><font SIZE="+2"><font FACE="Times New Roman">30</font><fontFACE="黑體">、如何創建和使用無模式對話框</font></font></b> </p><p><font SIZE="+0"><font FACE="Times New Roman">MFC</font>將模式和無模式對話封裝在同一個類中,但是使用無模式對話需要幾</font> </p><p><font SIZE="+0">個對話需要幾個額處的步驟。首先,使用資源編輯器建立對話資源并使用</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">ClassWizard</font>創建一個<fontFACE="Times New Roman">CDialog</font>的派生類。模式和無模式對話的中止是不一樣的:</font> </p><p><font SIZE="+0">模式對話通過調用<font FACE="Times New Roman">CDialog : : EndDialog </font>來中止,無模式對話則是調用</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">CWnd: : DestroyWindow</font>來中止的,函數<fontFACE="Times New Roman">CDialog : : OnOK</font>和<font FACE="Times New Roman">CDialog : : OnCancel</font></font> </p><p><font SIZE="+0">調用<font FACE="Times New Roman">EndDialog ,</font>所以需要調用<fontFACE="Times New Roman">DestroyWindow</font>并重置無模式對話的函數。</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleDialog : : OnOK ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Retrieve and validate dialog data .</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (! UpdateData (TRUE) )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// the UpdateData rountine will set focus to correct item</font> </p><p><font SIZE="+0" FACE="Times New Roman">TRACEO (" UpdateData failed during dialog termination .\n") ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">return ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Call DestroyWindow instead of EndDialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">DestroyWindow ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleDialog : : OnCancel ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Call DestroyWindow instead of EndDialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">DestroyWindow ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">其次,需要正確刪除表示對話的<font FACE="Times New Roman">C++</font>對象。對于模式對來說,這很容易,需要創建函數返回后即可刪除<fontFACE="Times New Roman">C++</font>對象;無模式對話不是同步的,創建函數調用后立即返回,因而用戶不知道何時刪除<fontFACE="Times New Roman">C++</font>對象。撤銷窗口時工作框調用<fontFACE="Times New Roman">CWnd : : PostNcDestroy</font>,可以重置該函數并執行清除操作,諸如刪除<fontFACE="Times New Roman">this</font>指針。</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CSampleDialog : : PostNcDestroy ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Declete the C++ object that represents this dialog .</font> </p><p><font SIZE="+0" FACE="Times New Roman">delete this ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,要創建無模式對話。可以調用<fontFACE="Times New Roman">CDialog : : DoModal</font>創建一個模式對放, 要創建一個無模式對話則要調用<font FACE="Times New Roman">CDialog: : Create</font>。下面的例子說明了應用程序是如何創建無模式對話的:</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMainFrame : : OnSampleDialog ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Allocate a modeless dialog object .</font> </p><p><font SIZE="+0" FACE="Times New Roman">CSampleDilog * pDialog =new CSampleDialog ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT_VALID (pDialog) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Create the modeless dialog .</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">BOOL bResult = pDialog </font>—<fontFACE="Times New Roman">> Creste (IDD_IDALOG) ;</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT (bResult ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip31"></a><b><font SIZE="+2"><font FACE="Times New Roman">31</font><fontFACE="黑體">、如何在對話框中顯示一個位圖</font></font></b> </p><p><font SIZE="+0">這要歸功于<font FACE="Times New Roman">Win 32</font>先進的靜態控件和<fontFACE="Times New Roman">Microsoft</font>的資源編輯器, 在對話框中顯示位圖是很容易的, 只需將圖形控件拖到對話中并選擇適當屬性即可,用戶也可以顯示圖標、位圖以及增強型元文件。</font> </p><p><a NAME="tip32"></a><b><font SIZE="+2"><font FACE="Times New Roman">32</font><fontFACE="黑體">、如何改變對話或窗體視窗的背景顏色</font></font></b> </p><p><font SIZE="+0">調用<font FACE="Times New Roman">CWinApp : : SetDialogBkColor</font>可以改變所有應用程序的背景顏色。第一個參數指定了背景顏色,第二個參數指定了文本顏色。下例將應用程序對話設置為藍色背景和黃色文本。</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleApp : : InitInstance ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">//use blue dialog with yellow text .</font> </p><p><font SIZE="+0" FACE="Times New Roman">SetDialogBkColor (RGB (0, 0, 255 ), RGB ( 255 , 255 , 0 ) ) ;</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">需要重畫對話(或對話的子控件)時,<fontFACE="Times New Roman">Windows</font>向對話發送消息<font FACE="Times New Roman">WM_CTLCOLOR</font>,通常用戶可以讓<fontFACE="Times New Roman">Windows</font>選擇繪畫背景的刷子,也可重置該消息指定刷子。下例說明了創建一個紅色背景對話的步驟。</font> </p><p><font SIZE="+0">首先,給對話基類增加一人成員變量<fontFACE="Times New Roman">CBursh :</font></font> </p><p><font SIZE="+0" FACE="Times New Roman">class CMyFormView : public CFormView</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">private :</font> </p><p><font SIZE="+0" FACE="Times New Roman">CBrush m_ brush ; // background brush</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">} ;</font> </p><p><font SIZE="+0">其次, 在類的構造函數中將刷子初始化為所需要的背景顏色。</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMyFormView : : CMyFormView ( )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Initialize background brush .</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_brush .CreateSolidBrush (RGB ( 0, 0, 255 ) )</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,使用<font FACE="Times New Roman">ClassWizard</font>處理<fontFACE="Times New Roman">WM_CTLCOLOR</font>消息并返回一個用來繪畫對話背景的刷子句柄。注意:由于當重畫對話控件時也要調用該函數,所以要檢測<fontFACE="Times New Roman">nCtlColor</font>參量。</font> </p><p><font SIZE="+0" FACE="Times New Roman">HBRUSH CMyFormView : : OnCtlColor (CDC* pDC , CWnd*pWnd , UINT nCtlColor )</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">// Determine if drawing a dialog box . If we are , return +handle to</font> </p><p><font SIZE="+0" FACE="Times New Roman">//our own background brush . Otherwise let windows handle it .</font> </p><p><font SIZE="+0" FACE="Times New Roman">if (nCtlColor = = CTLCOLOR _ DLG )</font> </p><p><font SIZE="+0" FACE="Times New Roman">return (HBRUSH) m_brush .GetSafeHandle ( ) ;</font> </p><p><font SIZE="+0" FACE="Times New Roman">return CFormView : : OnCtlColor (pDC, pWnd , nCtlColor );</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><hr><p> <a HREF="skill.htm">返回上頁</a> </p></body></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -