listctrl设置下拉框

listctrl设置下拉框,第1张

5.9

百度文库VIP限时优惠 现在开通,立享6亿+VIP内容

立即获取

MFC下拉框与listctrl列表控件

MFC下拉框与listctrl列表控件

combo box 下拉框

添加数据 属性 data 以; 为分隔符

Type 默认是dropdown 下拉框的值可修改,可以改成下拉列表,只选模式

sort 默认排序的(⾥⾯的数据是默认排序的)

// TODO: 在此添加额外的初始化代码

//下拉框添加

m_combox.AddString(TEXT("12345"))

m_combox.AddString(TEXT("憨憨"))

//设置默认选项,根据索引

m_combox.SetCurSel(7)

//根据索引插⼊

第 1 页

m_combox.InsertString(5,TEXT("55555"))

//根据索引删除

m_combox.DeleteString(3)

//获取索引的内容

/*CString str

m_combox.GetLBText(5, str)

MessageBox(str)*/

return TRUE// 除⾮将焦点设置到控件,否则返回 TRUE

}

//当下拉框选项有改动时触发该事件

void CmfccomboxDlg::OnCbnSelchangeCombo1()

第 2 页

{

// TODO: 在此添加控件通知处理程序代码

CString str

m_combox.GetLBText(5, str)//把5号索引的选项保存⾄str

MessageBox(str)

}

listctrl

view 改变选项的类型,icon图标,small icon ⼩图标,report 报表模式

// TODO: 在此添加额外的初始化代码

//设置表头,索引内容对齐⽅式列宽度

m_list.InsertColumn(0,TEXT("姓名"), LVCFMT_

第 3 页

LEFT,100)

m_list.InsertColumn(1,TEXT("性别"), LVCFMT_LEFT,100)

//设置正⽂

m_list.InsertItem(0,TEXT("张三"))

m_list.SetItemText(0,1,TEXT("男"))

//下⾯是不⾏的

//m_list.SetItemText(1, 0, TEXT("李四"))

//这样才可以

m_list.InsertItem(1,TEXT("李四"))

m_list.SetItemText(1,1,TEXT("男"))

//设置整⾏选中并显⽰⽹格

(1) 实现自定义行高。

我们都知道,mfc 自带的 listctrl 控件的行高是固定的,不能够自定义的进行改变。如果设置一个比较大位图,或者简单的设置比较大号的字体,这些方法虽然能够改变行高,但是没有接触到问题的实质。我们使用消息反射机制来实现自定义行高。有关消息反射机制,请参见 msdn 。实现自定义行高的 listctrl 基于以下事实:当我们给 listctrl 发送 WM_WINDOWPOSCHANGED消息时,也就是告诉 listdctrl 控件大小、位置等发生变化,这时候 listctrl 控件就会触发 WM_MEARSURITEM 消息,当然这个是反射消息。通过映射这个消息,我们就可以改变 listctrl 控件的行高。当然还要设置 listctrl 的 Owen Draw Fixed 风格, WM_MEARSURITEM 只有在 Owen Draw Fixed 风格才有效。

总结一下,如果要创建自定义行高的listctrl ,大概要以下步骤:

(1) 定义新类,继承listctrl ,设置 Owen Draw Fixed 风格,并且手动映射 ON_WM_MEASUREITEM_REFLECT 消息。

(2) 增加设置行高的接口,通过设置发送WM_WINDOWPOSCHANGED 消息引发 ON_WM_MEASUREITEM_REFLECT 消息,例如:

void CListEx::SetItemHeight(UINT nHeight)

{

m_nItemHeight = nHeight

CRect rcWin

GetWindowRect(&rcWin)

WINDOWPOS wp

wp.hwnd = m_hWnd

wp.cx = rcWin.Width()

wp.cy = rcWin.Height()

wp.flags = SWP_NOACTIVATE | SWP_NOMOVE |SWP_NOOWNERZORDER | SWP_NOZORDER

SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp)

}

(2) 映射 ON_WM_MEASUREITEM_REFLECT 反射消息,在反射消息里设置行高, 例如:

void CListEx ::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)

{

lpMeasureItemStruct->itemHeight = m_nItemHeight

}

(3) 完成控件自绘函数,CListEx::DrawItem 。自此,自定义设置行高功能已经实现。

三、 增加编辑功能

增加编辑功能一般的思路,就是在单击或双击的时候,创建一个CEDIT 编辑框,然后把编辑框覆盖当前的 subitem 上,并且使编辑框获取焦点。当编辑框失去焦点时,把编辑框里的文字,显示到 listctrl 控件上,就可以了。为了能够使控件知道何时显示编辑框中的文字,所以还有重写编辑框,当编辑框失去焦点时,通过消息通知 listctrl 控件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11324753.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存