现在有一主对话框,CMyTab类,m_tab。
有两个子对话框CTabPage1和CTabPage2。
这两个子框都有学号,姓名,性别三个edit框。程序打开时,默认显示子框1。并显示学号、姓名、性别的默认值。现在想定义三个全局变量学号,姓名,性别。问题一:
这三个全局变量如何在OnInitDialog里初始化?问题二:
这三个变量如何让子框1,和子框2显示?问题三:
如何实现在子框1修改这三个变量,在切换到子框2时,子框2会自动加载更新这三个变量?
在子框2修改时,子框1同样自动加载更新。PS:我是一个VC未入门的小子,各位大佬可以讲详细点吗?
比如在哪个文件的 哪个位置 添加什么变量,
在哪个文件的 哪个位置 添加 什么语句。网上找了很多资料啊,完全找不到那种小白级别的教程。
就像那种第一步做什么,第二部做什么那种教程我很喜欢,但是对于这个问题好像找不到啊。现在找到的那些都是讲得很笼统的,小白表示看不懂什么意思。就像那种直接讲用什么函数啊,我怎么用这个函数?
我直接用提示报错啊。肯定是因为使用位置不对,变量没定义之类的错误。
小白表示出现这种也不知道怎么办啊。
到底在什么位置该做什么事情?
有两个子对话框CTabPage1和CTabPage2。
这两个子框都有学号,姓名,性别三个edit框。程序打开时,默认显示子框1。并显示学号、姓名、性别的默认值。现在想定义三个全局变量学号,姓名,性别。问题一:
这三个全局变量如何在OnInitDialog里初始化?问题二:
这三个变量如何让子框1,和子框2显示?问题三:
如何实现在子框1修改这三个变量,在切换到子框2时,子框2会自动加载更新这三个变量?
在子框2修改时,子框1同样自动加载更新。PS:我是一个VC未入门的小子,各位大佬可以讲详细点吗?
比如在哪个文件的 哪个位置 添加什么变量,
在哪个文件的 哪个位置 添加 什么语句。网上找了很多资料啊,完全找不到那种小白级别的教程。
就像那种第一步做什么,第二部做什么那种教程我很喜欢,但是对于这个问题好像找不到啊。现在找到的那些都是讲得很笼统的,小白表示看不懂什么意思。就像那种直接讲用什么函数啊,我怎么用这个函数?
我直接用提示报错啊。肯定是因为使用位置不对,变量没定义之类的错误。
小白表示出现这种也不知道怎么办啊。
到底在什么位置该做什么事情?
解决方案 »
- 大家知道有哪些开源的图像处理库啊?
- 关于网络传真的,想请大家指点下,如果要做一个网络传真的服务器,在传真机对电脑传真的时候,我需要什么软件或硬件.请达人详细讲解写,谢谢
- 大家帮推荐一下能快速上手VC IDE的书籍?
- VC问题,请教高手(分数相赠)
- 请问“可编程显卡”的可编程是什么意思?
- 请问怎么移动文件?
- 自己编的程序如何在别人的机器上运行,在setting中设成release没用
- 我用IMAGE控件显示JPEG图片,可只有上半截,据说应该将BLOB size 改为64K,但该属性在哪儿呢?
- mirror driver的问题
- 钱 才是王道
- VS2013如何把源文件和头文件分开放在不同的文件夹下?
- 微软是不是把技术讨论的版块给封了?
放 CMyTab类,m_tab。里,子框1和子框2 初始化时 取 m_tab 中 定义的 变量(GetParent())
CMyTab::CMyTab()
{
m_bHeadStyle=FALSE;
str1="StrInMyTab";
}
//
CMyTab *pTab=(CMyTab *)GetParent();
CString str=pTab->str1;
m_Dlg1Edit1.SetWindowText(str);//"Big Char");
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已经实现了
1:哪个叫主对话框?
2:哪个叫自对话框?
3:哪里有三个OnInitDialog,只有一个对话框的.CPP有OnInitDialog。
麻烦能具体讲一下步骤吗?
第一步先打开哪个文件? .CPP还是.h?
第二步找到哪个函数或者哪个位置,添加什么代码?
第三步第四步怎么做
//
CMyTab *pTab=(CMyTab *)GetParent();
CString str=pTab->str1;
m_Dlg1Edit1.SetWindowText(str);//"Big Char");
这些你也写在函数外面?放哪个函数里啊?能不能手把手教一下。
1:先打开哪个文件,找到哪个位置,添加什么代码?
2:再切换到哪个文件,再找到哪个位置,再添加什么代码?
把 公用 变量 放 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");
注: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]
我按照你说的,编译也过了。
但是一点保存按钮,EDIT框里的数据全清空了。
另外ini文件保存到哪里了?找不到。
我把".\\X.ini"改成桌面的路径C:\Users\用户名\Desktop\也找不到ini文件。你的方法是不是这样:
通过按钮事件,把edit框的数据写入到ini文件,然后其他子框就读取这个ini的数据?如果是这样,那么如何在切换tab标签的时候实现子框读取这个ini数据?
我的理解是这个数据读取只发生在OnInitDialog里,只执行一次。
我按照你的方法。
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”的左边必须指向类/结构/联合/泛型类型
的错误。怎么回事?
怎么处理。
你清空是因为你没有对应的ini文件,所以这一句中GetPrivateProfileString("XXX","numINI",NULL,temp,220,".\\X.ini");你temp读取的是访问不到对应ini文件设置成null,所以你下一句SetDlgItemText(IDC_EDIT1,temp);就把对应的edit设置成空了。ini文件不是保存生成的,要你手动新建,上述代码是打开该ini文件对其中的值进行覆写。
最后,你的理解没有问题,就是在OnInitDialog中读取,你切换打开其他子框,它生成的时候就会先调用OnInitDialog函数,自然而然,你在憋的地方保存的参数就通过ini文件传达到这个子框里面了。
WritePrivateProfileString("XXX","nameINI",temp,".\\X.ini");是覆写ini对应值
我在程序位置建了一个txt,改名X.ini。
然后把GetPrivateProfileString改成WritePrivateProfileString("XXX","nameINI",temp,".\\X.ini")
打开ini文件,里面就显示
[Info]
numINI=
nameINI=
sexINI=点保存按钮,edit框依然是被清空,ini文件里也是空,而不是0。
但是在切换tab标签的时候,子框2不会自动读取ini数据去更新edit,edit还是显示打开程序时加载的旧的ini数据。
你切换tab标签是一种什么样的操作?切换tab标签时,子框1和子框2还是打开显示的界面?还是子框都是关闭的界面?
像你这种情况,你试试点切换标签时,调用对应子框的OnInitDialog函数。再给它初始化一次,即调用新的ini数据
代码如上。
m_page1Edit1.SetWindowText(m_tab.str1);//不了 再 m_tab 例 定义
m_page1.ShowWindow(TRUE);
......
CString str1=“性别”, 在 m_tab 例定义 , 需要派生 (CMyTab)
是什么意思?例定义又是什么意思?
即
class CMyTab : public CTabCtrl
{
CString str1;
还是不是很明白。
m_page1Edit1.SetWindowText(m_tab.str1);
这个m_page1Edit1又是从哪里来的?新变量?在哪里定义?数据类型是什么?还有主对话框如何调用子框的OnInitDialog?
具体代码是什么?添加在哪里?如果有新的变量又在哪里定义?
把 page1中 edit1 关联成一个 变量 (即向导 加 变量,IDC_EDIT1)
或者
CWnd* pWnd=m_page1.GetDlgItem(IDC_EDIT1);
pWnd->SetWindowText(m_tab.str1);
叫你 从 CTabCtrl 派生 一个CMyTab (向导 插入类 ,基类 CTabCtrl)
即:
class CMyTab : public CTabCtrl
在 CMyTab 中 定义 公用 变量。
2
对话框中 CTabCtrl m_tab; 改为 CMyTab m_tab; 要加入 MyTab.h
变量 在 CMyTab 的 tab 中 !
派生一个CMyTab是怎么操作?
向导插入类在哪里,我添加东西一般都是右键的。
我用的是VS2008。
但是右键添加类里面的基类没有CTabCtrl类型选择。
菜单 “insert“ -》newclass 。”base class“ 选 CTabCtrl
我 只用VC6
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);