VC关于子窗口中的LIST控件在主窗口中调用问题!加分++

来源:百度知道 编辑:UC知道 时间:2024/07/04 06:31:30
我想问个问题:
我在主窗口中创建一个按键(key),当按下此按键后弹出一个子窗口(Dlg1),在Dlg1中我有个LIST Control的列表控件(m_LIST1)。
问题:
我在主窗口key的回调函数中对子窗口Dlg1中的列表进行初始化(即我想按下key后在弹出的子窗口Dlg1的列表中显示我预定的数据,其中我在Dlg1.cpp中的DoDataExchange()函数中对LIST控件进行了初始化,并且LIST是以report的方式显示)。比如我想在key的回调函数中对LIST1进行如下初始化:
Dlg1.m_List.InsertItem(0,"行");//插入行
Dlg1.m_List.SetItemText(0,1,"列");//插入列

编译能通过,但是运行后一按下key键的时候就会弹出“终止、忽略、重试”对话框……无法继续运行!
不知道是什么原因呢?难道不能这样用?但是我在key的回调函数中对子窗口Dlg1中的EDIT赋值初始化又可以呢…… 初学VC肯定是我哪里没理解对,请高手指教……最佳答案加分!
感谢两位的回答。特别是天下有敌。我是建立的模态对话框,我把对子窗口LIST的初始化放在Dlg1中的OnInitDialog中了,初始化没问题。不过我最终要实现的目的是按下key键后,子窗口LIST中显示主窗口LIST中的部分内容。我在子窗口的初始化中读主窗口LIST中的内容,同样编译通过运行报错……这个问题可能也是天下有敌所说的“List 已销毁”吧……用其他什么实现此功能 呢?

Idealsoft的方法想过,但是还不会,正在学习中……

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函数插入一列

不然你想插入的那一列根本不存在

或许也是一个访问异常的原因(我不确定会否异常,但这样做是不对的)

啊哈,