关于Tab Control的问题

路过少年 2012-05-24 03:27:06
我的情况是这一个样子的,在主窗口中用了一个Tab控件,在其中添加了两个对话框,分别为DIALOG1和DIALOG2,在DIALOG1中有一些Text的控件,我定义CDialog1 dlg1,然后在主窗口的函数中调用dlg1.m_text.SetWindowText(str);//str为一个CString对象,但是出发了SetWindowsText的错误,我同时发现,dlg1中的控件可以在主窗口中初始化,但是不能主窗口改变,不知道为什么,是我调用的方式不对吗?求指教~
...全文
132 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
路过少年 2012-05-25
  • 打赏
  • 举报
回复
我把问题补充一下,麻烦大家再帮我看看:

在OnInitDialog()中,m_dlg1.Creat(IDD_CDIALOG1,&m_tab); SetTimer(0,50,NULL);
在OnTimer()中,调用一个UpDateContrl();
UpDateContrl()
{
..............
m_dlg1.m_text.SetWindowText(str);
..............
}

求解答~
Eleven 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我的情况是这一个样子的,在主窗口中用了一个Tab控件,在其中添加了两个对话框,分别为DIALOG1和DIALOG2,在DIALOG1中有一些Text的控件,我定义CDialog1 dlg1,然后在主窗口的函数中调用dlg1.m_text.SetWindowText(str);//str为一个CString对象,但是出发了SetWindowsText的错误,我同时发现,dlg1中的控件可以在主窗口中……
[/Quote]
dlg1.m_text.SetWindowText(str);出错,应该是你的窗口还没有创建吧,窗口没有创建,你就调用和窗口相关的函数当然就是非法了的。
robert_chao 2012-05-24
  • 打赏
  • 举报
回复
CDialog1* dlg1=new CDialog1();
dlg1->Create(id of thedialog);
就是要创建非模式对话框。模态对话框阻塞
路过少年 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

触发了SetWindowsText的错误是什么错误?而且像这样在主窗口dlg1.m_text.SetWindowText(str);个人比较少用。因为其封装性不好,如果能够专门写对话框直接的数据交互接口或者发消息我想比较好吧。
[/Quote]

恩 学习MFC时间不长,没怎么接触过发送消息的东西,正打算学习一下,其实一直不是很明白C++的这个封装性的问题,看来还是需要多学习~
路过少年 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

改成这样安全点
C/C++ code
if(NULL != dlg1.m_text.GetSafeHwnd())
{
dlg1.m_text.SetWindowText(str);
}
[/Quote]

恩 这样做看起来更好一点呢~
路过少年 2012-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

我定义CDialog1 dlg1,然后在主窗口的函数中调用dlg1.m_text.SetWindowText(str);//
==你还是对类与实例,以及对话框实例与窗框句柄的关系不清楚。
首先你说一下,放置在TAB控件中的DIALOG1的窗口对象你在哪里创建,创建的对象记录在哪里?
你说定义了CDialog1 dlg1,应该是你在想调用m_text.SetWindowText的时候临时定义……
[/Quote]
恩 您说的很有道理 现在明白一点了 我现在用指向那个窗口的指针去操作这个控件了,您觉得这样好不好呢?
gibsonboy 2012-05-24
  • 打赏
  • 举报
回复
触发了SetWindowsText的错误是什么错误?而且像这样在主窗口dlg1.m_text.SetWindowText(str);个人比较少用。因为其封装性不好,如果能够专门写对话框直接的数据交互接口或者发消息我想比较好吧。
尘中远 2012-05-24
  • 打赏
  • 举报
回复
改成这样安全点
if(NULL != dlg1.m_text.GetSafeHwnd())
{
dlg1.m_text.SetWindowText(str);
}
快乐鹦鹉 2012-05-24
  • 打赏
  • 举报
回复
我定义CDialog1 dlg1,然后在主窗口的函数中调用dlg1.m_text.SetWindowText(str);//
==你还是对类与实例,以及对话框实例与窗框句柄的关系不清楚。
首先你说一下,放置在TAB控件中的DIALOG1的窗口对象你在哪里创建,创建的对象记录在哪里?
你说定义了CDialog1 dlg1,应该是你在想调用m_text.SetWindowText的时候临时定义的吧。这个dlg1是你新定义的实例,和你之前在TAB控件中放置的窗口对象属于同一个类,但不是同一个实例。同时,由于对话框创建实例时,并不创建窗口句柄,因此,此时进行任何与窗口句柄相关的操作都会崩溃,比如你这里操作这个窗口上的m_text控件

===============================
我同时发现,dlg1中的控件可以在主窗口中初始化
==这要看你的dlg1实例是在哪里定义的。如果是在主窗口类中创建的,然后将其显示在TAB控件之上,那么进行初始化也没有什么不可以的。
路过少年 2012-05-24
  • 打赏
  • 举报
回复


顶一下 自己再去研究一下 等高人指教~

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧