發現的一個道理是:
不僅僅是控件可以和值相關聯,而且可以建立控件和一個類的關聯。
具體來說就是,如果控件和一個值相關聯,比如和CString類型的值,或者int,或者float等等,那么就會相應的將控件的內容轉化成對應的類型。
但是,如果將控件和類類型關聯,就是一種映射,此時,這個關聯的名字,就是這個控件的別名,而且,由于對應的控件,所以會有相應的類函數。比如是CEdit類型的控件,對應的就是CEdit類型的變量,此時,就會有相應的方法。而如果是對應的基本類型,比如CString,int,則不會有這個類型的函數可以提供操作。
于是,更多的,就是使用這個別名的類型,因為對于一個類類型的變量,是可以調用相應的很多的方法的,從而利用提供的API函數,完成更多的功能。
不懂的內容可以查MSDN,特別是對于CEdit類型,有很多提供的API可以供查詢。
貼代碼:
void CTest16Dlg::OnCopy()


{
// TODO: Add your control notification handler code here
m_edit1.SetSel(0,-1);
m_edit1.Copy();
m_edit2.SetSel(0,-1);
m_edit2.ReplaceSel("");
m_edit2.Paste();
}

void CTest16Dlg::OnCut()


{
// TODO: Add your control notification handler code here
m_edit1.SetSel(0,-1);
m_edit1.Copy();
m_edit1.ReplaceSel("");
m_edit2.SetSel(0,-1);
m_edit2.ReplaceSel("");
m_edit2.Paste();
}

void CTest16Dlg::OnExit()


{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}

void CTest16Dlg::OnClear()


{
// TODO: Add your control notification handler code here
m_edit1.SetSel(0,-1);
m_edit1.ReplaceSel("");
m_edit2.SetSel(0,-1);
m_edit2.ReplaceSel("");
}

void CTest16Dlg::OnUndo()


{
// TODO: Add your control notification handler code here
m_edit1.Undo();
m_edit2.Undo();
}


主要的幾個函數就是如上,關鍵的要理解控件的關聯。。。
第二個就是ListBox地址控件的操作:
void CTest18Dlg::OnAdd()


{
// TODO: Add your control notification handler code here
int index,test;
UpdateData(TRUE); //將控件的內容寫入變量中
test = m_ListBox.FindStringExact(-1,m_name); //查找是否有和m_name同名的項
if(test != LB_ERR) //含有同名的,返回值test為索引值,否則為LB_ERR
return ; //此處返回的如果不是LB_ERR,那么就含有同名的,添加失敗,直接返回
index = m_ListBox.AddString(m_name);
m_ListBox.SetItemData(index,m_id); //將相應的索引值和一個id綁定關聯
UpdateData(FALSE); //變量的內容寫入控件
GetDlgItem(IDC_BUTTON2)->EnableWindow(TRUE); //使刪除鍵可以用
}

void CTest18Dlg::OnDelete()


{
// TODO: Add your control notification handler code here
int index;
index = m_ListBox.GetCurSel(); //獲得當前的索引項
m_ListBox.DeleteString(index); //刪除這個索引項
index = m_ListBox.GetCurSel();
if(index == LB_ERR) //如果為空,則使得刪除鍵不可用
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
}

void CTest18Dlg::OnExit()


{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}



void CTest18Dlg::OnSelchangeList() //響應鼠標選擇ListBox控件的動作,
//具體來說就是當選擇了某一項的時候,在姓名和對于的對話框中顯示信息,對于的姓名和id。


{
// TODO: Add your control notification handler code here
int nIndex = m_ListBox.GetCurSel();
m_ListBox.GetText(nIndex,m_name);
m_id = m_ListBox.GetItemData(nIndex);
UpdateData(FALSE);
}

功能就是:
一個是使用ListBox,通過添加姓名和學號來向表項中添加姓名,同時,對于一個對應的姓名,當選擇的時候,顯示對應的ID和姓名。
實現ListBox和右邊的編輯框的同步。
最后一個就是IP控件的使用:
void CTest17Dlg::OnButton1()


{
// TODO: Add your control notification handler code here
BYTE nField0;
BYTE nField1;
BYTE nField2;
BYTE nField3;
CString show_IP;
int num;
if(m_IPCtrl.IsBlank())
MessageBox("請輸入IP地址");

else
{
num = m_IPCtrl.GetAddress(nField0,nField1,nField2,nField3);

if(num == 4)
{
show_IP.Format("%d.%d.%d.%d.",nField0,nField1,nField2,nField3);
MessageBox(show_IP);
}

else
{
MessageBox("請輸入完整的IP地址!");
}
}
}

void CTest17Dlg::OnButton2()


{
// TODO: Add your control notification handler code here
CDialog::OnCancel();
}

其實控件的使用,API的查詢,很大程度上都是需要自己去摸索的,于是,很多時候不是什么記憶,而是練習才是最重要的。
這里寫下來這些,一則是為了熟悉,二則是為了怕以后忘記而寫下點體會。雖然很淺陋,不過作為學習過程的體會,還是多多益善啊!
閱讀MFC程序的幾點體會:

首先,切換到類屬性圖中,看看有那些成員,此時特別要注意的就是沒有見過的成員,因為這個很可能就是用戶添加的,進入到這些函數,就可以弄清楚他們的具體作用。
其次,看看里面有哪些成員,就是以m_開頭的成員變量,因為它們很可能就是用戶添加的標志位,或者是為控件捆綁的變量名,要么是值捆綁(value),要么是控制捆綁(control)
此時如果相確認,就要到ClassWizard中查看。
至于具體的函數,則可以查詢API,不要看程序很多,實際的代碼,用戶添加的代碼,不是很多的。。。。
posted on 2010-02-06 18:18
deercoder 閱讀(720)
評論(0) 編輯 收藏 引用