提供兩種方案, 1 如果新建的對話框是主窗口的子窗體可以這樣.將這五個變量定義為Public的,然后在子對話框中this->GetParent()->mNumber; mNumber為其中一個變量. 2 在新建的對話框類中提供一個Public的函數(shù),在主程序中調(diào)用,將這五個變量值傳遞過去.
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
可以有兩種方法,假設你的主窗口對話框類為CMainWnd,其中一個變量為str,新建的對話框類為CNewWnd:
第一種:取父窗口指針
在CNewWnd類中這樣使用
/*當然要include CMainWnd類的頭文件*/
CMainWnd* pwnd = (CMainWnd*)GetParent();
此時,pwnd就是CMainWnd的一個窗口類指針了,可以直接使用它的公共成員,如
pwnd->str
第二種:全局窗口指針
在CMainWnd的cpp文件里定義一個全局窗口指針如:CMainWnd* g_pWnd;
然后在CMainWnd的構(gòu)造函數(shù)里對它初始化:g_pWnd=this;
在CNewWnd類的cpp文件中聲明這個外部變量
extern CMainWnd* g_pWnd,
這樣,也可以直接使用CMainWnd類的公共成員,如:
g_pWnd->str
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在對話框類里重載構(gòu)造函數(shù)
MyDlg(變量1,變量2,...變量5)
{}
這樣就OK了,很簡單吧
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我習慣使用火駒的方法。封裝性較好,個人感覺。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Dialog1的類名是CDialog1, 頭文件是dialog1.h。里有成員變量CString str1, str2; Dialog2的類名是CDialog2, 頭文件是dialog2.h。里有成員變量CString str11, str22; 要想將Dialog1里的變量傳遞給Dialog2里的變量,可以用這種方法:在類 CDialog1 的頭文件里,引入Dialog2的頭文件: #include "dialog2.h" 在類 CDialog1 的定義里聲明Dialog2的對象: CDialog2 m_Dialog2; 在類 CDialog1 的cpp文件里的初始化函數(shù)里(其實應該在你需要的時候進行如下操作),UpdateData(TRUE); str1.Format("xixi");str2.Format("haha");m_Dialog2.str11 = str1; m_Dialog2.str22 = str2;UpdateData(FALSE);這樣,就把值已經(jīng)傳給Dialog2了!要是想在Dialog2里使用str11,str22的時候,加上UpdateData(TRUE);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
vc里面怎樣實現(xiàn)對話框之間傳遞變量的值(原)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
crazyboy (ppp)于2005年05月25日02:26:37 星期三)
提到:
1.比較特殊情況下:
比如:兩個對話框關系是:點擊對話框1的按鈕,然后會運行對話框2
可以這樣:CXXXDialog2 dlg;
dlg.xxx = yyy; //yyy是對話框1的值,賦值給對話框2的xxx
2.兩個對話框完全沒有關聯(lián):
可以這樣:
a)把數(shù)據(jù)保存在文件里面,讀寫(操作.ini也不錯)
b)CWinApp類里面可以添加變量xxx;
通過AfxGetApp()->xxx;來保存和讀取變量;
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
想把在主窗口得到的一個值例如 dcount=100;在一個對話框打開時間去的這個值 問題點數(shù):50、回復次數(shù):19
1 樓softsprite(軟件精靈)回復于 2000-08-30 09:06:00 得分 0
如果需要傳遞的變量不多的話,在對話框類中建立相應的成員變量:
CMyDialog myDialog(this);
myDialog.m_dcount = dcount;
if ( myDialog.DoModal() == IDOK )
{
dcount = myDialog.m_dcount;
}
如果需要傳遞的變量比較多或比較復雜,可以專門建立一個結(jié)構(gòu)放這些變量,在對話框類中建立這個結(jié)構(gòu)類型的指針,用類似的方法傳遞指針即可。
2 樓luxes()回復于 2000-08-30 09:09:00 得分 10
把這個值定義為主窗口的public成員變量:m_dcount,
在dialog里:訪問:AfxGetMainWnd()->m_dcount
3 樓skyrain(skyrain)回復于 2000-08-30 09:10:00 得分 0
這兒的dcount 在哪兒定義?CMyDialog myDialog(this);應該寫哪兒?
4 樓Tiangz()回復于 2000-08-30 09:11:00 得分 0
在Dialog的.h文件中包含MainFrm.h,若dcount是一個public成員,則可以
GetMainFrame()->dcount,否則可以在MainFrame中定義一個函數(shù)專門得到該參數(shù),在
Dialog中調(diào)用即可
5 樓softsprite(軟件精靈)回復于 2000-08-30 09:25:00 得分 0
dcount是主窗口中的變量,是你自己提出來的呀!
CMyDialog myDialog(this);這一整段代碼可以放在主窗口中你需要彈出對話框的地方。比如你需要按某個菜單項彈出這個對話框,可以在主窗口處理這個菜單項的函數(shù)中使用這段代碼。
6 樓skyrain(skyrain)回復于 2000-08-30 10:41:00 得分 0
我在MainFrm.h中加入public變量dcount,在對話框的MyDialog.h中加入#include "mainfrm.h"
可在用AfxGetMainWnd()->dcount時間編譯報CWnd沒有這個成員
7 樓magicwizard(巫師)回復于 2000-08-30 10:44:00 得分 0
softsprite在第一個回復里說得很詳細,仔細看看分析一下.
或者你把自己的問題說得更詳細一些.
8 樓skyrain(skyrain)回復于 2000-08-30 10:54:00 得分 0
我用MFC建立了一個單文檔程序data,自己添加了一個對話框類,叫mydialog
在dataView.cpp中我得到一個變量 int dcount=100,當點擊一個按鈕時打開我的對話框,在對話框
中我想用dcount的值,我該怎么做
9 樓a2000(夜雨)回復于 2000-08-30 11:08:00 得分 0
在CMyApp中建一個變量dcount;然后在CMyDialog 中用AfxGetApp()->dcount.就行了.
10 樓skyrain(skyrain)回復于 2000-08-30 11:11:00 得分 0
CMyApp是自定義的類嗎
11 樓Holly()回復于 2000-08-30 11:18:00 得分 20
所有的AfxGetApp()或AfxGetMainWnd()的到的指針都需要強制轉(zhuǎn)換
((CMyApp*)AfxGetApp())和((CMainFrame*)AfxGetMainWnd())
12 樓Holly()回復于 2000-08-30 11:23:00 得分 0
另外,盡量采用softsprite在第一貼的方法,直接取變量的方法使代碼的控制混亂,是不好的編碼風格,應當避免,養(yǎng)成習慣就不好了?
13 樓skyrain(skyrain)回復于 2000-08-30 11:28:00 得分 0
softsprite的方法我看不懂,m_count在哪定義的,
dcount = myDialog.m_dcount;什么意思,寫在哪兒(我是要取得dcount的值)
14 樓softsprite(軟件精靈)回復于 2000-08-30 11:40:00 得分 20
在MyDialog.h中定義:int m_dcount;
在MainFrm.h中定義:int dcount;
第一貼中的代碼是在主窗口CMainFrame中的。
myDialog.m_dcount就是取得CMyDialog類的實例的成員變量m_dcount,然后這個變量可以和主窗口CMainFrame中的變量dcount互相交換值。
。。。。我的汗都下來了!
15 樓xiaoyuer(我是一只蟲)回復于 2000-08-30 12:09:00 得分 0
只要取得窗口類的指針即可!
16 樓hnalbert(再戰(zhàn))回復于 2000-08-30 12:13:00 得分 0
You can do just as what softsprite told you.
There is no need of pointer to CWnd.
17 樓iforever(iforever)回復于 2000-09-01 14:42:00 得分 0
聽HOLLY的
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
用資源分別建立兩個對話框.兩對話框無任何聯(lián)系.
現(xiàn)在想將第1個對話框中EDIT編輯框中的數(shù)據(jù)傳遞給另一個對話框的EDIT編輯框中。
不知道如何解決。我是VC新手,希望高手能講解具體一點,謝謝.
一句話
GetDlgItem(EDIT2的ID)-> SetWindowText(GetDlgItem(EDIT1的ID)-> GetWindowText());
回復于:2006-05-26 10:17:51 方法一:在第二個對話框中調(diào)用第一個對話框
方法二:在App類中定義一個變量,在第一個對話框中把控件值傳給該變量,在第二個對話框中把該變量值傳給控件
#5樓 得分:0回復于:2006-05-26 11:37:21
在需要實現(xiàn)該功能的地方調(diào)用:
(例如在一個對話框1類里面,把對話框1上的IDC_EDIT1里的內(nèi)容傳到
對話框2的IDC_EDIT2里面):
CString strText;
GetDlgItem(IDC_EDIT1)-> GetWindowText(strText); //得到對話框1的IDC_EDIT1內(nèi)容
(FindWindow(NULL, "對話框2的標題 ")-> GetDlgItem(IDC_EDIT2))-> SetWindowText(strText); //顯示對話框1的IDC_EDIT1內(nèi)容;
(FindWindow(NULL, "對話框2的標題 ")-> GetDlgItem(IDC_EDIT2))-> GetWindowText(strText); // 得到顯示對話框2的IDC_EDIT2內(nèi)容(在strText里)