?? chap4_1.htm
字號:
</center></div></b></font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font SIZE="3">修改完后,讀者可以編譯并運行</font><font FACE="Times New Roman" SIZE="3">Record</font><font SIZE="3">,來看看修改的結果。讀者很快會注意到</font><font FACE="Times New Roman" SIZE="3">Start</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">Stop</font><font SIZE="3">菜單項及按鈕都是灰色的。這個現象是正常的,其原因將在</font><font FACE="Times New Roman" SIZE="3">4.2</font><font SIZE="3">節解釋。有趣的是工具條可以被拖動(請在工具條的空白地方拖動)并停泊在主框架窗口的任何其它邊上,并且工具條是可以浮動的,即當用鼠標雙擊工具條的空白處時,工具條變成了一個浮動窗口,可被拖動到屏幕上的任意地方。這些有趣的現象將在</font><font FACE="Times New Roman" SIZE="3">4.2</font><font SIZE="3">節解釋。不管怎么說,創建和修改工具條的任務已經完成了。</font><font FACE="Times New Roman" SIZE="3"></p>
<b><p ALIGN="JUSTIFY"></b></font><font color="#3973DE" FACE="Times New Roman" SIZE="3">4.1.2</font><font SIZE="3" color="#3973DE">手工創建</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果想要再加一個工具條,那么</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">就無能為力了,必須手工創建。假設</font><font FACE="Times New Roman" SIZE="3">Record</font><font SIZE="3">程序的聲音采樣頻率有</font><font FACE="Times New Roman" SIZE="3">11KHZ</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">44KHZ</font><font SIZE="3">兩檔選擇,現在我們的任務是再創建一個工具條,可讓用戶對這兩種檔次進行選擇。本來這樣的功能應該位于第一個工具條內,但為了演示工具條的手工創建,這里不妨來個多此一舉。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果</font><font FACE="Times New Roman" SIZE="3">Record</font><font SIZE="3">工程不在</font><font FACE="Times New Roman" SIZE="3">Developer Studio</font><font SIZE="3">中,請選擇命令</font><font FACE="Times New Roman" SIZE="3">File->Open Workspace</font><font SIZE="3">打開</font><font FACE="Times New Roman" SIZE="3">Record</font><font SIZE="3">工程。首先要對原來的菜單進行修改,步驟如下:</p>
<blockquote>
<ol>
<li><p ALIGN="JUSTIFY">打開<font FACE="Times New Roman" SIZE="3">IDR_MAINFRAME</font>菜單資源</p>
</li>
<li><p ALIGN="JUSTIFY">雙擊<font FACE="Times New Roman" SIZE="3">Record</font>菜單底端的空白項,在其屬性窗口中選中<font FACE="Times New Roman" SIZE="3">Separator</font>,這樣就加入了一條分隔線。</p>
</li>
<li><p ALIGN="JUSTIFY">在分隔線下面加入兩個菜單項,其屬性如表<font FACE="Times New Roman" SIZE="3">4.1</font>所示。</p>
</li>
</ol>
</blockquote>
</font><p> <b><font SIZE="3"></p>
<p ALIGN="CENTER">表</font><font FACE="Times New Roman" SIZE="3">4.1 </font><font SIZE="3">菜單項的屬性</font></b></p>
<table BORDER="1" CELLSPACING="1" CELLPADDING="1" WIDTH="579">
<tr>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">Caption</font></td>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">ID</font></td>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">Prompt</font></td>
</tr>
<tr>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">&Low quality</font></td>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">ID_LOW_QUALITY</font></td>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">Low
quality(11k)\n11k</font></td>
</tr>
<tr>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">&High quality</font></td>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">ID_HIGH_QUALITY</font></td>
<td WIDTH="33%"><font FACE="Times New Roman" SIZE="3"><p ALIGN="CENTER">High
quality(44k)\n44k</font></td>
</tr>
</table>
<font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font SIZE="3">接著要創建一個新的工具條資源,請按以下步驟進行:</p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">選擇</font><font FACE="Times New Roman" SIZE="3">Insert->Resource</font><font SIZE="3">命令,然后在</font><font FACE="Times New Roman" SIZE="3">Insert Resource</font><font SIZE="3">對話框中選中</font><font FACE="Times New Roman" SIZE="3">Toolbar</font><font SIZE="3">。按了</font><font FACE="Times New Roman" SIZE="3">OK</font><font SIZE="3">按鈕后,在</font><font FACE="Times New Roman" SIZE="3">Toolbar</font><font SIZE="3">資源類下就會出現一個</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">為</font><font FACE="Times New Roman" SIZE="3">IDR_TOOLBAR1</font><font SIZE="3">的新資源。</p>
<p ALIGN="JUSTIFY">在新工具條中加入兩個按鈕,如圖</font><font FACE="Times New Roman" SIZE="3">4.5</font><font SIZE="3">所示。每個按鈕上都畫了一些豎線,線稀的按鈕代表低頻率采樣,線密的按鈕代表高頻率采樣。</p>
<p ALIGN="center"><img src="T4_5.gif" alt="T4_5.tif (115754 bytes)" WIDTH="459" HEIGHT="234"></p>
<p ALIGN="center">圖</font><font FACE="Times New Roman" SIZE="3">4.5 </font><font SIZE="3">新創建的工具條資源</p>
<p ALIGN="JUSTIFY">分別為兩個新加的按鈕指定命令</font><font FACE="Times New Roman" SIZE="3">ID</font><font SIZE="3">為</font><font FACE="Times New Roman" SIZE="3">ID_LOW_QUALITY</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">ID_HIGH_QUALITY</font><font SIZE="3">。</font></p>
</blockquote>
</blockquote>
<p> <font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">要把這個新設計的工具條加入到程序中,需要在程序中加入一些與創建有關的源代碼。在創建第一個工具條時,</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">在程序中自動加入了創建源代碼,通過仿制這些代碼,我們很容易創建出第二個工具條。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">在</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">中,工具條的功能由類</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">實現。工具條實際上是主框架窗口的子窗口,因此工具條對象應該依附于主框架窗口對象。在</font><font FACE="Times New Roman" SIZE="3">AppWizard</font><font SIZE="3">創建的</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">程序中,主框架窗口的類名是</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">,該類是</font><font FACE="Times New Roman" SIZE="3">MFC</font><font SIZE="3">標準類</font><font FACE="Times New Roman" SIZE="3">CFrameWnd</font><font SIZE="3">類的派生類。將項目工作區切換至類視圖并展開</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">類,讀者會發現該類有一個名為</font><font FACE="Times New Roman" SIZE="3">m_wndToolbar</font><font SIZE="3">的成員。雙擊該成員,則</font><font FACE="Times New Roman" SIZE="3">Developer Studio</font><font SIZE="3">會自動打開類</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">所在的頭文件,并將光標停在對</font><font FACE="Times New Roman" SIZE="3">m_wndToolbar</font><font SIZE="3">成員的定義處。</font><font FACE="Times New Roman" SIZE="3"></p>
<div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="90%" bgcolor="#BBFFFF">
<tr>
<td width="100%"></font><b><font SIZE="3"><font SIZE="3">提示</font></font><font FACE="Times New Roman" SIZE="3">:</font><font SIZE="3"><font SIZE="3">在類視圖中雙擊某一個類名,則該類所在的頭文件會自動打開。若雙擊某一個類的成員,則會自動切換到對該成員的定義處。</font></font></b><font FACE="Times New Roman" SIZE="3"></td>
</tr>
</table>
</center></div><p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">對</font><font FACE="Times New Roman" SIZE="3">m_wndToolBar</font><font SIZE="3">的定義如下:</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">CToolBar m_wndToolBar;</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">由此可見</font><font FACE="Times New Roman" SIZE="3">m_wndToolBar</font><font SIZE="3">是一個</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">對象,它是</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">的成員。現在請緊接著該成員加入一個新的成員:</font><font FACE="Times New Roman" SIZE="3"><b></p>
<p ALIGN="JUSTIFY">CToolBar m_wndToolBar1;</b></p>
<p ALIGN="JUSTIFY">m_wndToolBar1</font><font SIZE="3">代表第二個工具條。讀者不要以為給</font><font FACE="Times New Roman" SIZE="3">CMainFrame</font><font SIZE="3">加入一個</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">對象就完事了。實際的創建工具條的工作不會在構造</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">對象時完成,只有調用了類</font><font FACE="Times New Roman" SIZE="3">CToolBar</font><font SIZE="3">的一些成員函數后,創建工作才能結束。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">對工具條的實際創建工作在</font><font FACE="Times New Roman" SIZE="3">CMainFrame::OnCreate</font><font SIZE="3">函數中完成。</font><font FACE="Times New Roman" SIZE="3">OnCreate</font><font SIZE="3">函數是在創建窗口時被調用的,這時窗口的創建已部分完成,窗口對象的</font><font FACE="Times New Roman" SIZE="3">m_hWnd</font><font SIZE="3">成員中存放的</font><font FACE="Times New Roman" SIZE="3">HWND</font><font SIZE="3">句柄也已有效,但窗口還是不可見的。因此一般在</font><font FACE="Times New Roman" SIZE="3">OnCreate</font><font SIZE="3">函數中作一些諸如創建子窗口的初始化工作。</font><font FACE="Times New Roman" SIZE="3"></p>
</font><font SIZE="3"><b><div align="center"><center><table border="2" cellpadding="2" cellspacing="0" width="90%" bgcolor="#BBFFFF">
<tr>
<td width="100%"></b>提示</font><font FACE="Times New Roman" SIZE="3">:</font><font SIZE="3">初學者一個易犯的錯誤是在構造函數而不是在</font><font FACE="Times New Roman" SIZE="3">OnCreate</font><font SIZE="3">中創建子窗口。在構造函數中,父窗口并沒有創建,如果在這時創建子窗口,則將會因為得不到父窗口的有效</font><font FACE="Times New Roman" SIZE="3">HWND</font><font SIZE="3">句柄而導致創建失敗。<b></td>
</tr>
</table>
</center></div></b></font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY"></font><font SIZE="3">找到</font><font FACE="Times New Roman" SIZE="3">CMainFrame::OnCreate</font><font SIZE="3">函數,對該函數進行一些修改,修改的部分如清單</font><font FACE="Times New Roman" SIZE="3">4.1</font><font SIZE="3">的黑體字所示。在以后,凡是程序中手工修改的部分,一般都會用黑體顯示。</font><b><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font> <font SIZE="3"></p>
<p ALIGN="JUSTIFY">清單</font><font FACE="Times New Roman" SIZE="3">4.1 </font><font SIZE="3">修改后的</font><font FACE="Times New Roman" SIZE="3">CMainFrame::OnCreate</font><font SIZE="3">函數</font></b><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">if (CFrameWnd::OnCreate(lpCreateStruct) == -1)</p>
<p ALIGN="JUSTIFY">return -1;</p>
<p ALIGN="JUSTIFY"> </p>
<p ALIGN="JUSTIFY">if (!m_wndToolBar.Create(this) ||</p>
<p ALIGN="JUSTIFY">!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">TRACE0("Failed to create toolbar\n");</p>
<p ALIGN="JUSTIFY">return -1; // fail to create</p>
<p ALIGN="JUSTIFY">}</p>
<p ALIGN="JUSTIFY"> </p>
<p> <b></p>
<p ALIGN="JUSTIFY">if (!m_wndToolBar1.Create(this) ||</p>
<p ALIGN="JUSTIFY">!m_wndToolBar1.LoadToolBar(IDR_TOOLBAR1))</p>
<p ALIGN="JUSTIFY">{</p>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -