Re: [問題] MFC視窗傳值問題..

看板C_and_CPP (C/C++)作者 (1+1≠2)時間14年前 (2012/04/05 20:40), 編輯推噓0(0013)
留言13則, 3人參與, 最新討論串2/3 (看更多)
我使用了推文建議的DDX方式,但是子視窗IDD_RESULT仍然無法顯示@@ 但是主視窗IDD_CMAIN是有將值傳出去 我的作法是,先將子視窗IDD_RESULT與主視窗IDD_CMAIN連結 class CReSultDlg:public CDialog { public: int num; CReSultDlg(CWnd* pParent):CDialog(IDD_RESULT,pParent){} BOOL OnInitDialog() { CDialog::OnInitDialog(); //呼叫CDialog::OnInitDialog()函數 return TRUE; } void DoDataExchange(CDataExchange *pDX) { DDX_Text(pDX, IDC_NUMSUM, num); } }; 按下按鈕呼叫OnCal() void CMainDlg::OnBnClickedBtnPlay() { CDialMachDlg dlg(this); dlg.DoModal(); OnCal();//呼叫OnCal() } void CMainDlg::OnCal() { ...中間算式跳過 if (sum==100) { CDialMachDlg dlg(this); dlg.num=100; } } 我使用dlg.num這樣沒有辦法將值傳到子視窗嗎? 還是我有那裡寫錯了呢? 麻煩各位指點^^ ※ 引述《don750421 (1+1≠2)》之銘言: : 我建立了一個對話盒的專案,一開始的對話盒為IDD_CMAIN : 而我在同個專案內建了另一個對話盒,名稱為IDD_RESULT : 對話盒內有五個Btn(假設為IDC_BTN1~IDC_BTN5) : 當我按下BTN時,會呼叫某一個函數假設為OnCal() : 而我希望OnCal()運算完後的結果Show在IDD_RESULT上 : 那麼該怎麼做呢? : BTN1~5觸發同一個函數可以使用ON_CONTROL_RANGE : 那我要如何按這五個按鈕都能Show出 IDD_RESULT : 但是因為代入的值不同,所以五個IDD_RESULT的結果也會不同 : 麻煩各位大大指教,謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.194.19

04/05 22:43, , 1F
每一個dlg, 都是local object, 不是同一個, 當然無法傳.
04/05 22:43, 1F

04/05 22:45, , 2F
那如果我要在OnCal()函式中傳值,有辦法解決嗎?
04/05 22:45, 2F

04/05 22:48, , 3F
你將 dlg.num=100; 往上搬一行, 如果你DDX 有寫對, dlg 中
04/05 22:48, 3F

04/05 22:48, , 4F
的edit 應會變成100
04/05 22:48, 4F

04/05 22:51, , 5F
從你的code及解釋還不太能猜你想做什麼.
04/05 22:51, 5F

04/05 23:00, , 6F
因為我想寫成當我按下OnBnClickedBtnPlay()去呼叫OnCal
04/05 23:00, 6F

04/05 23:00, , 7F
並藉由OnCal計算出來的值Show在IDD_RESULT視窗中
04/05 23:00, 7F
※ 編輯: don750421 來自: 118.171.194.19 (04/05 23:02)

04/05 23:12, , 8F

04/05 23:13, , 9F
寫一個sample 你試試
04/05 23:13, 9F

04/05 23:21, , 10F
感謝b大,照你的Sample是當你按下button時就傳值過去了
04/05 23:21, 10F

04/05 23:22, , 11F
但是,我是希望當按下button時,呼叫一個函式計算..
04/05 23:22, 11F

04/05 23:23, , 12F
算完再透過該函式丟值到子視窗...
04/05 23:23, 12F

04/05 23:33, , 13F
那就先呼叫計算的函式 再傳值過去 順序改一下就好了
04/05 23:33, 13F
文章代碼(AID): #1FVPAY2U (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FVPAY2U (C_and_CPP)