現在有一主對話框,CMyTab類,m_tab。
有兩個子對話框CTabPage1和CTabPage2。
這兩個子框都有學號,姓名,性別三個edit框。
程式打開時,默認顯示子框1。并顯示學號、姓名、性別的默認值。
現在想定義三個全域變數學號,姓名,性別。
問題一:
這三個全域變數如何在OnInitDialog里初始化?
問題二:
這三個變數如何讓子框1,和子框2顯示?
問題三:
如何實作在子框1修改這三個變數,在切換到子框2時,子框2會自動加載更新這三個變數?
在子框2修改時,子框1同樣自動加載更新。
PS:我是一個VC未入門的小子,各位大佬可以講詳細點嗎?
比如在哪個檔案的 哪個位置 添加什么變數,
在哪個檔案的 哪個位置 添加 什么陳述句。
網上找了很多資料啊,完全找不到那種小白級別的教程。
就像那種第一步做什么,第二部做什么那種教程我很喜歡,但是對于這個問題好像找不到啊。
現在找到的那些都是講得很籠統的,小白表示看不懂什么意思。
就像那種直接講用什么函式啊,我怎么用這個函式?
我直接用提示報錯啊。
肯定是因為使用位置不對,變數沒定義之類的錯誤。
小白表示出現這種也不知道怎么辦啊。
到底在什么位置該做什么事情?
uj5u.com熱心網友回復:
這里沒有人嗎?uj5u.com熱心網友回復:
“現在想定義三個全域變數學號,姓名,性別。”放 CMyTab類,m_tab。里,子框1和子框2 初始化時 取 m_tab 中 定義的 變數(GetParent())
uj5u.com熱心網友回復:
CString str1;CMyTab::CMyTab()
{
m_bHeadStyle=FALSE;
str1="StrInMyTab";
}
//
CMyTab *pTab=(CMyTab *)GetParent();
CString str=pTab->str1;
m_Dlg1Edit1.SetWindowText(str);//"Big Char");
uj5u.com熱心網友回復:
去搜索觀察者模式這個是典型的觀察者模式使用場景。
uj5u.com熱心網友回復:
1.在主對話框,兩個自對話框分別定義三個num,name,sex變數,分別在三個對話框的OnInitDialog里面進行初始化,初始化的值均是從組態檔ini里面進行讀取,如:
int num=GetPrivateProfileInt("XXX","numINI",-1,".\\X.ini");
int name=GetPrivateProfileInt("XXX","nameINI",-1,".\\X.ini");
int sex=GetPrivateProfileInt("XXX","sexINI",-1,".\\X.ini");
2.參照1,三個對話框里獲取對應值后顯示在對應控制元件里
3.在子框1設一個保存按鈕,在修改值點擊保存按鈕后,在保存按鈕對應函式里改寫ini組態檔:
CString temp;
temp.Format("%s",num);
WritePrivateProfileString("XXX","numINI",temp,".\\X.ini");
temp.Format("%s",name);
WritePrivateProfileString("XXX","nameINI",temp,".\\X.ini");
temp.Format("%s",sex);
WritePrivateProfileString("XXX","sexINI",temp,".\\X.ini");
至于切換顯示,在1里面OnInitDialog已經實作了
uj5u.com熱心網友回復:
樓上能詳細點嗎?1:哪個叫主對話框?
2:哪個叫自對話框?
3:哪里有三個OnInitDialog,只有一個對話框的.CPP有OnInitDialog。
麻煩能具體講一下步驟嗎?
第一步先打開哪個檔案? .CPP還是.h?
第二步找到哪個函式或者哪個位置,添加什么代碼?
第三步第四步怎么做
uj5u.com熱心網友回復:
2樓3樓這位大大。能講詳細點嗎,卡不明白啊。什么東西 “ 放 CMyTab類,m_tab。里”?
還有3樓的CString str1;在函式外面?全域變數?
//
CMyTab *pTab=(CMyTab *)GetParent();
CString str=pTab->str1;
m_Dlg1Edit1.SetWindowText(str);//"Big Char");
這些你也寫在函式外面?放哪個函式里啊?
能不能手把手教一下。
1:先打開哪個檔案,找到哪個位置,添加什么代碼?
2:再切換到哪個檔案,再找到哪個位置,再添加什么代碼?
uj5u.com熱心網友回復:
你不是 有 一主對話框,CMyTab類,m_tab。嗎把 公用 變數 放 m_tab 里,
CString str1; // CMyTab.h 公用變數
CMyTab::CMyTab()
{
str1="StrInMyTab";// 公用變數 初始化
}
兩個子對話框CTabPage1和CTabPage2。
初始化 里
CMyTab *pTab=(CMyTab *)GetParent();
CString str=pTab->str1;
m_Dlg1Edit1.SetWindowText(str);//"Big Char");
uj5u.com熱心網友回復:
你不是有兩個子對話框嗎?那應該會有兩個對應的對話框函式啊,兩個對應的對話框函式里面分別有兩個OnInitDialog(),如果沒有,自己手動添加,添加方法百度有教程,這個是最基礎的。然后我不知道你框架(兩個子對話框的主體)要不要顯示這三個值,要的話你在框架類CMAINFRAME里面CMAINFRAME:CMAINFRAME()進行和OnInitDialog函式一樣的操作。不要的話就不用管了。具體代碼上面我已經給過了,然后你只需要將每個對話框的num,name,sex的值顯示到edit控制元件上,像name和sex上面我變數型別應該給錯了,應該用CString,因為是字串
uj5u.com熱心網友回復:
在兩個子對話框增加一個“保存”按鈕,雙擊保存按鈕自動生成一個函式,在該函式體內復制下列代碼:注:IDC_EDIT1名稱要對應
[code=c]
char temp[220]={0};
GetPrivateProfileString("XXX","numINI",NULL,temp,220,".\\X.ini");
SetDlgItemText(IDC_EDIT1,temp);
GetPrivateProfileString("XXX","nameINI",NULL,temp,220,".\\X.ini");
SetDlgItemText(IDC_EDIT2,temp);
GetPrivateProfileString("XXX","sexINI",NULL,temp,220,".\\X.ini");
SetDlgItemText(IDC_EDIT3,temp);
[code]
uj5u.com熱心網友回復:
11樓:我按照你說的,編譯也過了。
但是一點保存按鈕,EDIT框里的資料全清空了。
另外ini檔案保存到哪里了?找不到。
我把".\\X.ini"改成桌面的路徑C:\Users\用戶名\Desktop\也找不到ini檔案。
你的方法是不是這樣:
通過按鈕事件,把edit框的資料寫入到ini檔案,然后其他子框就讀取這個ini的資料?
如果是這樣,那么如何在切換tab標簽的時候實作子框讀取這個ini資料?
我的理解是這個資料讀取只發生在OnInitDialog里,只執行一次。
uj5u.com熱心網友回復:
9樓:我按照你的方法。
1:在主框MyTabDlg.h的public里添加了CString str1;
2:在主框MyTabDlg.cpp的OnInitDialog里添加了str1="StrInMyTab";
3:在子框TabPage1.cpp和TabPage2.cpp里添加了OnInitDialog函式,并在里面寫了
CMyTab *pTab=(CMyTab *)GetParent();
CString str=pTab->str1;
m_Dlg1Edit1.SetWindowText(str);//"Big Char");
但是編譯的時候提示:
“CMyTab”: 未宣告的識別符號
“pTab”: 未宣告的識別符號
“CMyTab”: 未宣告的識別符號
語法錯誤 : “)”
“pTab”: 未宣告的識別符號
“->str1”的左邊必須指向類/結構/聯合/泛型型別
的錯誤。怎么回事?
怎么處理。
uj5u.com熱心網友回復:
ini存放在你的專案所在路徑下,自己新建一個.ini檔案。
你清空是因為你沒有對應的ini檔案,所以這一句中GetPrivateProfileString("XXX","numINI",NULL,temp,220,".\\X.ini");你temp讀取的是訪問不到對應ini檔案設定成null,所以你下一句SetDlgItemText(IDC_EDIT1,temp);就把對應的edit設定成空了。ini檔案不是保存生成的,要你手動新建,上述代碼是打開該ini檔案對其中的值進行覆寫。
最后,你的理解沒有問題,就是在OnInitDialog中讀取,你切換打開其他子框,它生成的時候就會先呼叫OnInitDialog函式,自然而然,你在憋的地方保存的引數就通過ini檔案傳達到這個子框里面了。
uj5u.com熱心網友回復:
更正一下,筆誤,GetPrivateProfileString是讀取ini,WritePrivateProfileString("XXX","nameINI",temp,".\\X.ini");是覆寫ini對應值
uj5u.com熱心網友回復:
15樓:我在程式位置建了一個txt,改名X.ini。
然后把GetPrivateProfileString改成WritePrivateProfileString("XXX","nameINI",temp,".\\X.ini")
打開ini檔案,里面就顯示
[Info]
numINI=
nameINI=
sexINI=
點保存按鈕,edit框依然是被清空,ini檔案里也是空,而不是0。

uj5u.com熱心網友回復:
剛弄了一下,可以正常讀寫ini檔案了。剛打開運行程式的時候,兩個子框都加載了ini的資料沒問題。
但是我在子框1更換資料后,點保存寫入到ini。查看ini確實更改了資料。
但是在切換tab標簽的時候,子框2不會自動讀取ini資料去更新edit,edit還是顯示打開程式時加載的舊的ini資料。
uj5u.com熱心網友回復:
你切換tab標簽是一種什么樣的操作?切換tab標簽時,子框1和子框2還是打開顯示的界面?還是子框都是關閉的界面?
uj5u.com熱心網友回復:
像你這種情況,你試試點切換標簽時,呼叫對應子框的OnInitDialog函式。再給它初始化一次,即呼叫新的ini資料
uj5u.com熱心網友回復:


就是點TAB視圖的上面那幾個標簽切換。
代碼如上。
uj5u.com熱心網友回復:
在 m_page1.ShowWindow() 前case 0:
m_page1Edit1.SetWindowText(m_tab.str1);//不了 再 m_tab 例 定義
m_page1.ShowWindow(TRUE);
......
uj5u.com熱心網友回復:
//不了 再 m_tab 例 定義CString str1=“性別”, 在 m_tab 例定義 , 需要派生 (CMyTab)
uj5u.com熱心網友回復:
//不了 再 m_tab 例 定義是什么意思?
例定義又是什么意思?
uj5u.com熱心網友回復:
CString str1=“性別”, 在 m_tab 里定義 , 需要派生 (CMyTab)即
class CMyTab : public CTabCtrl
{
CString str1;
uj5u.com熱心網友回復:
schlafenhamster大佬還是不是很明白。
m_page1Edit1.SetWindowText(m_tab.str1);
這個m_page1Edit1又是從哪里來的?新變數?在哪里定義?資料型別是什么?
還有主對話框如何呼叫子框的OnInitDialog?
具體代碼是什么?添加在哪里?如果有新的變數又在哪里定義?
uj5u.com熱心網友回復:
m_page1.Edit1.SetWindowText(m_tab.str1);把 page1中 edit1 關聯成一個 變數 (即向導 加 變數,IDC_EDIT1)
或者
CWnd* pWnd=m_page1.GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText(m_tab.str1);
uj5u.com熱心網友回復:



會報錯啊
uj5u.com熱心網友回復:
1叫你 從 CTabCtrl 派生 一個CMyTab (向導 插入類 ,基類 CTabCtrl)
即:
class CMyTab : public CTabCtrl
在 CMyTab 中 定義 公用 變數。
2
對話框中 CTabCtrl m_tab; 改為 CMyTab m_tab; 要加入 MyTab.h
uj5u.com熱心網友回復:
不是 CMyTabDlg ! 這是 放 tab 的 對話框 !變數 在 CMyTab 的 tab 中 !
uj5u.com熱心網友回復:
?派生一個CMyTab是怎么操作?
向導插入類在哪里,我添加東西一般都是右鍵的。
我用的是VS2008。
但是右鍵添加類里面的基類沒有CTabCtrl型別選擇。
uj5u.com熱心網友回復:
可不可以幫我改下啊我發你郵箱
uj5u.com熱心網友回復:
“右鍵添加類里面的基類沒有CTabCtrl型別選擇”選單 “insert“ -》newclass 。”base class“ 選 CTabCtrl
我 只用VC6
uj5u.com熱心網友回復:
找到方法了,問題已解決。//獲取父視窗即tab控制元件指標
CTabCtrl *tab=(CTabCtrl*)GetParent();
//獲取第一個子視窗指標,即Page1
CWnd *cwnd=tab->GetWindow(GW_CHILD);
//獲取第一個子視窗后的視窗,即Page2
CWnd *cwnd1=cwnd->GetWindow(GW_HWNDNEXT);
//獲取Page2上Text控制元件的值
cwnd1->GetDlgItemText(IDC_EDIT1,str);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/63989.html
標籤:基礎類
