VC++做性页最简单的方法是哪种?

mickeypeng 2001-08-09 05:15:32
若我要做的属性页有四个选项,我现在所用的是做了四个对话框,每个对话框产生一个类!我想这种方法太繁了,哪位高手能教我简单一点的方法!!
还有,我已经生成了一个类,现在又要生成一个类,两个类想共用一个.h和.cpp文件,不用自己copy和paste,类生成向导是不是有这种选项,能帮我们合在一起??
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2001-08-13
  • 打赏
  • 举报
回复
自己写一个基类,作为类似的对话框的父类。
rovoboy 2001-08-13
  • 打赏
  • 举报
回复
其实不算繁,只是控件多了点,关系复杂了点,框架还是很明确的.
没给我加分吧?
mickeypeng 2001-08-10
  • 打赏
  • 举报
回复
这种方法也很繁啊,还不如用那种呢,没有更好的方法吗??算你回答对了第二个问题,给你加两分!
rovoboy 2001-08-09
  • 打赏
  • 举报
回复
所有的TAB都没了,好难看,呜呜呜呜呜
rovoboy 2001-08-09
  • 打赏
  • 举报
回复
有是有的,不过可能更繁:
把所有对话框里的控件放好,然后响应TCN_SELCHANGING和TCN_SELCHANGE
void CViewStatus::OnSelchangingViewStatusTab(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
//准备改变标签时调用
SwitchPage(m_TabCtrl.GetCurSel(),SW_HIDE); //隐藏原标签页的控件对象
*pResult = 0;
}

void CViewStatus::OnSelchangeViewStatusTab(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
//标签改变后时调用
SwitchPage(m_TabCtrl.GetCurSel(),SW_SHOW); //显示新标签页的控件对象
Invalidate();
*pResult = 0;
}
int CViewStatus::SwitchPage(int page, int cmd)
{
//切换页面,显示或隐藏指定页上的控件,cmd=SW_SHOW或SW_HIDE
int i;
GetDlgItems(); //得到各对象指针,自定义的
switch(page) //根据page执行相应的代码
{
//显隐第一个页面的对象
case 0:
//显隐多选框和相应的属性按钮
for(i=1;i<=10;i++)
{
if (theApp.m_pSystemSetting->m_CheckText[m_NowRadio][i][0]!=0) //若该对象相对应的文字不为空则进行操作
{
m_pChecks[i]->ShowWindow(cmd); //处理多选框
m_pColorSets[i]->ShowWindow(cmd); //处理属性按钮
}
}
//显隐单选按钮
for(i=1;i<=12;i++)
{
m_pRadios[i]->SetCheck(0);
m_pRadios[i]->ShowWindow(cmd);
if (theApp.m_pSystemSetting->m_CheckText[i][0][0]==0) m_pRadios[i]->ShowWindow(SW_HIDE);
}
m_pRadios[m_NowRadio]->SetCheck(1);
//显隐其他
GetDlgItem(IDC_STATIC_INTERVAL_TIME)->ShowWindow(cmd);
GetDlgItem(IDC_STATIC_STEP)->ShowWindow(cmd);
GetDlgItem(IDC_VIEW_STATUS_CURVE_STEP)->ShowWindow(cmd);
GetDlgItem(IDC_VIEW_STATUS_CURVE_STEP_OK)->ShowWindow(cmd);
GetDlgItem(IDC_VIEW_STATUS_INTERVAL_SET)->ShowWindow(cmd);
GetDlgItem(IDC_VIEW_STATUS_GETDATA_START)->ShowWindow(cmd);
GetDlgItem(IDC_VIEW_STATUS_GETDATA_STOP)->ShowWindow(cmd);
break;
//显隐第二个页面的对象
case 1:
m_ViewCurve.ShowWindow(cmd); //显隐实时曲线框
break;
//显隐第三个页面的对象
case 2:
//显隐单选按钮
for(i=1;i<=12;i++)
{
m_pRadios[i]->SetCheck(0);
m_pRadios[i]->ShowWindow(cmd);
if (theApp.m_pSystemSetting->m_CheckText[i][0][0]==0) m_pRadios[i]->ShowWindow(SW_HIDE);
}
m_pRadios[m_NowRadioP3]->SetCheck(1);
//显隐数据显示控件
for(i=1;i<=10;i++)
{
if (theApp.m_pSystemSetting->m_CheckText[m_NowRadioP3][i][0]!=0) //若该对象相对应的文字不为空则进行操作
{
m_pDataLabel[i]->ShowWindow(cmd); //处理数据显示控件
}
}
break;
}
return 1;
}
LRESULT CViewStatus::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
//响应并处理各控件消息
//message=WM_COMMAND时消息为控件产生
//wParam为控件ID
UINT i,j;
GetDlgItems();
//由于有的控件在多个页面上出现,因此需判断页面
//若消息为控件产生的且当前页面为第一页
if (message==WM_COMMAND&&m_TabCtrl.GetCurSel()==0)
{
//处理多选框消息
for(i=1034;i<=1043;i++)
{
if (wParam==i)
{
if (theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1033].Show)
{
m_ViewCurve.DeleteItem(m_NowRadio*13+i-1033);
}
else
{
m_ViewCurve.InsertItem(m_NowRadio*13+i-1033);
m_ViewCurve.SetColor(m_NowRadio*13+i-1033,theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1033].ColorRef);
CString InfoStr;
InfoStr=theApp.m_pSystemSetting->m_CheckText[m_NowRadio][0];
InfoStr+="的";
InfoStr+=theApp.m_pSystemSetting->m_CheckText[m_NowRadio][i-1033];
m_ViewCurve.SetInfo(m_NowRadio*13+i-1033,InfoStr);
m_ViewCurve.SetRange(m_NowRadio*13+i-1033,theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1033].CurveLowVal,theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1033].CurveHighVal);
}
m_ViewCurve.Reset();
theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1033].Show=!theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1033].Show; //存储控件状态
}
}

//处理单选按钮消息
for(i=1045;i<=1056;i++)
{
if (wParam==i)
{
m_NowRadio=i-1044; //保存按下的单选按钮序号
//显示按下的单选按钮对应的多选框及属性按钮
for(j=1;j<=10;j++)
{
m_pChecks[j]->SetCheck(theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][j].Show); //设置多选框是否选中
m_pChecks[j]->SetWindowText(theApp.m_pSystemSetting->m_CheckText[m_NowRadio][j]); //设置多选框文字
//显隐多选框及对应的属性按钮,若该多选框有文字则显示,反之隐藏
if (theApp.m_pSystemSetting->m_CheckText[m_NowRadio][j][0]==0)
{
m_pChecks[j]->ShowWindow(SW_HIDE);
m_pColorSets[j]->ShowWindow(SW_HIDE);
}
else
{
m_pChecks[j]->ShowWindow(SW_SHOW);
m_pColorSets[j]->ShowWindow(SW_SHOW);
}
}
}
}
//处理属性按钮消息
for(i=1057;i<=1066;i++)
{
if (wParam==i)
{
CDataProp tDlg;
tDlg.DoModal(this,i-1056);
m_ViewCurve.SetColor(m_NowRadio*13+i-1056,theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1056].ColorRef);
m_ViewCurve.SetRange(m_NowRadio*13+i-1056,theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1056].CurveLowVal,theApp.m_pSystemSetting->m_DataStatus[m_NowRadio][i-1056].CurveHighVal);
}
}
//处理开始采样按钮消息
if (wParam==IDC_VIEW_STATUS_GETDATA_START)
{
int Interval;
Interval=GetDlgItemInt(IDC_VIEW_STATUS_INTERVAL_SET); //得到采样间隔
if(Interval<50) //判断合法性
{
AfxMessageBox("采样间隔太小\n请大于等于50ms",NULL,NULL);
}
else
{
SetTimer(1,Interval,NULL); //打开采样定时器
m_Interval=Interval;
m_pGetData->Reset(); //数据清零
m_ViewCurve.Reset(); //实时曲线复位
}
}
//处理结束采样按钮消息
if (wParam==IDC_VIEW_STATUS_GETDATA_STOP)
{
KillTimer(1); //关闭采样定时器
m_Interval=-1;
m_pGetData->Reset(); //数据清零
m_ViewCurve.Reset(); //实时曲线复位
}
//处理实时曲线步长设置
if (wParam==IDC_VIEW_STATUS_CURVE_STEP_OK)
{
int val;
val=GetDlgItemInt(IDC_VIEW_STATUS_CURVE_STEP);
if (val==0||val>20)
AfxMessageBox("实时曲线步长不能为0且不能大于20!",NULL,NULL);
else
{
m_Space=val;
m_ViewCurve.Reset();
m_ViewCurve.SetSpace(m_Space);
}
}
}

//若消息为控件产生的且当前页面为第三页
if (message==WM_COMMAND&&m_TabCtrl.GetCurSel()==2)
{
//处理单选按钮消息
for(i=1045;i<=1056;i++)
{
if (wParam==i)
{
m_NowRadioP3=i-1044; //保存按下的单选按钮序号
//显示按下的单选按钮对应的数据显示控件
for(j=1;j<=10;j++)
{
m_pDataLabel[j]->SetWindowText(theApp.m_pSystemSetting->m_CheckText[m_NowRadioP3][j]); //设置数据显示控件文字
//显隐数据显示控件,若该数据显示控件有文字则显示,反之隐藏
if (theApp.m_pSystemSetting->m_CheckText[m_NowRadioP3][j][0]==0)
{
m_pDataLabel[j]->ShowWindow(SW_HIDE);
}
else
{
m_pDataLabel[j]->ShowWindow(SW_SHOW);
}
}
}
}
}
return CDialog::WindowProc(message, wParam, lParam);
}
生成类是不是有个Change按钮吗?选个你想要的文件就可以了
我要突破0分大关,靠你了,兄弟.

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧