
创建单文档应用程序,在选择窗口视图类型时,选择CListView视图。
在视图类的初始化消息函数中添加如下显示控件的代码:
void CTestlistView::OnInitialUpdate()
{
CListView::OnInitialUpdate()
CDC* dc = GetDC()
TEXTMETRIC tm
dc->GetTextMetrics(&tm)
GetListCtrl().ModifyStyle(0,LVS_REPORT|LVS_SHOWSELALWAYS|LVS_SORTASCENDING)
GetListCtrl().SendMessage(LVM_SETEXTENDEDLISTVIEWSTYLE,0,
LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_CHECKBOXES|LVS_EX_TRACKSELECT)
GetListCtrl().InsertColumn(0,"Name",LVCFMT_LEFT,30*tm.tmAveCharWidth,0)
GetListCtrl().InsertColumn(1,"Comment",LVCFMT_LEFT,70*tm.tmAveCharWidth,1)
// TODO: You may populate your ListView with items by directly accessing
// its list control through a call to GetListCtrl().
}
1.假设你的窗口是模态窗口你的方法有很大问题
按下KEY,显示对话框
那么主线程就执行到子对话框中的代码
你的所谓"KEY回调函数"被阻塞
等子对话框终止后
"KEY回调函数"才恢复执行
那个时候对话框都没有了
做什么也没有效果了
在"KEY回调函数"内子对话框窗口类中的个变量还是有效的
但是子对话框中的子控件"List"已经销毁了
解决办法:
在子对话框的OnInitDialog函数中初始化你的List
而非在"KEY回调函数"中
2.如果是非模态对话框
那么"KEY回调函数"不会阻塞
你可以设置List内容
但是必须经过动态创建对话框类的实例并且调用Create创建对话框
如果这些没有做
那么仍旧是访问异常
3.DoDataExchange用于控件和某数据成员间建立一种隐射关系
不应该将它作为初始化函数使用
初始化一般数据可以使用构造函数
初始化子窗口可以使用OnInitDialog
4.关于ListCtrl
Dlg1.m_List.InsertItem(0,"行")//插入行
Dlg1.m_List.SetItemText(0,1,"列")//插入列
在SetItemText之前
请务必使用InsertColumn函数插入一列
不然你想插入的那一列根本不存在
或许也是一个访问异常的原因(我不确定会否异常,但这样做是不对的)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)