发现的一个道理是:
不仅仅是控件可以和值相关联,而且可以建立控件和一个类的关联。
具体来说就是,如果控件和一个值相关联,比如和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 阅读(709)
评论(0) 编辑 收藏 引用