如何在一个对话框中访问另一个对话框的控件

wuxian1001 2011-01-09 11:59:14
我建了一个基于FormView的SDI窗口,然后在上面添加了按钮Button1
点击Button1后弹出对话框Dialog2,在Dialog2上有一个按钮Button2

现在的要求是点击Button2能改变Button1的显示值,请问该如何操作
...全文
316 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wltg2001 2011-01-09
  • 打赏
  • 举报
回复
用GetParent可以在Button2 中获取父窗口的指针,通过这个指针来操作上面的控件。
Gostorm 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wuxian1001 的回复:]

已发,麻烦你了
[/Quote]

测试后的代码已发到你邮箱!
wuxian1001 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 qfc8513 的回复:]

引用 15 楼 wuxian1001 的回复:

引用 14 楼 qfc8513 的回复:

你单步调试下,看具体问题出在哪部分代码了!

在GetDlgItem(IDC_BUTTON1)中发生错误,没有得到值

方便的话把代码发我邮箱吧:qifuchao@gmail.com我帮你看下!
[/Quote]
已发,麻烦你了
Gostorm 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wuxian1001 的回复:]

引用 14 楼 qfc8513 的回复:

你单步调试下,看具体问题出在哪部分代码了!

在GetDlgItem(IDC_BUTTON1)中发生错误,没有得到值
[/Quote]
方便的话把代码发我邮箱吧:qifuchao@gmail.com我帮你看下!
wuxian1001 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qfc8513 的回复:]

你单步调试下,看具体问题出在哪部分代码了!
[/Quote]
在GetDlgItem(IDC_BUTTON1)中发生错误,没有得到值
Gostorm 2011-01-09
  • 打赏
  • 举报
回复
你单步调试下,看具体问题出在哪部分代码了!
wuxian1001 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 qfc8513 的回复:]

可以先使用AfxGetMainWnd()先获得工程的CMainFrame实例的指针,然后使用GetActiveView()获取View的指针,这里说的View就是你继承自CFormView类的View类(在“工程名View.h”中的类),实例代码如下:

CMainFrame *wndFrm = (CMainFrame *)AfxGetMainWnd();
CTestView *wndV……
[/Quote]
用了这个方法,在按Button2时依然会出现debug assert error(line 245),出错的依然是SetWindowText
我创建对话框的代码是这样写的

void CTestView::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CMainFrame *wndfrm = (CMainFrame *)AfxGetMainWnd();
CTestView *wndview = (CTestView *)wndfrm->GetActiveView();

CDialog1 *cdlg = new CDialog1;
cdlg->Create(IDD_DIALOG1,wndview);
cdlg->ShowWindow(SW_SHOW);
}
Gostorm 2011-01-09
  • 打赏
  • 举报
回复
可以先使用AfxGetMainWnd()先获得工程的CMainFrame实例的指针,然后使用GetActiveView()获取View的指针,这里说的View就是你继承自CFormView类的View类(在“工程名View.h”中的类),实例代码如下:

CMainFrame *wndFrm = (CMainFrame *)AfxGetMainWnd();
CTestView *wndView = (CTestView *)wndFrm->GetActiveView();

例子中是一个名为Test的工程。

创建对话框的代码:
CDialog1 *cdlg=new CDialog1;
cdlg->Create(IDD_DIALOG1,wndView);
cdlg->ShowWindow(SW_SHOW);

在使用GetParent()->GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("A"))……
应该就OK了
wltg2001 2011-01-09
  • 打赏
  • 举报
回复
上面已经说了,用FindWindowEx吧,得到HWND,然后用API来改,很简单的。
wuxian1001 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qfc8513 的回复:]

引用 6 楼 wuxian1001 的回复:

引用 4 楼 oyljerry 的回复:

GetParent()->GetDlgItem(IDC_XXX)
IDC_XXX是Button2的ID


这个方法我试过
我当时是在BUTTON2的点击事件中写入
GetParent()->GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("A"))……
[/Quote]

怎样将FormView作为父窗体参数
是用CWnd::FindWindow来获取FormView窗体的值吗
wltg2001 2011-01-09
  • 打赏
  • 举报
回复
GetParent()->GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("A"))
这个应该是可以的,如果不行,可能是CFormView不是对话框造成的,你可以用FindWindowEx去找到CFormView窗口的句柄,然后接着找到CButton的句柄,用::SetWindowText来改变它。
Gostorm 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wuxian1001 的回复:]

引用 4 楼 oyljerry 的回复:

GetParent()->GetDlgItem(IDC_XXX)
IDC_XXX是Button2的ID


这个方法我试过
我当时是在BUTTON2的点击事件中写入
GetParent()->GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("A"))
但运行后会出现Debug Assert Erro……
[/Quote]

你创建对话框的语句中cdlg->Create(IDD_DIALOG1,NULL);把父窗口参数设为了NULL,用GetParent()就不管用了,如果想用GetParent(),在Create函数中将FormView作为父窗体参数.
Eleven 2011-01-09
  • 打赏
  • 举报
回复
修改Dialog2类的构造函数,创建Dialog2对话框的时候传入CFormView类的指针,
wuxian1001 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyljerry 的回复:]

GetParent()->GetDlgItem(IDC_XXX)
IDC_XXX是Button2的ID
[/Quote]

这个方法我试过
我当时是在BUTTON2的点击事件中写入
GetParent()->GetDlgItem(IDC_BUTTON1)->SetWindowText(_T("A"))
但运行后会出现Debug Assert Error,出错的好像是在SetWindowText这一句
请问是怎么回事

我创建Dialog2的方法是在BUTTON1的点击事件中添加
CDialog1 *cdlg=new CDialog1;
cdlg->Create(IDD_DIALOG1,NULL);
cdlg->ShowWindow(SW_SHOW);
  • 打赏
  • 举报
回复
你也可以把FormView对话框指针传到对话框中 通过该指针操作FormView中的按钮
oyljerry 2011-01-09
  • 打赏
  • 举报
回复
GetParent()->GetDlgItem(IDC_XXX)
IDC_XXX是Button2的ID
Dreadnought 2011-01-09
  • 打赏
  • 举报
回复
FindWindowEx获取此按钮的HWND 然后进行操作
wuxian1001 2011-01-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wltg2001 的回复:]

用GetParent可以在Button2 中获取父窗口的指针,通过这个指针来操作上面的控件。
[/Quote]

能具体地说一下吗
我最近才开始学mfc,很多东西不是很懂

15,978

社区成员

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

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