两个对话框类A和B,在A中通过DoModal调用B,同时将当前指针传过去,如: 两个对话框类A和B,在A中通过DoModal调用B,同时将当前指针传过去,如:CADlg theDlg(this,....);theDlg.DoModal();问题:我在B中要修改A的一个属性,怎么通过this指针修改呢?非常感谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 最常用的办法是:在B中申明一个A类的对象,然后用a.属性=""但这种方法已经被排除,哪位能说一下其他方法啊,非常感谢! 类B的构造函数如下:pParent就是传过来的A指针,怎么利用pParent来修改A的属性呢?下一步该怎么做?PolicyDlg::CPolicyDlg(CWnd* pParent ,PCExpertEventManager pExpertEventManager, CAMActionStrObjMap& ActionsMap,EVENT_TYPE AlarmID,UINT ActionIndex, CMap<UINT, UINT, CString,CString&>* pAclMap /*= NULL*/):m_ActionsMap(ActionsMap),CDialog(CPolicyDlg::IDD, pParent){ //{{AFX_DATA_INIT(CPolicyDlg) //}}AFX_DATA_INIT m_pExpertEventManager = pExpertEventManager; m_AlarmID = AlarmID;....} 将pParent强制转换为A类对象的指针,通过调用A的成员函数修改。 A并非是B的父类。为何你不能记录A对象的指针呢? http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=203350 各位大侠能不能说具体一点呢,好急啊还是不行,在B类中引用A类时编译通不过,我加了#include "A.h"可就是不识别A 还是不行,在B类中引用A类时编译通不过,我加了#include "A.h"可就是不识别A==怎么加的?将工程发到[email protected]。马上搞定 这是A类部分头文件,我定义了一个布尔变量:m_bChanged;class CPolicyManagement : public CSkinDialog{// Constructionpublic: CPolicyManagement(CWnd* pParent, PCExpertEventManager pExpertEventManager,UINT nAutoFocusPolicyId=-1,bool bConsoleMode=false,LPCTSTR pProfileName=NULL, CMap<UINT, UINT, CString, CString&>* pAclMap= NULL); // standard constructor ~CPolicyManagement(); // standard destructor....public: BOOL m_bChanged;}在A类中一个函数:void CPolicyManagement::OnThresholdDblClk(NMHDR* pNMHDR, LRESULT* pResult) { NM_GRIDVIEW* pNMGridView = (NM_GRIDVIEW*)pNMHDR; if (pNMGridView->iRow > 0) { CPolicyDlg PolicyDlg(this,m_pExpertEventManager,m_ActionsMap,m_CurSelEventID,pNMGridView->iRow-1, m_pAclMap); PolicyDlg.DoModal(); DisplayCurrentEvent(); }}目标很简单,在B类中修改A的属性m_bChanged;但我确不能初始化A的实例void CPolicyDlg::OnOK() {}非常感谢! 目标很简单,在B类中修改A的属性m_bChanged;但我确不能初始化A的实例===晕!B类中不需要初始化A类的实例 //dlg1.hpublic: m_str;//dlg1.cpp#include "dlg2.h"Cdlg1::OnButton1(){ Cdlg2 dlg2; dlg2.m_pdlg1 = this; if(dlg2.DoModal() == IDOK) { m_edit1.SetWindowText(m_str); }}//dlg2.hclass Cdlg1;class Cdlg2 : public CDialog{ .....public: Cdlg1 *m_pdlg1;}//dlg2.cpp#include "dlg1.h"Cdlg2::OnOK(){ m_pdlg1.m_str = "123"; CDialog::OnOK();} 有点纠结,为什么现在有很多人申请加为QQ好友,加了之后明显在线(立即批准申请)却一句话不说呢? 中秋节前期散分 关于按钮界面的处理 搞笑! 请教烦了我一天的socket问题!Help!!! 哪有取得CPU、硬盘唯一序列号以及网卡的MAC地址的代码(VC)? VC如何调用VB开发的COM组件?高手请进!!! 一个小问题,如何获得一个对话框的句柄 史前第一大冤案!! CFileFind获取到的文件名中有?号,如何解决 ADO的版本问题 在vs.net2003中怎么会怎样
但这种方法已经被排除,哪位能说一下其他方法啊,非常感谢!
类B的构造函数如下:pParent就是传过来的A指针,怎么利用pParent来修改A的属性呢?下一步该怎么做?PolicyDlg::CPolicyDlg(CWnd* pParent ,PCExpertEventManager pExpertEventManager, CAMActionStrObjMap& ActionsMap,EVENT_TYPE AlarmID,UINT ActionIndex, CMap<UINT, UINT, CString,CString&>* pAclMap /*= NULL*/)
:m_ActionsMap(ActionsMap),CDialog(CPolicyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CPolicyDlg)
//}}AFX_DATA_INIT
m_pExpertEventManager = pExpertEventManager;
m_AlarmID = AlarmID;
....
}
还是不行,在B类中引用A类时编译通不过,我加了#include "A.h"
可就是不识别A
可就是不识别A
==怎么加的?
将工程发到[email protected]。马上搞定
class CPolicyManagement : public CSkinDialog
{
// Construction
public:
CPolicyManagement(CWnd* pParent, PCExpertEventManager pExpertEventManager,UINT nAutoFocusPolicyId=-1,bool bConsoleMode=false,LPCTSTR pProfileName=NULL, CMap<UINT, UINT, CString, CString&>* pAclMap= NULL); // standard constructor
~CPolicyManagement(); // standard destructor
....public:
BOOL m_bChanged;}在A类中一个函数:
void CPolicyManagement::OnThresholdDblClk(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_GRIDVIEW* pNMGridView = (NM_GRIDVIEW*)pNMHDR;
if (pNMGridView->iRow > 0)
{
CPolicyDlg PolicyDlg(this,m_pExpertEventManager,m_ActionsMap,m_CurSelEventID,pNMGridView->iRow-1, m_pAclMap);
PolicyDlg.DoModal();
DisplayCurrentEvent();
}}
目标很简单,在B类中修改A的属性m_bChanged;但我确不能初始化A的实例void CPolicyDlg::OnOK()
{
}非常感谢!
===晕!B类中不需要初始化A类的实例
public:
m_str;//dlg1.cpp
#include "dlg2.h"
Cdlg1::OnButton1()
{
Cdlg2 dlg2;
dlg2.m_pdlg1 = this;
if(dlg2.DoModal() == IDOK)
{
m_edit1.SetWindowText(m_str);
}
}//dlg2.h
class Cdlg1;
class Cdlg2 : public CDialog
{
.....
public:
Cdlg1 *m_pdlg1;
}//dlg2.cpp
#include "dlg1.h"
Cdlg2::OnOK()
{
m_pdlg1.m_str = "123";
CDialog::OnOK();
}