现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

MFC列表控件、IP控件和树控件

2012-08-28 10:12 工业·编程 ⁄ 共 1768字 ⁄ 字号 暂无评论

一)列表控件(CListCtrl)

    了解一个单词先:Item行,一般我们都是用到位报表形式,即report,可以在列表控件的属性里设置.这里也只介绍这种形式.(一般都是会设置一个列表控件的变量)

1、其中InsertItem用于向列表控件插入一行,并设置第零列的值,如果有多列,该行其他列的值要使用SetItemText来设置数据。假设共3 列数据:

m_ListCtrl.InsertItem(cnt, "gg");//插入一行,cnt:行号从0开始计数
m_ListCtrl.SetItemText(cnt,1,"hh");
m_ListCtrl.SetItemText(cnt,2,"aa");

    插入一行数据必须先使用InsertItem插入此行的第0列数据,才能插入此行其他列数据。

    CString tempfieldroom = m_ListCtrl.GetItemText(IndexFieldlist, n);//IndexFieldlist为行号,n为列号都是从0行0列开始.

    在列表的响应函数中一般会用到鼠标点击某行时要得到这里的位置就会用到下面两个函数(在列表中单击鼠标时响应的是NM_CLIK消息)

POSITION pos = m_babyinfolist.GetFirstSelectedItemPosition();//得到位置
int IndexFieldlist = m_babyinfolist.GetNextSelectedItem(pos);//得到此时的行数,此时就可以利用

2、列表的变量是CONTRL型的,也就是它自己是有控制能力的.如果已经把列表显示出来了,对列表内容进行刷新。一般都是在列表所在父窗口类中定义函数,而此函数具有刷新列表的能力,在需要刷新的地方运行此函数.

二)IP控件

    IP控件的变量也是CONTRL型的,在一个对话框mydialog.DoModal()(这个函数就是显示功能)后,IP控件内地址会初始化,但不会存在IP控件变量里(列表控件,文本框CEdit都会保存在控件变量里)。

    一个父对话框,一个子对话框,子对话框里有IP控件,在父对话框里得到子对话框IP值。

1.在控件类里定义四个位型变量BYTE f1, f2, f3, f4;
2.在对应的按钮消息函数中将IP值保存到位变量里m_roomip.GetAddress(f1, f2, f3, f4);
疑问:如控OK键后响应一个函数,在父对话框内用
if ( mydialog.DoModal() == IDOK )
{
    ...........
}
在子对话框的IDOK键内有响应函数
void CMYDIALOG::ONIDOK()
{
    .......
}
这样在按下IDOK键后,会先响应哪个函数呢,当然这个能解决IP控件获取值的问题.
3.然后利用mydialog就可以利用IP地址了
CString myip;
myip.Format(_T("%d.%d.%d.%d"), mydialog.f1, mydialog.f2, mydialog.f3, mydialog.f4);
函数:
<1>设置IPm_roomip.SetAddress(0, 0, 0, 0);

三)树控件

    在树形控件中每一个结点都有一个句柄(HTREEITEM),同时添加结点时必须提供的参数是该结点的父结点句柄,利用HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );

    可以添加一个结点,pszItem为显示的字符,hParent代表父结点的句柄,当前添加的结点会排在hInsertAfter表示的结点的后面,返回值为当前创建的结点的句柄.
{
    HTREEITEM hroot, hitem;
    hroot = m_trmember.InsertItem("房间");
    hitem = m_trmember.InsertItem("101", hroot);
    m_trmember.InsertItem("1床", hitem);
    ........//上面即是(房间包含101,101包含1床,这样的三级
}

    所以只要了角添加的是哪个句柄( 即目录 )下的,没有就是根。

给我留言

留言无头像?