MFC第十一天

一 MFC属性页
1.类型
标签式--常用于参数,选项等设置。
向导式--常用于引导用户通过每一步的选择和设置最终完成某种功能
2.相关类
CPropertypage---页面对话框--父类是CDialog,页面对话框
CPropertySheet--父类是CWnd,页面对话框的窗口窗口.一个CPropertySheet对象可以包含多个CPropertypage对象
3.标签式
1.新建一个单文档应用程序,修改菜单,添加一项:标签式属性页.ID_LABELPROP.并为其添加事件处理程序。视图上。
2.添加两个属性页资源,在对话框下面。IDD_PAGE1。可以选中然后拖出一个。在第一个上添加一个编辑框,第二个上添加一个按钮。
3.为两个属性页添加类,双击即可,与对话框一样。父类选CPropertyPage.一定要注意父类的选取。
4.添加一个新的类,CLabelSheet.容器窗口类。并在该类中将两个属性页对象添加进去,先添加头文件。
CPage1 m_page1;
CPage2 m_page2;
5.为CLabelSheet添加成员函数。void PageSetup()用来设置页面
void CLabelSheet::PageSetup(void)
{
AddPage(&m_page1);
AddPage(&m_page2);
}
并在CLabelSheet的两个构造函数当中分别调用PageSetup函数。
6.
void CMFCView::OnLabelprop()
{
// TODO: 在此添加命令处理程序代码
     CLabelSheet sheet(_T("标签式"));
sheet.DoModal();
}

在View类中添加成员变量.
COLORREF m_lineColor;
在无参构造函数中将其初始化为,
m_lineColor=RGB(0,0,0);
m_nLineWidth=1;
在OnDraw(CDC *pDC){
//构造画笔
CPen pen(PS_SOLID,m_nLineWidth,m_nlinecolor);
//选入到设备
CPen *pOldPen=pDC->SelectObject(&pen);
pDC->Rectangle(100,100,200,200);
pDC->SelectObject(pOldPen);
pen.DeleteObject();
}
2.为属性页一的编辑框,二的按钮框添加事件处理程序。
void CPage1::OnChangeWidth(){


}
BOOL CPage::OnApply(){
UpdateData(true);
CLabelPropView*pView=(CLabelPropView*)((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
pView->m_nLineWidth=m_nLineWidth;
pView->Invalidate();
return CPropertyPage::OnApply();
}
//
void CPage2::OnColor(){
//将应用按钮设置为可用
SetModified(TRUE);
//打开颜色对话框
CColorDialog dlg();
if(IDOK!=dlg.DoModal())
return ;
}
  m_color=dlg.GetColor();
BOOL CPage2::OnApply(){
CLabelPropView*pView=(CLabelPropView*)((CFrameWnd*)AfxGetMainWnd())->GetActiveView();
pView->m_lineColor=m_color;
pView->Invalidate();
return CPropertyPage::OnApply();
}  
3标签式
3.1 插入页面对话框资源,定义页面对话框类。
3.2添加CPropertySheet类的子类,定义容器窗口类。
3.3将页面添加到容器窗口
AddPage
3.4创建和显示
doModal
消息
OnApply
OnCancel
OnCancel
3.6 注意
    初始时,应用按钮不可用,需要调用函数。
    SetModified(TRUE)  去设置
 
 
 
4.向导式
  4.1插入页面对话框资源,定义页面对话框类
  4.2添加CPropertySheet类的子类,定义容器窗口类
  4.3将页面添加到容器窗口
  AddPage
  4.4设置为向导式
  SetWizardMode
  4.5创建和显示
  doModal
  4.6消息
  OnSetActive
  OnWizardNext
  OnWizardBack
  OnWizardFinish
 4.7注意 
 设置页面的向导按钮,
 SetWizardButtons
 向导页面的顺序不能随意修改
 
 
 找些例子来做来了解有些函数的功能。 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  1 MFC属性页
    1.1 属性页分两类:
      标签式属性页 - 常在软件的选项/配置
       使用.
      向导式属性页 - 常在安装/引导用户
       使用或者配置参数时使用
    1.2 MFC相关类
      CPropertySheet - 父类是CWnd,容器的
        作用,在Sheet上可以放置一个或多个
        CPorpertyPage.
      CPorpertyPage - 父类是CDialog,独立
        的页面,放置自己相关的一组控件.


  2 标签式属性页的使用
  
    2.1 定义CPropertySheet
      CPropertySheet sheet( "设置" );
      可以使用它的成员变量
       CPropertySheet::m_psh
      调整Sheet的风格等参数。
    2.2 定义CPropertyPage
      2.2.1 添加属性页资源
      2.2.2 创建属性页类,注意要选择
        CPropertyPage作为属性页的父类
    2.3 将页面CPorpertyPage加入到Sheet中
      CPropertySheet::AddPage
    2.4 显示属性页
      CPropertySheet::DoModal()
      返回值是IDOK或IDCANCEL
    2.5 消息的响应
      当点击Sheet上的按钮时,会调用各个
      Page上相应的命令处理函数
      例如:点击Sheet的确定按钮,会调用
      页面的OnOK函数。
      
    注意:
      1 Sheet并不会在显示开始的时候,就
        立刻创建各个Page,只有在需要显示
        该Page的时候,才会真正的将Page的
        窗口创建出来
      2 应用按钮需要使用SetModified函数,
        才能点击,需要响应的是OnApply函数
        
  3 向导式属性页
  3.1 定义CPropertySheet
  3.2 定义CPropertyPage
  3.3 添加页面
   CPropertySheet::AddPage将属性页加入
   Sheet当中 
  3.4 设置成向导模式
   CPropertySheet::SetWizardMode函数,
   将属性页设置成向导模式
  3.5 显示属性页
    CPropertySheet::DoModal函数
    返回值ID_WIZFINISH和IDCANCEL 
  3.6 Sheet按钮状态
  每个页面相关的Sheet的按钮都必须
  在该页面中进行调整。
  可以在Page的OnSetActive函数中,
  使用Sheet的SetWizardButtons函数,
  完成按钮的调整.
  3.7 消息响应
       Sheet上的按钮产生消息,只对当前激
       活的页面有效,其他页面不会响应.
       
       注意: 各个页面的数据的保存,需要在
       各自的页面的消息响应中完成,一般是
       NEXT和FINISH消息


二 通用控件


  1 微调 Spin - CSpinButtonCtrl
              设置步长  SetAccel   GetAccel默认情况下为1
              
  2 滑块 Slider - CSliderCtrl
             设置步长   SetLineSize/GetLineSize    SetPageSize/GetPageSize
  3 进度条 Progress - CProgressCtrl
  
             设置步长   SetStep
             移动一个步长 StepIt
  4.控件中相同的函数
          设置或者获取范围     SetRange     GetRange    SetRange32   GetRange32
          设置或者获取当前位置   SetPos    GetPos
          
          
              
上述三个控件在使用时非常相似。
1.徽调按钮一般和一个编辑框联系一一起,两者之间会有一个伙伴关系。首先要确定两者的tab键顺序是相邻(编辑框小)的。ctrl+d   ..然后设置徽调按钮的属性,属性中有一个Auto buddy.选中它,这样它会找相邻的编辑框形成伙伴关系。选中set buddy integer这样当我们点击上下按钮的时候,在编辑框中就会有一个整型数值了。将排列改为向右排列。两个即可以一起工作了。
 2.进度条:我们可以添加一个按钮,让它来控件进度条的位置。按钮名为move。双击它可以生成函数。
实现功能:让这三个同步,移动一个,其它两个也都能改变。
1.首先为控件添加成员变量。m_wndProgress  m_wndSlider m_wndSpin.这样三个变量就有了,而且是控件类型的变量。
2.在OnInitDialog函数中添加初始化操作
    //设置控件范围
    m_wndProgress.SetRange(0,100);
m_wndSlider.SetRange(0,100);
m_wndSpin.SetRange(0,100);
//设置步长
m_wndProgress.SetStep(5);
m_wndSlider.SetLineSize(10);
m_wndSlider.SetPageSize(20);
 
  void CDlgBaseControlDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//进度条向前移动一个步长
m_wndProgress.StepIt();
//获取进度条的当前位置
int nPos=m_wndProgress.GetPos();
//设置给其它两 个控件
m_wndSlider.SetPos(nPos);
m_wndSpin.SetPos(nPos);
}
///为Slider添加事件处理程序,消息类型为ON_CUSTOMDRAW
void CDlgBaseControlDlg::OnNMCustomdrawSlider2(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
int nPos=m_wndSlider.GetPos();
m_wndProgress.SetPos(nPos);
m_wndSpin.SetPos(nPos);
*pResult = 0;
}
//为微调按钮Spin添加事件处理程序
void CDlgBaseControlDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
//获取徽调按钮的位置
int nPos=pNMUpDown->iPos;
m_wndProgress.SetPos(nPos);
m_wndSlider.SetPos(nPos);
*pResult = 0;
}


 
  4 列表 ListCtrl - CListCtrl
  5 树   TreeCtrl - CTreeCtrl
  
  
  
       
    











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值