关于Tab Control的问题
我的情况是这一个样子的,在主窗口中用了一个Tab控件,在其中添加了两个对话框,分别为DIALOG1和DIALOG2,在DIALOG1中有一些Text的控件,我定义CDialog1 dlg1,然后在主窗口的函数中调用dlg1.m_text.SetWindowText(str);//str为一个CString对象,但是出发了SetWindowsText的错误,我同时发现,dlg1中的控件可以在主窗口中初始化,但是不能主窗口改变,不知道为什么,是我调用的方式不对吗?求指教~
[解决办法]
我定义CDialog1 dlg1,然后在主窗口的函数中调用dlg1.m_text.SetWindowText(str);//
==你还是对类与实例,以及对话框实例与窗框句柄的关系不清楚。
首先你说一下,放置在TAB控件中的DIALOG1的窗口对象你在哪里创建,创建的对象记录在哪里?
你说定义了CDialog1 dlg1,应该是你在想调用m_text.SetWindowText的时候临时定义的吧。这个dlg1是你新定义的实例,和你之前在TAB控件中放置的窗口对象属于同一个类,但不是同一个实例。同时,由于对话框创建实例时,并不创建窗口句柄,因此,此时进行任何与窗口句柄相关的操作都会崩溃,比如你这里操作这个窗口上的m_text控件
===============================
我同时发现,dlg1中的控件可以在主窗口中初始化
==这要看你的dlg1实例是在哪里定义的。如果是在主窗口类中创建的,然后将其显示在TAB控件之上,那么进行初始化也没有什么不可以的。
[解决办法]
改成这样安全点
if(NULL != dlg1.m_text.GetSafeHwnd()){ dlg1.m_text.SetWindowText(str);}
[解决办法]
触发了SetWindowsText的错误是什么错误?而且像这样在主窗口dlg1.m_text.SetWindowText(str);个人比较少用。因为其封装性不好,如果能够专门写对话框直接的数据交互接口或者发消息我想比较好吧。
[解决办法]
CDialog1* dlg1=new CDialog1();
dlg1->Create(id of thedialog);
就是要创建非模式对话框。模态对话框阻塞
[解决办法]