分享

MFCListControl控件添加单元格编辑和单元格下拉列表项以适用于数据库相关操作

 strangedbly 2015-12-21
void CNephoVisionDatabaseDlg::createEdit(NM_LISTVIEW  *pEditCtrl, CEdit *createdit, int &Item, int &SubItem, bool &havecreat)//创建单元格编辑框函数
                                                                                //pEditCtrl为列表对象指针,createdit为编辑框指针对象,
                                                                                //Item为创建单元格在列表中的行,SubItem则为列,havecreat为对象创建标准
{
    Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
    SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
    createdit->Create(ES_AUTOHSCROLL | WS_CHILD | ES_LEFT | ES_WANTRETURN,
        CRect(0, 0, 0, 0), this, IDC_EDIT_CREATEID);//创建编辑框对象,IDC_EDIT_CREATEID为控件ID号3000,在文章开头定义
    havecreat = true;
    createdit->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉
    createdit->SetParent(&m_list);//将list control设置为父窗口,生成的Edit才能正确定位,这个也很重要
    CRect  EditRect;
    m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息
    EditRect.SetRect(EditRect.left+1, EditRect.top+1, EditRect.left + m_list.GetColumnWidth(e_SubItem)-1, EditRect.bottom-1);//+1和-1可以让编辑框不至于挡住列表框中的网格线
    CString strItem = m_list.GetItemText(e_Item, e_SubItem);//获得相应单元格字符
    createdit->SetWindowText(strItem);//将单元格字符显示在编辑框上
    createdit->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上
    createdit->ShowWindow(SW_SHOW);//显示编辑框在单元格上面
    createdit->SetFocus();//设置为焦点
    createdit->SetSel(-1);//设置光标在文本框文字的最后
}
void CNephoVisionDatabaseDlg::distroyEdit(CListCtrl *list,CEdit* distroyedit, int &Item, int &SubItem)
{
    CString meditdata;
    distroyedit->GetWindowTextW(meditdata);
    list->SetItemText(Item, SubItem, meditdata);//获得相应单元格字符
    distroyedit->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错
}
void CNephoVisionDatabaseDlg::createCcombobox(NM_LISTVIEW  *pEditCtrl, CComboBox *createccomboboxobj, int &Item, int &SubItem, bool &havecreat)//创建单元格下拉列表框函数
//pEditCtrl为列表对象指针,createccombobox为下拉列表框指针对象,
//Item为创建单元格在列表中的行,SubItem则为列,havecreat为对象创建标准
{
    Item = pEditCtrl->iItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
    SubItem = pEditCtrl->iSubItem;//将点中的单元格的行赋值给“刚编辑过的行”以便后期处理
    havecreat = true;
    createccomboboxobj->Create(WS_CHILD | WS_VISIBLE |  CBS_DROPDOWN | CBS_OEMCONVERT, CRect(0, 0, 0, 0), this, IDC_COMBOX_CREATEID);
    createccomboboxobj->SetFont(this->GetFont(), FALSE);//设置字体,不设置这里的话上面的字会很突兀的感觉
    createccomboboxobj->SetParent(&m_list);//将list control设置为父窗口,生成的Ccombobox才能正确定位,这个也很重要
    CRect  EditRect;
    m_list.GetSubItemRect(e_Item, e_SubItem, LVIR_LABEL, EditRect);//获取单元格的空间位置信息
    EditRect.SetRect(EditRect.left + 1, EditRect.top + 1, EditRect.left + m_list.GetColumnWidth(e_SubItem) - 1, EditRect.bottom - 1);//+1和-1可以让编辑框不至于挡住列表框中的网格线
    CString strItem = m_list.GetItemText(e_Item, e_SubItem);//获得相应单元格字符
    createccomboboxobj->SetWindowText(strItem);//将单元格字符显示在编辑框上
    createccomboboxobj->MoveWindow(&EditRect);//将编辑框位置放在相应单元格上
    createccomboboxobj->ShowWindow(SW_SHOW);//显示编辑框在单元格上面
}
void CNephoVisionDatabaseDlg::distroyCcombobox(CListCtrl *list, CComboBox* distroyccomboboxobj, int &Item, int &SubItem)
{
    CString meditdata;
    distroyccomboboxobj->GetWindowTextW(meditdata);
    list->SetItemText(Item, SubItem, meditdata);//更新相应单元格字符
    distroyccomboboxobj->DestroyWindow();//销毁对象,有创建就要有销毁,不然会报错
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多