看板 C_and_CPP 關於我們 聯絡資訊
我新增一個專案(對話盒),假設為CMainDlg,我另外新增了一個對話盒CParentDlg 那如果CMainDlg要傳值給CParentDlg該怎麼傳呢? 如果子傳父視窗可以用 ((CMainDlg*)m_parent)->m_ptext=m_mtext; 網路上找到的範例幾乎都是子傳給父視窗數值,沒有看到父傳給子 所以想請問一下,如果父傳子的話該怎麼寫呢? 麻煩各位指教^^ 因為我是利用某一個Driver寫一個類似通訊的程式.. 通訊的概念就是Host1問 Host2傳回資訊 Driver接收訊息是統一由函數OnReceive()處理 Driver傳送訊息則沒有嚴格定義.. 假設我目前設定三個傳送訊息OnName(),OnYear(),OnPhone(); 父視窗IDD_CMAIN 子視窗IDD_RESULT 我希望當我按下按鈕的同時,將這三個訊息傳送給對方,並且開啟子視窗 void CMainDlg::OnBnClickedBtnAsk() { OnName(); OnYear(); OnPhone(); } 但是接收的函式為同一個,我希望接收到訊息後,能將數值顯示在子視窗中 void CMainDlg::OnReceive() { if(Tital=="Name") { string m_name=Mark; }else if(Tital=="Year") { int m_year=2012; }else if(Title=="Phone") { int m_phone=0912345678; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.24.145
diabloevagto:好奇有什麼情況需要父傳子? 04/10 20:39
※ 編輯: don750421 來自: 118.171.24.145 (04/10 21:14)
don750421:原文已補充原因了@@ 04/10 23:57
jhchou:父視窗在建立子視窗時用個成員變數記錄下來 04/11 10:19
jhchou:就可以直接操作子視窗了啊 04/11 10:20
diabloevagto:樓上的意思是要建立一個指標嗎? 04/11 10:44
EdisonX:指的是在 CMainDlg 建立 data member m_name/m_year...etc 04/11 10:51
don750421:建立子視窗時建立成員變數? 意思是?宣告成全域變數? 04/11 21:02
jhchou:其實就是你前一篇問的時候b大給你的sample code的方法 04/11 21:26
jhchou:只是他是透過sub這個全域變數去操作子視窗 04/11 21:27
jhchou:你就學他的方法直接對子視窗中的變數設值 再呼叫子視窗的 04/11 21:28
jhchou:UpdateData 就可以了 04/11 21:29
don750421:我有試過,但是我忘記有沒有設UpdateData了 04/11 21:32
don750421:我照b大的方式做,但是我將sub宣告放到.h內public 04/11 21:33
don750421:就不行了!!為什麼呢? 04/11 21:33
jhchou:你sub放到.h內還是全域變數嗎?還是放到某個class中? 04/11 22:01
don750421:以b大的SampleCode為例,我放到class CADlg : public CD 04/11 22:11
don750421:內,編譯就出錯誤了 04/11 22:11
don750421:附圖 http://ppt.cc/BI5T 是我少寫了什麼嗎? 04/11 22:15
jhchou:#include "sub.h"要在#include "stdafx.h"後面 04/11 22:18
don750421:OK了,沒注意到小細節...感謝j大 04/11 22:31
don750421:另外個問題是,如果按關閉視窗後,再次點開啟視窗 04/11 22:32
don750421:就會發生錯誤...是因為沒有DestroyWindow嗎? 04/11 22:32
bbearh:我用的方法, 比較暴力一些, 要比較好的寫法用 sub *subdlg= 04/11 23:08
bbearh:new sub(); 再create()... 將window "X" 掉,不會DestroyWin 04/11 23:09
bbearh:有二種選擇: a.第二次再開時 call Showwindow(),b.或像你 04/11 23:10
bbearh:說的 subdlg.destorywindow() 後再create 一次. 04/11 23:11