?? chap10.html
字號:
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">獲得列表中包含的節點個數。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">IsEmpty()</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">檢查一個列表是否不含有任何節點。</P>
<P ALIGN="JUSTIFY">下面的程序將允許用戶添加和刪除節點,按照以下步驟進行:</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">1.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>使用</FONT><FONT SIZE=3>MFC AppWizard</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>創建一個單文檔應用程序</FONT><FONT SIZE=3>List</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">2.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>添加一個對話框類</FONT><FONT SIZE=3>CAddStudentDlg</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,其對應的對話框如圖</FONT><FONT SIZE=3>10.4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>所示。</P>
<P ALIGN="CENTER"><IMG SRC="Image295.gif" tppabs="http://166.111.167.223/computer/cai/visual_c++_5.0_programming/Image295.gif" WIDTH=191 HEIGHT=133></P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">圖</FONT><FONT SIZE=1>10. 4 </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1>添加節點對話框</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">3.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>為兩個文本框映射兩個變量</FONT><FONT SIZE=3>m_name</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,</FONT><FONT SIZE=3>m_score</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">4.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>添加一個對話框類</FONT><FONT SIZE=3>CRemoveStudentDlg</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,其對應的對話框如圖</FONT><FONT SIZE=3>10.5</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>所示。兩個單選按鈕的</FONT><FONT SIZE=3>ID</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>為</FONT><FONT SIZE=3>IDC_REMOVE0</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>IDC_REMOVE1</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>。</P>
<P ALIGN="CENTER"><IMG SRC="Image296.gif" tppabs="http://166.111.167.223/computer/cai/visual_c++_5.0_programming/Image296.gif" WIDTH=183 HEIGHT=135></P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">圖10. 5 刪除節點對話框</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">5.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>為對話框類添加一個</FONT><FONT SIZE=3>UINT</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>類型的成員變量</FONT><FONT SIZE=3>m_radio</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">6.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>在</FONT><FONT SIZE=3>OnInitDialog()</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>函數中設置單選按鈕的初始狀態。</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>BOOL CRemoveStudentDlg::OnInitDialog() </P>
<P>{</P>
<P>	CDialog::OnInitDialog();</P>
<P>	</P>
<P>	// TODO: Add extra initialization here</P>
<P>	((CButton*)GetDlgItem(IDC_REMOVE0))->SetCheck(1);</P>
<P>	return TRUE; // return TRUE unless you set the focus to a control</P>
<P>	 // EXCEPTION: OCX Property Pages should return FALSE</P>
<P>}</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">7.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>為了知道用戶選擇了哪一個單選按鈕,在</FONT><FONT SIZE=3>OnOk()</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>函數中添加下面的代碼。</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>void CRemoveStudentDlg::OnOK() </P>
<P>{</P>
<P>	// TODO: Add extra validation here</P>
<P>	UINT nRadio=GetCheckedRadioButton(IDC_REMOVE0,IDC_REMOVE1);</P>
<P>	switch(nRadio)</P>
<P>	{</P>
<P>	case IDC_REMOVE0:</P>
<P>		m_radio=0;</P>
<P>		break;</P>
<P>	case IDC_REMOVE1:</P>
<P>		m_radio=1;</P>
<P>		break;</P>
<P>	default:</P>
<P>		break;</P>
<P>	}</P>
<P>	CDialog::OnOK();</P>
<P>}</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">8.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>在</FONT><FONT SIZE=3>ListView.h</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>中</FONT><FONT SIZE=3>CListView</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>類的聲明之前添加如下代碼,用來定義一個結構體</FONT><FONT SIZE=3>CStudent</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,包含兩個變量</FONT><FONT SIZE=3>m_name</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>和</FONT><FONT SIZE=3>m_score</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>,分別用于存放學生的姓名和成績。</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>struct CStudent</P>
<P>{</P>
<P>	CString m_name;</P>
<P>	int m_score;</P>
<P>};</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">9.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>為</FONT><FONT SIZE=3>ClistView</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>添加一個類型為</FONT><FONT SIZE=3>CptrList</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>的成員變量</FONT><FONT SIZE=3>m_list</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">10.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>在</FONT><FONT SIZE=3>ListView.cpp</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>中添加下列語句:</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>#include "AddStudentDlg.h"</P>
<P>#include "RemoveStudentDlg.h"</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">11.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>當用戶單擊左鍵后,彈出如圖</FONT><FONT SIZE=3>10.4</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>所示的對話框,可以添加一個節點。對應的OnLButtonDown()函數代碼如下:</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>void CMyListView::OnLButtonDown(UINT nFlags, CPoint point) </P>
<P>{</P>
<P>	// TODO: Add your message handler code here and/or call default</P>
<P>	CAddStudentDlg dialog;</P>
<P> dialog.m_name = "";</P>
<P> dialog.m_score = 0 ;</P>
<P> // Display the dialog box.</P>
<P> int result = dialog.DoModal();</P>
<P> if (result == IDOK)</P>
<P> {</P>
<P> // Create and initialize the new node.</P>
<P> CStudent* m_pStudent = new CStudent;</P>
<P> m_pStudent->m_name = dialog.m_name;</P>
<P> m_pStudent->m_score = dialog.m_score;</P>
<P> // Add the node to the list.</P>
<P> m_list.AddTail(m_pStudent);</P>
<P> // Repaint the window.</P>
<P> 		Invalidate();</P>
<P> }</P>
<P>	CView::OnLButtonDown(nFlags, point);</P>
<P>}</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">12.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>當用戶單擊右鍵后,彈出如圖</FONT><FONT SIZE=3>10.5</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>所示的對話框,可以刪除一個節點。對應的OnRButtonDown()函數代碼如下:</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>void CMyListView::OnRButtonDown(UINT nFlags, CPoint point) </P>
<P>{</P>
<P>	// TODO: Add your message handler code here and/or call default</P>
<P>	CRemoveStudentDlg dialog;</P>
<P> dialog.m_radio = 0;</P>
<P> // Display the dialog box.</P>
<P> int result = dialog.DoModal();</P>
<P> // If the user clicked the OK button...</P>
<P> if (result == IDOK)</P>
<P> {</P>
<P> CStudent* m_pStudent=new CStudent;</P>
<P> // Make sure the list isn't empty.</P>
<P> if (m_list.IsEmpty())</P>
<P> MessageBox("節點已經全部刪除!");</P>
<P> else</P>
<P> {</P>
<P> // Remove the specified node.</P>
<P> if (dialog.m_radio == 0)</P>
<P> m_pStudent = (CStudent*)m_list.RemoveHead();</P>
<P> else</P>
<P> m_pStudent = (CStudent*)m_list.RemoveTail();</P>
<P> // Delete the node object and repaint the window.</P>
<P> delete m_pStudent;</P>
<P> Invalidate();</P>
<P> 		}</P>
<P> }</P>
<P>	CView::OnRButtonDown(nFlags, point);</P>
<P>}</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">13.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>最后設置</FONT><FONT SIZE=3>OnDraw</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>()函數用來響應</FONT><FONT SIZE=3>Invalidate()</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>。</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>void CMyListView::OnDraw(CDC* pDC)</P>
<P>{</P>
<P>	CListDoc* pDoc = GetDocument();</P>
<P>	ASSERT_VALID(pDoc);</P>
<P>	// TODO: add draw code for native data here</P>
<P> TEXTMETRIC textMetric;</P>
<P> pDC->GetTextMetrics(&textMetric);</P>
<P> int fontHeight = textMetric.tmHeight;</P>
<P> // Initialize values used in the loop.</P>
<P> POSITION pos = m_list.GetHeadPosition();</P>
<P> int displayPosition = 10;</P>
<P> // Iterate over the list, displaying each node's values.</P>
<P> while (pos != NULL)</P>
<P> {</P>
<P> 	CStudent* m_pStudent = (CStudent*)m_list.GetNext(pos);</P>
<P> 	char s[81];</P>
<P> 	wsprintf(s, " 的成績是 %d.",m_pStudent->m_score);</P>
<P>			CString m_string=m_pStudent->m_name+s;</P>
<P> 	pDC->TextOut(10, displayPosition, m_string);</P>
<P> 	displayPosition += fontHeight;</P>
<P> }</P>
<P>}</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3><P ALIGN="CENTER"><IMG SRC="Image297.gif" tppabs="http://166.111.167.223/computer/cai/visual_c++_5.0_programming/Image297.gif" WIDTH=280 HEIGHT=201></P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P ALIGN="CENTER">圖</FONT><FONT SIZE=1>10. 6 </FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1>程序運行的初始窗口</P>
</FONT><FONT SIZE=3><P ALIGN="JUSTIFY">14.	</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>最后在</FONT><FONT SIZE=3>CListView</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=3>的析構函數中刪除數組中所有的節點。</P>
</FONT><FONT FACE="宋體" LANG="ZH-CN" SIZE=1><P>CMyListView::~CMyListView()</P>
<P>{</P>
<P>	while (!m_list.IsEmpty())</P>
<P> {</P>
<P> CStudent* m_pStudent = (CStudent*)m_list.RemoveHead();</P>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -