class CSupplyShopList : public CDialog { // Construction public: void SetValue(CString sField);在一按钮中 CSupplyShopListSeach dlg dlg.DoModul(); ========================================== CSupplyShopListSeach 类中 GetParent()->SetValue("dd");error C2039: 'SetValue' : is not a member of 'CWnd' ===========================================
然后声名一个方法setValue修改这个变量在弹出的对话框里保存一个对父窗口对话框的指针pParentDialog
然后在子窗口的值改变的同事,调用pParentDialog->setValue(...)
if(dlg.DoModal()==IDOK){
name=dlg.name;
text=dlg.text;}假设你现在的对话框有变量name和text,在CYOURDLG类里面也有name和text这两个变量,在dlg 里面把你要传送的数据保存在name和text就可以了.当它按确定键返回后便可以.
{
// Construction
public:
void SetValue(CString sField);在一按钮中
CSupplyShopListSeach dlg
dlg.DoModul();
==========================================
CSupplyShopListSeach 类中 GetParent()->SetValue("dd");error C2039: 'SetValue' : is not a member of 'CWnd'
===========================================
你强制转化一下((CParDialog*) GetParent())->SetValue(...);
VOID CStationeryDlg::OnButtonCreate()
{
CNewStationeryDlg dlgNew;
if(dlgNew.DoModal()==IDOK && !dlgNew.m_strName.IsEmpty())
{
ASSERT(!dlgNew.m_strName.IsEmpty() && dlgNew.m_strName.Find('\\')==-1 && dlgNew.m_strName.Find('/')==-1); CONST CStnryArray& arrStnry = m_StnryMgr.GetStationeryArray();
for(INT i=0,nCount=arrStnry.GetSize(); i<nCount; ++i)
{
TCHAR szName[_MAX_FNAME] = {0};
_tsplitpath(arrStnry[i]->szPathName, NULL, NULL, szName, NULL);
if(dlgNew.m_strName.CompareNoCase(szName) == 0)
{
MessageBox("抱歉!指定的新信纸名已经存在,请换一个名字重试。", "错误", MB_OK|MB_ICONERROR);
return;
}
} if(m_StnryMgr.CreateFromCurrentJob(dlgNew.m_strName) >= 0)
{
m_strCurStnryName = dlgNew.m_strName;
RefreshControls();
InvalidateRect(&m_rectCanvas, FALSE);
}
}
}
在OnChangettText//当输入框文本改变时
((CSupplyShopList *) GetParent())->GetCondition(sql)//这种方式有个bug同时按Ctrl+空格时,得到的输入框值是空的..看来偶只有采用访问表态public变量赋值的形式了
codewarrior(会思考的草) 与trueadou(木头龙)应该是一样的方法吧.呵呵..
对了,
GetParent()->PostMessage(..)
如果要用这个方式执行父类的某个函数,,,PostMessage(这里应该怎么写呢) 谢谢!!!