[問題] Modeless視窗 如何傳值?

看板C_and_CPP (C/C++)作者 (1+1≠2)時間14年前 (2012/04/10 20:30), 編輯推噓1(1025)
留言26則, 5人參與, 最新討論串1/3 (看更多)
我新增一個專案(對話盒),假設為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

04/10 20:39, , 1F
好奇有什麼情況需要父傳子?
04/10 20:39, 1F
※ 編輯: don750421 來自: 118.171.24.145 (04/10 21:14)

04/10 23:57, , 2F
原文已補充原因了@@
04/10 23:57, 2F

04/11 10:19, , 3F
父視窗在建立子視窗時用個成員變數記錄下來
04/11 10:19, 3F

04/11 10:20, , 4F
就可以直接操作子視窗了啊
04/11 10:20, 4F

04/11 10:44, , 5F
樓上的意思是要建立一個指標嗎?
04/11 10:44, 5F

04/11 10:51, , 6F
指的是在 CMainDlg 建立 data member m_name/m_year...etc
04/11 10:51, 6F

04/11 21:02, , 7F
建立子視窗時建立成員變數? 意思是?宣告成全域變數?
04/11 21:02, 7F

04/11 21:26, , 8F
其實就是你前一篇問的時候b大給你的sample code的方法
04/11 21:26, 8F

04/11 21:27, , 9F
只是他是透過sub這個全域變數去操作子視窗
04/11 21:27, 9F

04/11 21:28, , 10F
你就學他的方法直接對子視窗中的變數設值 再呼叫子視窗的
04/11 21:28, 10F

04/11 21:29, , 11F
UpdateData 就可以了
04/11 21:29, 11F

04/11 21:32, , 12F
我有試過,但是我忘記有沒有設UpdateData了
04/11 21:32, 12F

04/11 21:33, , 13F
我照b大的方式做,但是我將sub宣告放到.h內public
04/11 21:33, 13F

04/11 21:33, , 14F
就不行了!!為什麼呢?
04/11 21:33, 14F

04/11 22:01, , 15F
你sub放到.h內還是全域變數嗎?還是放到某個class中?
04/11 22:01, 15F

04/11 22:11, , 16F
以b大的SampleCode為例,我放到class CADlg : public CD
04/11 22:11, 16F

04/11 22:11, , 17F
內,編譯就出錯誤了
04/11 22:11, 17F

04/11 22:15, , 18F
附圖 http://ppt.cc/BI5T 是我少寫了什麼嗎?
04/11 22:15, 18F

04/11 22:18, , 19F
#include "sub.h"要在#include "stdafx.h"後面
04/11 22:18, 19F

04/11 22:31, , 20F
OK了,沒注意到小細節...感謝j大
04/11 22:31, 20F

04/11 22:32, , 21F
另外個問題是,如果按關閉視窗後,再次點開啟視窗
04/11 22:32, 21F

04/11 22:32, , 22F
就會發生錯誤...是因為沒有DestroyWindow嗎?
04/11 22:32, 22F

04/11 23:08, , 23F
我用的方法, 比較暴力一些, 要比較好的寫法用 sub *subdlg=
04/11 23:08, 23F

04/11 23:09, , 24F
new sub(); 再create()... 將window "X" 掉,不會DestroyWin
04/11 23:09, 24F

04/11 23:10, , 25F
有二種選擇: a.第二次再開時 call Showwindow(),b.或像你
04/11 23:10, 25F

04/11 23:11, , 26F
說的 subdlg.destorywindow() 後再create 一次.
04/11 23:11, 26F
文章代碼(AID): #1FX2W3Tm (C_and_CPP)
文章代碼(AID): #1FX2W3Tm (C_and_CPP)