?? vctip8.html
字號(hào):
<html><head><meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"><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="#tip57"><font SIZE="+0" FACE="Times New Roman">57</font><font SIZE="+0">、為什么即使調(diào)用</font><fontSIZE="+0" FACE="Times New Roman">EnableMenuItem</font><font SIZE="+0">菜單項(xiàng)后,菜單項(xiàng)還處于禁止?fàn)顟B(tài)</font></a> </p><p><a HREF="#tip58"><font SIZE="+0" FACE="Times New Roman">58</font><font SIZE="+0">、如何給系統(tǒng)菜單添加一個(gè)菜單項(xiàng)</font></a> </p><p><a HREF="#tip59"><font SIZE="+0" FACE="Times New Roman">59</font><font SIZE="+0">、如何確定頂層菜單所占據(jù)的菜單行數(shù)</font></a> </p><p><a HREF="#tip60"><font SIZE="+0" FACE="Times New Roman">60</font><font SIZE="+0">、在用戶環(huán)境中如何確定系統(tǒng)顯示元素的顏色</font></a> </p><p><a HREF="#tip61"><font SIZE="+0" FACE="Times New Roman">61</font><font SIZE="+0">、如何查詢和設(shè)置系統(tǒng)參數(shù)</font></a> </p><p><a HREF="#tip62"><font SIZE="+0" FACE="Times New Roman">62</font><font SIZE="+0">、如何使用一個(gè)預(yù)定義的</font><fontSIZE="+0" FACE="Times New Roman">Windows</font><font SIZE="+0">光標(biāo)</font></a> </p><p><a HREF="#tip63"><font SIZE="+0" FACE="Times New Roman">63</font><font SIZE="+0">、如何確定當(dāng)前屏幕分辨率</font></a> </p><p><a HREF="#tip64"><font SIZE="+0" FACE="Times New Roman">64</font><font SIZE="+0">、如何檢索原先的</font><fontSIZE="+0" FACE="Times New Roman">Task Manager</font><font SIZE="+0">應(yīng)用程序使用的任務(wù)列表</font></a> </p><p><a HREF="#tip65"><font SIZE="+0" FACE="Times New Roman">65</font><font SIZE="+0">、如何確定</font><fontSIZE="+0" FACE="Times New Roman">Windows</font><font SIZE="+0">和</font><font SIZE="+0"FACE="Times New Roman">Windows</font><font SIZE="+0">系統(tǒng)目錄</font></a> </p><p><a HREF="#tip66"><font SIZE="+0" FACE="Times New Roman">66</font><font SIZE="+0">、在哪兒創(chuàng)建臨文件</font></a> </p><p><a HREF="#tip67"><font SIZE="+0" FACE="Times New Roman">67</font><font SIZE="+0">、如何訪問桌面窗口</font></a> </p><p><font SIZE="+2"><b> </b></font> </p><p><a NAME="tip57"></a><b><font SIZE="+2"><font FACE="Times New Roman">57</font><fontFACE="黑體">、為什么即使調(diào)用</font><font FACE="Times New Roman">EnableMenuItem</font><fontFACE="黑體">菜單項(xiàng)后,菜單項(xiàng)還處于禁止?fàn)顟B(tài)</font></font></b> </p><p><font SIZE="+0">需要將<font FACE="Times New Roman">CFrameWnd:: m_bAutomenuEnable</font>設(shè)置為<fontFACE="Times New Roman">FALSE</font>,如果該數(shù)據(jù)成員為<font FACE="Times New Roman">TRUE</font>(缺省值),工作框?qū)⒆詣?dòng)地禁止沒有<fontFACE="Times New Roman">ON_UPDATE_COMMAND_UI</font>或者<font FACE="Times New Roman">ON_COMMAND</font>的菜單項(xiàng)。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Disable MFC from automatically disabling menu items.</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_bAuoMenuEnable=FALSE;</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Now enable the menu item.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMenu* pMenu=GetMenu ();</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT_VALID (pMenu);</font> </p><p><font SIZE="+0" FACE="Times New Roman">pMenu->EnableMenuItem (ID_MENU_ITEM,MF_BYCOMMAND | MF_ENABLED);</font> </p><p><a NAME="tip58"></a><b><font SIZE="+2"><font FACE="Times New Roman">58</font><fontFACE="黑體">、如何給系統(tǒng)菜單添加一個(gè)菜單項(xiàng)</font></font></b> </p><p><font SIZE="+0">給系統(tǒng)菜單添加一個(gè)菜單項(xiàng)需要進(jìn)行下述三個(gè)步驟:</font> </p><p><font SIZE="+0">首先,使用<font FACE="Times New Roman">Resource Symbols</font>對(duì)話(在<fontFACE="Times New Roman">View</font>菜單中選擇<font FACE="Times New Roman">Resource Symbols</font>...</font> </p><p><font SIZE="+0">可以顯示該對(duì)話)定義菜單項(xiàng)<font FACE="Times New Roman">ID</font>,該<fontFACE="Times New Roman">ID</font>應(yīng)大于<font FACE="Times New Roman">0x0F</font>而小于<fontFACE="Times New Roman">0xF000</font>;</font> </p><p><font SIZE="+0">其次,調(diào)用<font FACE="Times New Roman">CWnd::GetSystemMenu</font>獲取系統(tǒng)菜單的指針并調(diào)用<fontFACE="Times New Roman">CWnd:: Appendmenu</font>將菜單項(xiàng)添加到菜單中。下例給系統(tǒng)菜單添加兩個(gè)新的菜單項(xiàng):</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">//Make sure system menu item is in the right range.</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT (IDM_MYSYSITEM &0xFFF0)==IDM_MYSYSITEM);</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT (IDM-MYSYSITEM<0xF000);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Get pointer to system menu.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMenu* pSysmenu=GetSystemmenu (FALSE);</font> </p><p><font SIZE="+0" FACE="Times New Roman">ASSERT_VALID (pSysMenu);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Add a separator and our menu item to system menu.</font> </p><p><font SIZE="+0" FACE="Times New Roman">CString StrMenuItem (_T ("New menu item"));</font> </p><p><font SIZE="+0" FACE="Times New Roman">pSysMenu->Appendmenu (MF_SEPARATOR);</font> </p><p><font SIZE="+0" FACE="Times New Roman">pSysMenu->AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem);</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">現(xiàn)在,選擇系統(tǒng)菜單項(xiàng)時(shí)用戶應(yīng)進(jìn)行檢測(cè)。使用<fontFACE="Times New Roman">ClassWizard</font>處理</font> </p><p><font SIZE="+0"><font FACE="Times New Roman">WM_SYSCOMMAND</font>消息并檢測(cè)用戶菜單的<fontFACE="Times New Roman">nID</font>參數(shù):</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMainFrame:: OnSysCommand (UINT nID,LPARAM lParam)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Determine if our system menu item was selected.</font> </p><p><font SIZE="+0" FACE="Times New Roman">if ( (nID & 0xFFF0)==IDM_MYSYSITEM)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">//TODO-process system menu item</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0" FACE="Times New Roman">else</font> </p><p><font SIZE="+0" FACE="Times New Roman">CMDIFrameWnd:: OnSysCommand (nID, lParam);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><font SIZE="+0">最后,一個(gè)設(shè)計(jì)良好的<font FACE="Times New Roman">UI</font>應(yīng)用程序應(yīng)當(dāng)在系統(tǒng)菜單項(xiàng)加亮?xí)r在狀態(tài)條顯示一個(gè)幫助信息,這可以通過增加一個(gè)包含系統(tǒng)菜單基<fontFACE="Times New Roman">ID</font>的串表的入口來實(shí)現(xiàn)。</font> </p><p><a NAME="tip59"></a><b><font SIZE="+2"><font FACE="Times New Roman">59</font><fontFACE="黑體">、如何確定頂層菜單所占據(jù)的菜單行數(shù)</font></font></b> </p><p><font SIZE="+0">這可以通過簡(jiǎn)單的減法和除法來實(shí)現(xiàn)。首先,用戶需要計(jì)算主框窗口的高度和客戶區(qū);其次,從主框窗口的高度中減去客戶區(qū)、框邊界以及標(biāo)題的高度;最后,除以菜單欄的高度。下例成員函數(shù)是一個(gè)計(jì)算主框菜單所占據(jù)的行數(shù)的代碼實(shí)現(xiàn)。</font> </p><p><font SIZE="+0" FACE="Times New Roman">int CMainFrame:: GetMenuRows ()</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p><p><font SIZE="+0" FACE="Times New Roman">CRect rcFrame,rcClient;</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetWindowRect (rcFrame);</font> </p><p><font SIZE="+0" FACE="Times New Roman">GetClientRect (rcClient);</font> </p><p><font SIZE="+0" FACE="Times New Roman">return (rcFrame.Height () -rcClient.Height ()-</font> </p><p><font SIZE="+0" FACE="Times New Roman">:: GetSystemMetrics (SM_CYCAPTION) -</font> </p><p><font SIZE="+0" FACE="Times New Roman">(:: getSystemMetrics (SM_CYFRAME) *2)) /</font> </p><p><font SIZE="+0" FACE="Times New Roman">:: GetSystemMetrics (SM_CYMENU);</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip60"></a><b><font SIZE="+2"><font FACE="Times New Roman">60</font><fontFACE="黑體">、在用戶環(huán)境中如何確定系統(tǒng)顯示元素的顏色</font></font></b> </p><p><font SIZE="+0">調(diào)用<font FACE="Times New Roman">SDK</font>函數(shù)<fontFACE="Times New Roman">GetSysColor</font>可以獲取一個(gè)特定顯示元素的顏色。下例說明了如何在<fontFACE="Times New Roman">MFC</font>函數(shù)<font FACE="Times New Roman">CMainFrameWnd:: OnNcPaint</font>中調(diào)用該函數(shù)設(shè)置窗口標(biāo)題顏色。</font> </p><p><font SIZE="+0" FACE="Times New Roman">void CMiniFrameWnd:: OnNcPaint ()</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">dc.SetTextColor (:: GetSysColor (m_bActive ?</font> </p><p><font SIZE="+0" FACE="Times New Roman">COLOR_CAPTIONTEXT : COLOR_INACTIVECAPTIONTEXT));</font> </p><p><font SIZE="+0">…</font> </p><p><font SIZE="+0" FACE="Times New Roman">}</font> </p><p><a NAME="tip61"></a><b><font SIZE="+2"><font FACE="Times New Roman">61</font><fontFACE="黑體">、如何查詢和設(shè)置系統(tǒng)參數(shù)</font></font></b> </p><p><font SIZE="+0">在<font FACE="Times New Roman">Windows 3.1 SDK</font>中介紹過<fontFACE="Times New Roman">SDK</font>函數(shù)<font FACE="Times New Roman">SystemParametersInfo</font>,調(diào)用該函數(shù)可以查詢和設(shè)置系統(tǒng)參數(shù),諸如按鍵的重復(fù)速率設(shè)置、鼠標(biāo)雙擊延遲時(shí)間、圖標(biāo)字體以及桌面覆蓋位圖等等。</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Create a font that is used for icon titles.</font> </p><p><font SIZE="+0" FACE="Times New Roman">LOGFONT stFont;</font> </p><p><font SIZE="+0" FACE="Times New Roman">:: SystemParametersInfo (SPIF_GETICONTITLELOGFONT,</font> </p><p><font SIZE="+0" FACE="Times New Roman">sizeof (LOGFONT), &stFont, SPIF_SENDWININICHANGE);</font> </p><p><font SIZE="+0" FACE="Times New Roman">m_font.CreateFontIndirect (&stFont);</font> </p><p><font SIZE="+0" FACE="Times New Roman">//Change the wallpaper to leaves.bmp.</font> </p><p><font SIZE="+0" FACE="Times New Roman">:: SystemParametersInfo (SPI_SETDESKWALLPAPER, 0,</font> </p><p><font SIZE="+0" FACE="Times New Roman">_T (" forest.bmp"), SPIF_UPDATEINIFILE);</font> </p><p><a NAME="tip62"></a><b><font SIZE="+2"><font FACE="Times New Roman">62</font><fontFACE="黑體">、如何使用一個(gè)預(yù)定義的</font><font FACE="Times New Roman">Windows</font><fontFACE="黑體">光標(biāo)</font></font></b> </p><p><font SIZE="+0">調(diào)用<font FACE="Times New Roman">CWinApp:: LoadStandardCursor</font>并傳送光標(biāo)標(biāo)識(shí)符。</font> </p><p><font SIZE="+0" FACE="Times New Roman">BOOL CSampleDialog:: OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message)</font> </p><p><font SIZE="+0" FACE="Times New Roman">{</font> </p>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -