VC++(七)对话框

  • 在MFC中,对资源的操作通常都是通过一个与资源相关的类来完成的。

  • 模态对话框domodal

CTestDlg dlg;
dlg.DoModal();
  • 非模态对话框create
CSon dlg;
dlg->Create(IDD_DIALOG2,this);
dlg->ShowWindow(SW_SHOW);
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CTestDlg::IDD, pParent)
{}

如果父窗口的指针是NULL,则对话框的父窗口是主应用程序窗口。

  • 在构造函数的时候,传递的父窗口指针为空。模态对话框不用传递父指针,它堵住了程序的运行。
    非模态对话框在create的时候可以传递父窗口的指针。不同的使用方法会产生不同的效果。

  • 定义指针,在堆上分配内存。
    堆上分配的内存,与程序的整个生命周期是一致的。

  • CDialog的ONOK()函数,调用EndDialog函数,这个函数用于终止模态对话框。对于非模态对话框,这个函数只是使非模态对话框不可见,并不销毁它。
    所以,非模态对话框ONOK时必须重写,并在重写的函数中调用DestroyWindow函数,以完成销毁对话框的工作。ONCANCEL也是一样的。

  • 动态创建按钮
    CWnd对象都有一个成员变量:m_hWnd,用来保存与窗口对象相关联的窗口句柄。如果窗口对象没有与任何一个窗口相关联,这个句柄就为NULL。

  • 静态文本控件在默认状态下是不发送通告消息的。
    为了能够相应通告消息:
    1、添加消息响应函数。
    2、notify打钩。

  • GetDialogItem()返回值为CWnd类型的指针

  • GetDialogItemText()将GetDialogItem()和GetWindowText()结合起来。

  • DDX_为前缀的函数,这些函数分别用于不同控件的数据交换。
    Dialog Data Exchange

  • DDV_为前缀的函数,这些函数用于数据校验。

  • 对话框伸缩功能的实现。

UpdateData TRUE的时候,变量获取对话框的数据。FALSE的时候,对话框赋值。

static CRect rectLarge;
static CRect rectSmall;

if(rectLarge.IsRectNull())
{
    CRect rectSeparator;
    GetWindowRect(&rectLarge);
    GetDlgItem(IDC_SEPARATOR)->GetWindowRect(&rectSeparator);

    rectSmall.left=rectLarge.left;
    rectSmall.top=rectLarge.top;
    rectSmall.right=rectLarge.right;
    rectSmall.bottom=rectSeparator.bottom;
}

静态变量。若未赋以初值,则由系统自动赋值。数值型变量自动赋初值0,字符型变量赋初值空字符。

SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(),
            SWP_NOMOVE | SWP_NOZORDER);

SWP_NOMOVE 忽略x和y参数
SWP_NOZORDER 忽略pWndInsertAfter参数。
  • 窗口的Z次序。假想轴,从屏幕向外伸展的Z轴。Z次序最上面的窗口覆盖所有其他的窗口。
    兄弟窗口,共享同一个父窗口的多个子窗口叫兄弟窗口。

系统管理3个独立的Z次序。
顶层窗口
兄弟窗口
最顶层窗口

  • 活动窗口是应用程序的顶层窗口。只有一个顶层窗口是活动窗口。

  • 主窗口的建立代表应用程序的开始。

逃跑按钮的实现
属性表单和向导的创建

CAboutDlg,派生于CDialog类。显示关于对话框。
CTestApp,派生于CWinApp类,派生于CWinThread类。它的对象代表了应用程序本身。

属性表单,解决了无法在一个对话框中显示的问题。
属性页:MFC类是 CPropertyPage

CPropertyPage
添加了三个继承于CPropertyPage的类。CPROP1,CPROP2,CPROP3

CPropertyPage派生于CDialog,CDialog派生于CWnd
CPropertySheet派生于CWnd,也可以用domodal

向导的创建
第一个radio的group设置为TRUE。
第一个radio添加变量。m_occupation
-1没有选中任何东西
0选中第一个
1选中第二个

WM_CHAR和WM_KEYDOWN这两个消息被对话框上的控件截获了,不能到达这两个消息响应函数。
删掉对话框上的控件时,可以截获WM_KEYDOWN消息。
但是依然不能获得WM_CHAR消息

必须重载PreTranslateMessage这个函数才能实现。

你可能感兴趣的:(VC++(七)对话框)