MFC对话框程序基础复习001

来源:互联网 发布:excel筛选多列数据 编辑:程序博客网 时间:2024/06/03 23:00

对话框基础复习一 2011.4.21

对话框有两种:

一种是模态对话框(Modal['məudl]),其中模态对话框显示时候,程序的其他的在对话框之外都不可操作,只有关闭了模态对话框才可以继续操作,例如文本工具的“打开对话框”。

一种是非模态对话框(Modeless),非模态对话框跟用户对程序其他操作没有影响,例如文本工具的“查找对话框”。

 

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

 

模态对话框用DoModal来显示,非模态对话框用Create来生成,用ShowWindow来显示。

指针是在堆上分配内存的,和程序的整个生命周期一致(假设你不主动注销)。

void CEasyDialogView::OnDialog() 

{

// TODO: Add your command handler code here

CTestDlg *pTestDlg = new CTestDlg();

pTestDlg->Create(IDD_DIALOG1, this);

pTestDlg->ShowWindow(SW_SHOW);

}

这样是可以显示出Modaless对话框的,但是,这个函数的生命周期结束之后,pTestDlg销毁了,你就找不到刚才分配出来的内存空间了。

查MSDN可知道,在Modaless对话框的“OK”按钮并不会销毁窗口,要重写OnOK函数在其中加入DestroyWindow才能使得窗口销毁。

 

 

其中IDC_STATIC 这个ID号是规定了用来标识一些静态的做标识的文本的,所以在ClassWizard中看不到它,所以要操作的话就要改成其他的ID号。想要静态文本响应鼠标的消息,就要在属性对话框中选中Notify选中。

 

逗号表达式:用逗号来隔开多个表达式,整个逗号表达式的值就是最后一个表达式的值。

 

获取一个Item里的文本或数据的信息的函数有如下:

GetDlgItem()->GetWindowText();

GetDlgItemText()

GetDlgItemInt()

 

可以用 关联控件值(value)变量 来对进行特定的操作,如文本输入框的文本。

直接操作关联的控件值变量是没有效果的,因为没有进行控件的updata操作。

所以要在头尾加上UpdateData(TURE)和UpdateData(FALSE)函数。

UpdateData(TURE)表明当前函数正在获取控件的数据。

UpdateData(FALSE)表名当前函数已经在初始化控件的数据了。

 

关联控件控制(control)变量 是对控件本身的对象的关联,操作这个变量就是操作了控件的本身,所以不用Update也行。

mfc提供了 DDX - Dialog Data Exchange 对话框数据交换

  DDX - Dialog Data Validation 对话框数据校验

这些函数是一DDX_ DDV_作前缀的。

 

可以用消息来对控件来进行操作。例如:文本框的操作

WM_GETTEXT, WM_SETTEXT

设置文本框的复选部分:EM_GETSEL, EM_SETSEL

①::SendMessage()

②用本身关联的空间控制变量来使用如:m_edit.SendMessage();

③SendDlgItemMessage()直接向Item发送消息

 

SendMessage 与 PostMessage的区别

PostMessage只负责将消息放到消息队列中,不确定何时及是否处理

SendMessage要等到受到消息处理的返回码(DWord类型)后才继续

PostMessage执行后马上返回

SendMessage必须等到消息被处理后才会返回。

 

GetWindowRect 是用来获取窗口的矩形区域。

IsRectNull 判断区域是否为空

 

SetWindowPos/DeferWindowPos 设置窗口的位置

BingWindowToTop 把窗口置于顶层

SetForegroudWindow 设置前台窗口

 

SetWindowLong 可以用来设置窗口的属性

LONG SetWindowLong(

  HWND hWnd,       // handle to window

  int nIndex,      // offset of value to set

  LONG dwNewLong   // new value

);

当 nIndex 为 GWL_WNDPROC就可以重设一个窗口过程,返回先前的窗口过程,设置一个窗口过程,就可以响应一些别的消息

 

SetFocus 设置窗口的焦点

GetNextWindow 可以获取下一个窗口的句柄

GetWindow 获取特定关系的窗口句柄,包含上面的

 

GetNextDlgTabItem 获取下一个 可获取tab键转移的 Item

在控件属性页里 有个 Tab Stop 可以选,转中后就可以转移到这个按键

 

在 Layout菜单 中的TabOrder 选项选中,就可以设置tab的顺序了,很方便。

编辑框 不选中 多行 MultiLine 是不会响应回车消息的。

在MFC生成的对话框程序里,默认OK 按钮,默认回车按钮的ID就是IDOK(指没有设置DefaultButton的时候)。

原创粉丝点击