MFC 如何向子窗口发送消息,子窗口是在tab control下的模态窗口?

子窗口获得父窗口是使用 pWnd1 = GetParent()->GetParent();
父窗口获得子窗口我这样写pWnd = GetDlgItem(IDC_TAB1)->GetDlgItem(IDD_ANIMATION_DIALOG)
::SendMessage(pWnd->m_hWnd,WM_TEST_MESSAGE,m_tab.GetCurSel(),NULL);
程序崩溃了,获取串口指针有问题吧

GetDlgItem不能用来获取tab控件下的对话框。

你需要通过GetDlgItem(IDC_TAB1)获取并转换为CTabCtrl指针,然后通过CTabCtrl的GetItem函数来获取到对应位置的嵌套对话框。追问

GetItem();获得的是tab选项卡的文本?
怎么用GetItem呢

CTabCtrl *m_tab1 = (CTabCtrl*)GetDlgItem(IDC_TAB1);

追答

GetItem的用法参考InsertItem,它们是对等函数,用法基本一致,你插入的对话框,那么就是可获取对话框。当然,不能用TCIF_TEXT方式。

m_tab1 获取正确。
另外一种方式获取子对话框:
因为你的对话框都是在主对话框函数内创建的,创建的过程完全可以通过类成员函数保留子对话框指针,那么这个指针,在主对话框的其它函数内都是可以正常使用的,直接拿来用即可,不需要获取。

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-04-11
父窗口 ID ID_TEST 控件.

::SendMessage( GetDlgItem(父窗口ID) ->GetSafeHandle,ID_TEST,0,0); 效

::SendMessage( GetParent->GetSafeHandle,ID_TEST,0,0); 效
面功?
非模态窗口,应该没用GetParent吧, 要何向父窗口发送消息?追问

我是父窗口向子窗口发送消息,上面的语句运行错误:“GetSafeHandle”: 不是“CWnd”的成员

本回答被网友采纳

MFC 如何向子窗口发送消息,子窗口是在tab control下的模态窗口?
GetDlgItem不能用来获取tab控件下的对话框。你需要通过GetDlgItem(IDC_TAB1)获取并转换为CTabCtrl指针,然后通过CTabCtrl的GetItem函数来获取到对应位置的嵌套对话框。

MFC中tab控件下子对话框切换问题
问题出在CDialog的缺省消息处理函数没有把切换按键的消息转发给父窗口,因此,在子对话框活动期间,实际上主窗口是得不到按键消息的。解决方案是你不要基于CDialog做tab的子窗口,应该使用面板类。如果你一定想用CDialog,那么你需要重载CDialog的键盘处理消息函数,让tab切换键的消息向父窗口转发由父窗口...

mfc下tab control控件子对话框无显示
m_tab.InsertItem(0,"实时数据展示"); \/\/添加参数一选项卡 m_tab.InsertItem(1,"历史数据查询"); \/\/添加参数二选项卡\/\/m_tab.InsertItem(2,"基本信息配置"); \/\/添加参数三选项卡\/\/设置IDC_TAB为父窗口m_page1.Create(IDD_REALTIMEDATADLG,GetDlgItem(IDC_TEMPTAB));m_page2.Crea...

MFC tab control中的子级child对话框有一个按钮,如何通过这个按钮把整个...
主dlg点击弹出tab窗口时,先隐藏,然后用domodle弹出你的tab窗口,你点上图那个确定时,用OnOk()退出 ,主dlg会接着执行doModle()后的代码,在后面的代码你可以将主dlg再显示出来 如果你知道窗口句柄的话,一般都是用SendMessage(WM_CLOSE)关闭某窗口,具体参数我忘了,你百度吧 ...

如何实现MFC关闭子窗口时刷新父窗口的内容
子窗口是非模态窗口?那就发消息:在父窗口中自定义消息#define WM_MSG WM_USER+0x01 添加消息处理函数 LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam)加入消息映射ON_MESSAGE(WM_MSG, OnMyMessage)在OnMyMessage中刷新好友 在子窗口中,给父窗口发消息SendMessage(GetParent(), WM_MSG, 0, 0)

MFC如何创建一个子窗口?
注:该过程适用于VC6.0版本,建立模态窗口。第一步:添加资源 Insert->Resource,然后选中Dialog,然后点击New,如下图。第二步:为该新资源添加类。切换到ResourceView,双击刚才添加的对话框,然后在弹出的提示框里选择“Create a new class”,然后点击OK,你会看到如下对话框 为这个类命名,只修改...

C++ MFC 简单的获取窗口,。为什么总是得不到窗口
需要以下几个条件:第一参数必须指定明确的父窗口,如果为NULL,则是获取顶层窗口(即,父窗口为桌面);被查找窗口(控件)必须和第二参数是明确的父子关系,且子窗口不是模态窗口(模态窗口有些特殊,一般不这样获取);子窗口获取可能不是一次成功,如果类似子窗口很多,可能需要判断hwndChildAfter。

vc 子窗口怎么调用父窗口的函数和变量啊?
{ ...} 需要访问的时候: m_pMainDlg->m_SomeVal;当然,如果知道主对话框是子窗口的爷爷,也可以GetParent()->GetParent();★方法2 1、使用消息进行通信,注册消息。添加消息:UINT WM_ACCESS = ReginsterWndMessage();或者直接定义 #define WM_ACCESS ( WM_USER + 1 )2、定义变量序号:defin...

关于C++MFC窗口控件句柄获取问题
从你图中代码,无法判断需要获取的是否是顶层窗口,如果是,那么第一参数要写ClassName,而不是你的资源号,比如这样:CWnd* pwnd = FindWindow(NULL,_T("资源管理器"));如果是希望获取子窗口,在MFC下不推荐使用这两个函数。另外,报错是因为在UNICODE字符集的工程下,第一参数需要使用宽字节字符串...

MFC如何实现对话框见的切换?
1,新建对话框类ADlg,类BDlg,并且把属性设置为Child, border属性设置为None 2,把ADlg类,BDlg类的生命周期设置为主对话框成员函数,或者静态,或者全局,反正不要弄成局部变量就行 3,你可以在主对话框里面设置一个组合框 ID=IDC_Groupbox,为了的把它设置为新建对话框ADlg,BDlg的父窗口,...

相似回答