VC 模式对话框和非模式对话框的创建,销毁和区别

合集下载

Qt 模态对话框和非模态对话框

Qt 模态对话框和非模态对话框

详解 Qt 模态对话框和非模态对话框2011-07-01 11:33 佚名互联网我要评论(0)字号:T | T如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗口就阻塞了;模态对话框则不是阻塞型的线程模型,父子线程可以并行运行。

AD:Qt 模态对话框和非模态对话框是本文介绍的内容,本文认为本篇是一篇很有意思的文章,不多说,我们先来看内容。

模态对话框就是指在子对话框弹出时,焦点被强行集中于该子对话框,子对话框不关闭,用户将无法操作其他的窗口。

非模态相反,用户仍然可以操作其他的窗口,包括该子对话框的父对话框。

如果从线程角度来讲,模态对话框实际上是线程阻塞的,也就是子对话框是一个线程,但是在创建这个子线程之后,父窗口就阻塞了;模态对话框则不是阻塞型的线程模型,父子线程可以并行运行。

和所有流行的图形类库一样,Qt也提供了创建模态和非模态对话框的机制。

在Qt中创建模态对话框,主要用到了QDialog的exec函数:1.SonDialog dlg(this);2.int res = dlg.exec();3.if (res == QDialog::Accepted)4.{5. QMessageBox::information(this, "INFORMATION", "You clicked OK button!");6.}7.if (res == QDialog::Rejected)8.{9. QMessageBox::information(this, "INFORMATION", "You clicked CANCEL button!");10.}正如上面代码所显示的,可以通过exec函数的返回值来判断用户点击了哪个按钮使得模态对话框退出的,这可以使得我们能够根据用户的不同行为在推出退出模态对话框之后采取不同的处理方法。

软酷网C++知识补强考试试题及答案

软酷网C++知识补强考试试题及答案

1.软酷实训在哪里进行?软酷卓越实验室2.3.软酷网首页地址是什么? 4.5.67891011在C++语言中,关于自定义的标识符说法正确的是?A.能使用关键字并且不区分大小写B.不能使用关键字并且不区分大小写C.能使用关键字并且区分大小写D.不能使用关键字并且区分大小写C++程序的头文件和源程序文件扩展名分别为?A..h .cB. .cpp .hC..h .cppD..dsw .dsp C++源程序文件的扩展名为A. .cppB.).cC..dllD..exe编写代码时,每行语句以(?)结束。

A..B.,C. ;D. 。

下列符号中,( ) 不是分隔符。

A.;B.//C.()D. {}以下各选项组中,都是C++语言关键字的组是A.cout, operator, thisB.short, string, staticC. if, while, >=D. private, public, printf将小写字母n赋值给字符变量one_char,正确的操作是?A. one_char = '\n';B.one_char = "n";C.one_char = 110;D.one_char = 'N';字符串常量"ME"的字符个数是A.4B.3C.2D.1下列关于指针的用法中错误的是?A.int i; int *ptr = &i;B. int i; int *ptr; i=*ptr;C. int *ptr; ptr = 0;D. int i = 5; int *ptr; *ptr=&i; 以下那种类型不是C++语言的基本数据类型:A.字符类型B.整数类型C.逻辑类型D.枚举类型当一个函数无返回值时,函数的类型就为?A.任意B.voidC.intD.char下列程序段执行完后,x的值是?x = 0;for(int i = 0; i < 90; i++){if(i) x++;}A.0B.30C.89D.90对下列程序段的描述正确的是?#include <iostream.h>int Fun(int, int);void main(){cout << Fun(5, 50) << endl;}int Fun(int x, int y){return x * x + y * y;}A.该函数定义正确,但函数调用方式错误B.该函数调用方式正确,但函数定义错误C.该函数定义和调用方式都正确D. 该函数定义和调用方式都错误下列叙述中错误的是?A. 一个函数中可以有多条return语句B.调用函数必须在一条独立的语句中完成C. 函数中通过return语句传递函数值D.主函数名main也可以带有形参存取指针所指的值时,采用的运算符是A.#B.&C.%D.*下面是类MyClass的定义,对定义中语句描述正确的是?class MyClass{public:void MyClass(int a){X = a;} //①int f(int a, int b) //②{X = a;Y = b;}int f(int a, int b, int c=0) //③{X = a;Y = b;Z = c;}static void g(){X = 10;} //④private:int X, Y, Z;};A.语句①是类MyClass的构造函数定义B.语句②和语句③实现类成员函数的重载C.语句④实现对类成员变量X的更新操作D.语句①②③④都不正确对于下面定义的类MyClass,在函数f()中将对象成员n的值修改为50的语句应该是?class MyClass{public:MyClass(int x) {n = x;}void SetNum(int nl){n = nl;}private:int n;}int f(){MyClass *ptr = new MyClass(45);________}A.MyClass(50);B.SetNum(50);C.ptr->SetNum(50);D.ptr->n = 50;使用下面那个关键字来定义类?A.classB.structC.extendsD.public下列关键字中哪一个不是用于类的访问控制的A.publicB.friendC.privateD.protected为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为?A.publicB.protectedC.privateD.static()的功能是构造对象并初始化对象。

VC6.0 显示,关闭,销毁模态与非模态对话框技巧

VC6.0 显示,关闭,销毁模态与非模态对话框技巧

VC6.0 显示,关闭,销毁模态与非模态对话框技巧一、显示对话框:1.显示模式对话框:CDialogDemo dlg;dlg.DoModal();2.显示非模式对话框:CDialogDemo *dlg=new CDialogDemo(this);dlg->Create(IDD_GENERAL_CONTROL);dlg->ShowWindow(SW_SHOW);二、关闭对话框:1.CDialog::OnOK();2.CDialog::DestoryWindow();3.CDialog::EndDialog(0);注:CDialog::CloseWindow(); 仅仅是最小化对话框PostMessage(WM_CLOSE)相关函数详解:CloseWindow函数功能:该函数最小化指定的窗口,但并不销毁该窗口。

函数原型:BOOL CloseWindow(HWND hWnd);参数:hWnd:将要最小化的窗口的句柄。

返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。

若想获得更多错误信息,请调用GetLastError函数。

备注:窗口尺寸被最小化成一个图标,并移动到屏幕的图标区域。

系统显示窗口的图标而不显示窗口,并在图标下显示窗口标题。

应用程序必须使用DestroyWindow函数销毁窗口。

DestroyWindow函数功能:销毁指定的窗口。

这个函数通过发送WM_DESTROY 消息和WM_NCDESTROY 消息使窗口无效并移除其键盘焦点。

这个函数还销毁窗口的菜单,清空线程的消息队列,销毁与窗口过程相关的定时器,解除窗口对剪贴板的拥有权,打断剪贴板器的查看链。

函数原型:BOOL DestroyWindow( HWND hWnd // handle to window to destroy);hWnd :将被销毁的窗口的句柄。

返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。

烟台南山学院期末考试试卷(A)

烟台南山学院期末考试试卷(A)

烟台南山学院2005—2006学年第1学期期末考试试卷(A)04计算机应用 (专业) VC++ 6.0 程序设计(课程名称)一、选择题(每小题1分,共15分)1、使用______命令可以使设备播放多媒体文件。

(A)MCI_SET (B)MCI_STATUS (C)MCI_PLAY (D)MCI_STOP2、下列类中,________类为用户提供了对表记录进行查询记录、添加记录、删除记录、修改记录的操作的功能。

(A)CDatabase(B)CRecordset (C)CRecordView (D)CDialog3、目名为:EX_SDIHello的单文档VC++程序,MFC为用户自动创建了4个主要的类,请选择:(1)视图类_____ (2)应用程序类_____(3)主框架窗口类_____ (4)文档类____(A) CEx_SDIHelloApp (B) CEx_SDIHelloDoc(C) CEx_SDIHelloView (D) CmainFrame4、可以将一些绘图有关的代码添加到项目视图类的虚函数OnDraw (CDC *pDC)中,_______。

(A)能在文档中进行图形的绘制(B)能在主框架中进行图形的绘制(C)能在应用程序中进行图形的绘制(D)能在视图中进行图形的绘制5、项目名为:EX_SDIHello的单文档Vc++程序中的视图类OnDraw (CDC *pDC)虚函数中,有以下代码:CEx_SDIHelloDoc *pDoc = GetDocument ( );其功能是_______。

(A)获取视图类指针(B)获取应用程序类指针(C)获取文档类指针(D)获取主框架类指针6、项目名为:EX_SDIHello的单文档Vc++程序中的主框架头文件中的保护模式下,有两个系统自动定义的变量,它们分别是:CStatusBar m_wndStatusBar; _________ CToolBar m_wndToolBar; _________ (A)工具栏类变量(B)资源类变量(C)状态栏类变量(D)对话框类变量7、项目名为:EX_SDIHello的单文档VC++程序中的主框架执行文件中,有以下代码static UINT indicators [ ] = {ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCAL,};其用来表示:________。

VC中窗口的销毁

VC中窗口的销毁

VC中窗口的销毁一个窗口包括两部分:窗口资源HWND和窗口对象CWnd,销毁时首先释放资源HWND,然后销毁对象CWnd。

例如:自定义的对话框类型CMyDlg,使用时用new在堆上分配了一个新的对话框对象,该对象调用CWnd::Create()时会为该对象分配一个窗口对象。

销毁时应该首先使用CWnd::DestroyWindow()或者::DestroyWindow(HWND hWnd)销毁资源,然后使用delete pDlg删除在对上为该对话框分配的空间。

但是,由于CWnd::DestroyWindow()和::DestroyWindow(HWND hWnd)都会在最后调用CWnd的PostNcDestroy(),因此我们也可以在PostNcDestroy()中调用delete this来删除堆上分配的空间。

这样就不用显示的使用delete pDlg例子:创建窗口:CTestDlg*pDlg=new CTestDlg();pDlg-&gt;Create(IDD_DLG,this);pDlg-&gt;ShowWindow(SW_SHOW);销毁:pDlg-&gt;DestroyWindow();或者::DestroyWindow(pDlg-&gt;m_hWnd);delete pDlg;或者void CTestDlg::PostNcDestroy(){CDialog::PostNcDestroy();delete this;}这样,在销毁时,只需要pDlg-&gt;DestroyWindow();或者::DestroyWindow(pDlg-&gt;m_hWnd);参考资料:考虑单窗口情况:假设自己通过new创建了一个窗口对象pWnd,然后pWnd-&gt;Create。

则销毁窗口的调用次序:1.手工调用pWnd-&gt;DestroyWindow();2.DestroyWindow会发送WM_DESTROY;3.WM_DESTROY对应的消息处理函数是OnDestroy();4.DestroyWindow会发送WM_NCDESTROY;5.WM_NCDESTROY对应的消息处理函数是OnNcDestroy;6.OnNcDestroy最后会调用PostNcDestroy;7.PostNcDestroy经常被用户重载以提供释放内存操作。

模式对话框与非模式对话框的区别

模式对话框与非模式对话框的区别

模式对话框就是不处理它就没法处理父窗口,而非模式对话框就是不用先处理此对话框也可以处理父窗口.例子:在桌面上右击我的电脑,选择属性,弹出系统属性窗口,点击下面的技术支持,弹出技术支持信息,现在再对系统属性窗口进行操作就操作不了,这种叫做模式对话框;关闭技术支持信息,在系统属性里选择硬件,点击设备管理器,弹出设备管理器窗口,现在再对系统属性窗口进行操作仍然可以操作,这种就叫做非模式对话框。

在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的。

而非模式对话框则是利用CreateWindow来创建的。

在MFC或是WTL中,模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create。

一、使用中的区别模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。

而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作。

二、消息响应的区别在消息响应方面,模式对话框和非模式对话框之间又有着很大的区别。

模式对话框工作的时候,它有内部的消息泵机制,控件之间的交互不用我们人为的去控制,系统会帮助我们去处理。

非模式对话框则像普通窗口一样,则由WinMain中书写的消息循环驱动。

但由于是对话框,它对一些消息有特殊的处理。

因此,在消息循环中,需要先对对话框提供截获消息的机会。

While (GetMessage(&msg, NULL, 0, 0)){if (hDlgModeless == 0 || !IsDialogMessage(hDlgModeless, &msg)){TranslateMessage(&msg);DispatchMessage( &msg);}}如果当前取得的消息是对话框的消息,IsDialogMessage 将它交由对话消息处理函数处理,并返回TRUE。

不需要再派发了。

注意:这个方法并不是很好用,因为当对话框过多的时候,处理起来就比较麻烦了。

【初学VC讲稿】第5篇:对话框应用简单示例

【初学VC讲稿】第5篇:对话框应用简单示例
(1)用对话框编辑器创建包含各种控件的对话框资源。对话框编辑器会对项目的资源文件
进行更新使之包含新的对话框资源,并且该项目的resource.h文件也会被更新,以便能包含
新的#define常量。
(2)利用ClassWizard创建Cdialog的派生类,并将它同第一步创建的资源相连接。ClassWizard会自动在Developer Studio的项目中加入相应的代码和头文件。
今天我们来学习对话框的编程
【知识要点】(参考《Visual C++技术内幕》)
1,模式对话框(Modal dialog box):打开后直至关闭期间不可在应用程序的其它位置工作。非模式对话框(Modalless dialog box):打开后直至关闭期间可在应用程序的其它位置工作。
2,对话框编程的一般步骤
while(1)
{s
if(dlg.DoModal()==IDCANCEL)//选择[退出]将退出应用程序
{
return false;
}
if(dlg.m_strPassword=="123456")//密码正确,跳出循环
{
break;
}
else//密码不正确,提示重新输入
{
AfxMessageBox("密码不正确,请重新输入");
Member variable name:m_strPassword
Category:value
Variable type:Cstring
4,在MyDefMsg.cpp文件中修改BOOL CMyDefMsgApp::InitInstance()
BOOL CMyDefMsgApp::InitInstance()

VC显示关闭销毁模态与非模态对话框技巧

VC显示关闭销毁模态与非模态对话框技巧

VC显示关闭销毁模态与非模态对话框技巧VC++是一种用于Windows平台开发应用程序的集成开发环境,用于构建图形用户界面和控制应用程序的行为。

在VC++中,对话框是一种常用的用户界面元素,可以用于显示和获取用户输入。

在使用对话框时,要注意对话框的显示、关闭和销毁。

1.显示对话框在VC++中,显示一个对话框可以通过以下几种方式实现:a. 使用DoModal函数DoModal函数是CDialog类的一个成员函数,用于显示对话框,并返回对话框的返回值。

例如,可以使用下面的代码显示一个对话框:CMyDialog dlg;dlg.DoModal(;b. 使用Create函数Create函数是CDialog类的另一个成员函数,用于创建对话框,并显示它。

使用Create函数时,需要先调用Create函数创建对话框,然后调用ShowWindow函数显示对话框。

以下是使用Create函数显示对话框的示例代码:CMyDialog dlg;dlg.Create(IDD_MYDIALOG);dlg.ShowWindow(SW_SHOW);c.使用模态对话框模态对话框是一种阻塞式对话框,显示模态对话框时,在对话框关闭之前,用户无法与其他应用程序进行交互。

要显示一个模态对话框,可以通过调用DoModal函数,并传递对话框的资源ID来实现。

以下是使用模态对话框的示例代码:CMyDialog dlg;INT_PTR nResponse = dlg.DoModal(;2.关闭对话框在VC++中,可以使用以下几种方式关闭对话框:a. 使用EndDialog函数EndDialog函数是CDialog类的一个成员函数,用于关闭对话框,并返回对话框的返回值。

以下是使用EndDialog函数关闭对话框的示例代码:OnOKEndDialog(IDOK);b.使用DestroyWindow函数DestroyWindow函数是CWnd类的一个成员函数,用于销毁窗口,并关闭对话框。

VC编程技术点滴(对话框)

VC编程技术点滴(对话框)

VC编程技术点滴(二)定义一个简单的对话框(2009-05-12 10:00:11)标签:vc自定义对话框it分类:VC学习点滴一、定义对话框资源继续上一节使用的程序例子。

如下图所示,在程序资源视图中添加一个自定义的对话框:对话框比较简单,只是添加了一个编辑框控件和一个显示提示文字的静态文本控件,另外的OK按钮和Cancel按钮是系统自动添加的。

二、定义对话框类有了对话框资源,还要定义一个与之关联的对话框类才可以使用。

如下图所示定义对话框类:有了对话框类,为了使其它对象(如CSysMenuView对象)可以获取对话框中的控件信息,需要为对话框类添加一个公共成员变量,以保存编辑框的输入值。

这里定义一个字符串变量name,如下图所示:获取对话框中编辑控件输入值的方法有多种,下图是通过定义编辑框控件的关联变量(控件的成员变量有两种类型,一种是值变量,保存用户输入;一种是控件变量,代表当前控件对象)m_Name来获取输入值:也可以实验一下定义一个编辑框的控件变量m_Edit,如下图所示:为控件添加成员变量后,系统自动生成以下代码://MyDialog.h......class MyDialog : public CDialog{// Constructionpublic:CString name;//前面定义的MyDialog类的公共成员变量,用于在对话框以外获取数据信息MyDialog(CWnd* pParent = NULL); // standard constructor// Dialog Data//{{AFX_DATA(MyDialog)enum { IDD = IDD_DIALOG1 };CEdit m_Edit;CString m_Name;//}}AFX_DATA......//MyDialog.cpp......MyDialog::MyDialog(CWnd* pParent ): CDialog(MyDialog::IDD, pParent){//{{AFX_DATA_INIT(MyDialog)m_Name = _T("");//在构造函数中初始化控件成员变量//}}AFX_DATA_INIT}//对话框数据交换函数void MyDialog::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(MyDialog)//关联编辑控件及其成员变量DDX_Control(pDX, IDC_EDIT1, m_Edit);DDX_Text(pDX, IDC_EDIT1, m_Name);//}}AFX_DATA_MAP}......下面为对话框的OK按钮添加消息处理函数。

VC中窗口的销毁

VC中窗口的销毁

VC中窗口的销毁一个窗口包括两部分:窗口资源HWND和窗口对象CWnd,销毁时首先释放资源HWND,然后销毁对象CWnd。

例如:自定义的对话框类型CMyDlg,使用时用new在堆上分配了一个新的对话框对象,该对象调用CWnd::Create()时会为该对象分配一个窗口对象。

销毁时应该首先使用CWnd::DestroyWindow()或者::DestroyWindow(HWND hWnd)销毁资源,然后使用delete pDlg删除在对上为该对话框分配的空间。

但是,由于CWnd::DestroyWindow()和::DestroyWindow(HWND hWnd)都会在最后调用CWnd的PostNcDestroy(),因此我们也可以在PostNcDestroy()中调用delete this来删除堆上分配的空间。

这样就不用显示的使用delete pDlg例子:创建窗口:CTestDlg*pDlg=new CTestDlg();pDlg-&gt;Create(IDD_DLG,this);pDlg-&gt;ShowWindow(SW_SHOW);销毁:pDlg-&gt;DestroyWindow();或者::DestroyWindow(pDlg-&gt;m_hWnd);delete pDlg;或者void CTestDlg::PostNcDestroy(){CDialog::PostNcDestroy();delete this;}这样,在销毁时,只需要pDlg-&gt;DestroyWindow();或者::DestroyWindow(pDlg-&gt;m_hWnd);参考资料:考虑单窗口情况:假设自己通过new创建了一个窗口对象pWnd,然后pWnd-&gt;Create。

则销毁窗口的调用次序:1.手工调用pWnd-&gt;DestroyWindow();2.DestroyWindow会发送WM_DESTROY;3.WM_DESTROY对应的消息处理函数是OnDestroy();4.DestroyWindow会发送WM_NCDESTROY;5.WM_NCDESTROY对应的消息处理函数是OnNcDestroy;6.OnNcDestroy最后会调用PostNcDestroy;7.PostNcDestroy经常被用户重载以提供释放内存操作。

Ms Visual C++讲义4--对话框

Ms Visual C++讲义4--对话框

单选按钮 IDC_SEX1
未完待续见下页
步骤之五
控件
控件9
类别
续表1 控件属性表 ID值 属性
Caption:女,TabStop Caption: Caption:费用, TabStop , Caption:自费, TabStop,Group Caption:公费, TabStop TabStop,Dropdown,Data:专家 号、普通号,sort不选 TabStop IDC_COST
§2 模式对话框的启动机制
• 见VC开发环境: CDialog::DoModal( );//显示对话框及其控件 • 体验模式对话框的特点: 垄断性 • 关闭对话框: CDialog::EndDialog( );
模式对话框的创建
1. 增加对话框资源:
resource? 见VC环境(创建临时工程SDI)。
步骤之三
图1 对话框中控件分布
步骤之四
控件
控件1 控件2 控件3 控件4 控件5 控件6 控件7 控件8
类别
按钮 按钮
表1 控件属性表 ID值
ID_IN IDCANCEL
属性
Caption:进入,TabStop Caption:退出,TabStop
静态文本 IDC_STATIC1 Caption:姓名 编辑框 编辑框 组框 IDC_NAME TabStop 静态文本 IDC_STATIC2 Caption:年龄 IDC_AGE IDC_SEX TabStop Caption:性别 Caption:男,TabStop,Group
§4
§4-1 控件的概念
控件
• 控件:是嵌入到对话框或其他父窗口中的一个小窗 口,用于显示或获取某些类型的信息。对话框通过 控件与用户交互。 • 常用控件及作用: 见VC环境。

Windows编程技术10-对话框

Windows编程技术10-对话框

lplfInitial指向一个LOGFONG结构,用来初始化对话框中的字体设置 dwFlags 用于设置对话框。 pdcPrinter 指向一个代表打印机的CDC对象,若设置该参数, 则选择的字体就为打印机所用 pParentWnd用于指定对话框的父窗口或拥有者窗口。
建立CFontDialog对话框
13
通用对话框
CFileDialog
建立CFileDialog对象 CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt=NULL, LPCTSTR lpszFileName =NULL,DWORD dwFlags=OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter=NULL, CWnd* pParentWnd = NULL ); bOpenFileDialog为TRUE, 创建打开对话框;为FALSE,创建保存对话框。 lpszDefExt 缺省文件扩展名。 lpszFileName 初始文件名,如果为NULL,则不显示初始文件名。 dwFlags 指明一些特定风格,通过这些风格可定制对话框。 pParentWnd 为指向父窗口或拥有者窗口的指针。 lpszFilter 指向过滤字符串: 1)过滤字符串有由多个子串组成,每个子串由两部分组成,第一部分是文件 类型的文字说明,如“Text file (*.txt)”,第二部分是用于过滤的匹配字符串, 如“*.txt”。 2)子串的两部分用竖线字符“|”分隔开,各子串之间也要用“|”分隔,整个串 的最后两个字符必须是两个连续的竖线字符“||”。 一个典型的过滤字符串如下面所示: char szFilter[]=“DATA files (*.DAT)|*.dat|Text files(*.txt)|*.txt||”;

《VC++程序设计》自学指导

《VC++程序设计》自学指导

《Visual C++程序设计》自学指导"Visual C++程序设计"是面向计算机类各专业的必修计算机类基础课程。

该课程介绍基本的程序设计技术,包括结构化程序设计方法(SP)、面向对象的程序设计方法(OOP)以及使用Visual C++和MFC开发WINDOWS应用程序的技术。

通过本课程的学习,使学生掌握现代程序设计的基本理论和方法,能用Visual C++进行基本的WINDOWS应用程序设计。

本课程的重点在培养学生的实际应用软件开发能力.通过本课程的学习,在结构化程序设计方法和面向对象的程序设计方法的基本理论研究WINDOWS应用程序开发和MFC编程能力方面达到以下基本要求:1.熟悉计算机程序的基本组成要素,包括数据类型、程序流程、函数和指针等基本概念;2.理解结构化程序设计方法(SP)的理论,掌握“自顶向下,逐步求精”的程序设计技术,可设计含有分支、循环和模块(函数)的程序;3.掌握C++的基本流程控制;4.理解类、对象、封装、继承和多态性等面向对象程序设计(OOP)概念,掌握基本的面向对象程序设计方法;5.理解WINDOWS的消息机制和WINDOWS应用程序的基本结构;6.掌握MFC的基本概念,窗口、资源、图形设备接口、文档/视图结构、对话框和控件等对象的程序设计方法,Visual Studio中的AppWizard、ClassWizard、资源编辑器和调试器等工具的方法,可用Visual C++开发基本的WINDOWS应用程序。

第1章C++入门学习目标1.了解Visual C++的特点。

2.熟悉Visual C++集成开发环境的基本使用方法。

3.学习使用Visual C++编写标准的C++控制台程序。

学习重点1.利用Visual C++编写标准的C++控制台程序。

第2章控制结构学习目标1.掌握结构化程序设计方法的基本思想。

2.熟练使用VC++的基本控制结构。

3.熟练使用VC++的控制语句。

vc实验报告-对话框

vc实验报告-对话框
class CStuDialog;
private:
CStuDialog *m_pDlg;
m_pView->PostMessage(WM_GOODBYE,IDC_SHOW);
}
else
{
CDialog::OnOK();
}
}
7、同样的在CFeiMotaiView类中添加CStuDialog指针,声明class CStuDialog
包含CStuDialog.h头文件。
#include"StuDialog.h"
if(m_bJapanese==1)
Japanese.Format("日语");else Japanese.Format("");
pDC->TextOut(0,20,m_strName);
pDC->TextOut(0,40,m_strMajor);
pDC->TextOut(60,40,English);
{
biaoshi=1;
CStuDialog::OnOK();
// TODO: Add your control notification handler code here
}
11、在CMotaiView中重载OnDraw函数,在窗口中显示与用户交互的信息:
void CMotaiView::OnDraw(CDC* pDC)
}
// TODO: add draw code for native data here
}
二、非模态对话框。
1、与非模态类似,建立新建MFC APP wizard工程,建立单文档并命名为FeiMotai,前六步与建立模态对话框类似。

VC++考试试题

VC++考试试题

VC++考试试题VC++复习题选择题1. 下列关键字中哪一个不是用于类的访问控制的(B)A.public B. friend C. private D. protected2. 以下四个特性中哪一个不属于面向对象的三大特性(C)A.封装性 B. 多态性 C. 抽象性 D. 继承性3.管理MFC应用程序(A)A. CWinAPPB. CmainFrameC. CDoucumentD. CView4. 关于构造函数,下列说法不正确的是(A)A. 一个类中有且仅有一个构造函数B. 构造函数在说明类变量时被自动执行C. 构造函数没有返回值类型D. 类中的构造函数的函数名与该类的类名必须同名5.关于析构函数,下列说法不正确的是(C)A. 类中有且仅有一个析构函数B. 析构函数可以没有形参C. 析构函数没有返回值类型D.析构函数在对象消失时被自动执行6. 下列类中不属于MFC框架基本类的时(D)A. CWinAppB. CFrameWndC. CViewD. CObject7. 下列选项中哪一个不是命令消息的产生途径(C)A. 选择菜单B. 单击工具栏C. 点击对话框的按钮D. 程序产生命令8. 下列关于构造函数的描述中,错误的是(D)A. 构造函数可以设置默认参数B. 构造函数在定义类对象时自动执行C. 默认构造函数可以没有D. 构造函数不可以重载9. 当在使用类模板时,类模板本身被实例化成了一个具体的(D)A. 对象B. 实例C. 模板类D. 类10. 以下四个关于类的访问控制的描述哪一个是错误的(D)A. 子类不能访问其父类的私有数据成员和成员函数B. 子类的对象不能访问其父类的保护数据成员或者成员函数C. 类的对象不能访问类保护数据成员或者成员函数D. 类的成员函数不能访问类中的私有数据11.下面有关重载函数中说法正确的(C)A. 重载函数必须有不同的返回值类型B. 重载函数形参个数必须不同C. 重载函数必须有不同的形参列表D. 重载函数名可以不同12.一个视图对象能连接()文档对象,一个文档对象能连接(D)视图对象。

VC++6.0入门【第六章 创建和使用对话框】

VC++6.0入门【第六章 创建和使用对话框】

第6章创建和使用对话框对话框是一种用户界面,几乎每一个Windows程序都使用对话框与用户进行交互。

对话框可能是一个简单的只含有OK按钮的消息框,也可以是一个复杂的数据输入表单。

对话框上有一些方便用户输入的控件,对话框依靠这些控件与用户进行交互,其实质是一个接收消息的窗口。

在本章节我们主要讲述模式对话框和无模式对话框的原理和使用方法,下一章将详细介绍各种控件的使用。

你将学习创建一个对话框,使用对话框模板编辑一个对话框资源,并在程序中调用对话框的方法。

6.1 对话框的基本原理6.1.1 对话框的工作原理在创建一个对话框之前,我们先来了解一下对话框是如何工作的,对话框的数据来自三方面:对话框资源、对话框对象、和一个文档对象:1.对话框资源对话框资源是一个用户输入或取得数据的图形界面。

这个图形界面是使用Develop Studio的对话框编辑器在对话框模板上创建的,程序员可以在对话框模板上增加并编辑控件,生成对话框资源。

当应用程序运行时,就可以得到一个对话框。

2.对话框对象MFC使用CDialog类来描述对话框,它是CWnd类的派生类。

在CWnd类的基础上增加了数据交换的功能。

当创建一个新的对话框资源后,使用ClassWizard可以创建一个对话框类的派生类。

对话框对象实现了对话框和应用程序之间的通信。

在应用程序中定义一个对话框对象后,在对话框显示前,可以通过访问对话框对象的成员变量为一个对话框的控件初始化,在对话框关闭后,可以通过访问对话框对象的成员变量获得用户的输入数据。

3.文档对象MFC使用文档对象描述应用程序处理的数据,用户输入的数据要进一步的处理,通常要先存贮到文档对象中。

例如:一个学生记录处理的应用程序,用户通过一个对话框输入学生记录并贮存到一个文件中。

应用程序的处理顺序是:用户在对话框中输入信息,通过对话框对象得到输入信息,将输入信息整理到文档对象中,使用序列化函数将文档对象存贮到一个文件中,所以文档对象扮演了一个很重要的数据交换的角色。

VC弹出对话框

VC弹出对话框

VC++弹出对话框VC6.0弹出对话框首先建立工程,选择“MFC AppWizard(exe)”选项,在工程名中取名为“ShowDialog”在“AppWizard – Setup(1-6)”的选项卡中的第一个选项卡里选择“Single document(单文档视图)”点选按钮,其他剩下的5个步骤可以选择默认省略设置,直接点击“Finish”按钮在资源视图的选项卡中选中“Dialog”,右键点击选择“Insert Dialog”菜单,分别添加两个对话框,将新添加的两个对话框的ID改为“IDD_DIALOG_DOMODAL”和“IDD_DIALOG_MODAL”,并将“Caption”属性分别设置成“模态对话框”和“非模态对话框”添加完对话框,分别对两个对话框添加新类,只有添加了新类,才可以操作对话框,转到对话框编辑视图右键点击要添加类的对话框,选中“Class Wizard(类向导)”,在弹出的对话框中系统会提问“IDD_DIALOG_MODAL是一个新的资源,是否要为其添加一个新类?”,此时选择“OK”接下来对该对话框添加类在“Name”中填入新类的名称,此时填入“CModalDlg”(类名可以由程序员自己命名),注意在“Bass Class”中要选中“CDialog”作为对话框新类的基础类,点中“OK”,用同样的方法为“IDD_DIALOG_DOMODAL”对话框添加类,类名为“CDomodalDlg”添加完对话框资源后点击资源选项卡中的“Menu”,找到其中的“IDR_MANIFRAME”,双击可以显示系统菜单,在右边的视图中加入一个顶级菜单“弹出对话框”,在该顶级菜单下添加两个子菜单,子菜单的ID分别设为“IDM_DOMODAL”和“IDM_MODAL”,并将其“Caption”属性设置为“弹出模态对话框”和“弹出非模态对话框”在对子菜单进行添加完成之后右键点击子菜单选中“Class Wizard(类向导)”,在弹出的对话框中选择其中的设置选项资源ID要对应相应的菜单,“Class Name”要对应“CMainFrame”,因为菜单是在框架中生成,“Message”中要选择“COMMAND”消息,“UPDATE_COMMAND_UI”消息是用来处理菜单对应的用户界面,“COMMAND”消息是用来处理菜单对应的功能,他两者的区别在此不做详细介绍,点击“Add Function”按钮可以看到多了一个菜单的COMMAND消息的处理函数,点击“Edit Code”按钮进入代码编辑区,此时进入的是主框架的CPP文件,用同样的方法为另外一个子菜单添加消息处理函数在主框架的CPP文件中的最后一部分可以看到刚才添加的菜单COMMAND处理消息的函数编辑代码在该CPP文件的最上方引入新建的两个类的头文件#include "DomodalDlg.h"#include "ModalDlg.h"在该类的最后部分为新增的方法写入代码最后保存,并运行,可以看出模态对话框只能弹出一次,而非模态对话框可以弹出多次VC2008弹出对话框首先创建工程,选择“MFC应用程序”选项,将工程命名为“ShowDialog”在“MFC-应用程序向导”设置选项卡中的第一项按照图中的红框设置,其他步骤可以默认选择,最后点击“完成”工程建立完成后,在左侧的资源视图中右键点击“Dialog”,选中“插入Dialog”,分别添加两个对话框,在添加好的对话框点击右键可以通过“属性”来设置“Caption”和“ID”ID分别设置为“IDD_DIALOG_DOMODAL”和“IDD_DIALOG_MODAL”,Caption分别设置分别对两个对话框进行添加类,右键点击对话框,选中右键菜单中的“添加类”在弹出的类对话框中加入类名“CDomodalDlg,”,基类选择“CDialog”,点击“完成”,用同样的方法为另外一个对话框添加新类,类名为“CModalDlg”类添加完成后对菜单进行操作,双击资源菜单中的“Menu”项中的“IDR_MAINFRAME”,在右侧的视图中显示出菜单,并添加一个顶级菜单和两个子菜单右键点击子菜单,在其属性中分别设置ID为“ID_DOMODAL”和“ID_MODAL”,设置完成后右键点击子菜单,选中“添加事件处理程序”在弹出的对话框中选择设置点击“添加编辑”,用同样的方法为另一个子菜单添加菜单的Command处理消息在MainFrame框架的CPP问价的最后部分可以看到代码编辑处在该CPP文件的最上方引入新建对话框的头文件回到CPP文件的最后添加弹出对话框代码最后保存运行,可以看出模态对话框只能弹出一次,而非模态对话框可以弹出多次。

MFC模态对话框和非模态对话框

MFC模态对话框和非模态对话框

MFC模态对话框和非模态对话框
.
分类: MFC2011-08-31 15:5425518人阅读评论(17)收藏举报
mfcdialogdelete编程
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。
若和上面一样的方式创建一个非模态对话框:
[cpp] view plaincopy
01. CTestDialog td;
02.td.Create(IDD_DIALOG1); //创建一个非模态对话框
03.td.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框
最后在所在类的析构函数中收回pTD所指向的内存:
(2)采用成员变量创建一个非模态对话框
首先在你所要编写的类的头文件中声明一个指针变量:
[cpp] view plaincopy
01.private:
02. CTestDialog *pTD;
然后再在相应的CPP文件,在你要创建对话框的位置添加如下代码:
那么,在运行时,你会发现此对话框无法显示。这是因为你声明的对话框变量td是局部变量,但这个函数返回时,td也被析构了,所以无法显示此对话框。
创建非模态对话框,必须声明一个指向CTestDialog类的指针变量,且需要显示的调用ShowWindow()才能将对话框显示出来。有两种创建方法:
[cpp] view plaincopy
01.//创建一个模态对话框
02.CTestDialog td;
03.td.DoModal();
其中CTestDialog为我自己所新建和一个对话框资源相关联的对话框类。

C#非模式窗体show()和模式窗体showdialog()的区别

C#非模式窗体show()和模式窗体showdialog()的区别

C#⾮模式窗体show()和模式窗体showdialog()的区别对话框不是模式就是⽆模式的。

模式对话框,在可以继续操作应⽤程序的其他部分之前,必须被关闭(隐藏或卸载)。

例如,如果⼀个对话框,在可以切换到其它窗体或对话框之前要求先单击“确定”或“取消”,则它就是模式的。

⼀、如何调⽤任何窗体(派⽣于基类Form的类),都可以以两种⽅式进⾏显⽰。

//⾮模式窗体From qform=new Form();qform.Show();//模式窗体Form qform=new Form();qform.ShowDialog();⼀、控制权上的区别Form.Show创建新窗体后(⾮模式),⽴即返回,且没有在当前活动窗体和新窗体间建⽴任何关系,即在保持新窗⼝的情况下关闭(或最⼩化)现有窗体或在保留现有窗体情况下关闭(或最⼩化)新窗⼝,都是可以的。

Form.ShowDialog创建模式窗体,即只有当建⽴的新窗⼝关闭之后,原有窗体才能重新获得控制权。

即如果不关闭新窗⼝,将⽆法对原活动窗⼝进⾏任何操作。

对新窗⼝进⾏的最⼩化、还原将会和原窗⼝⼀起进⾏,但是新窗⼝的关闭对原窗⼝没有影响。

需要注意的是,不管是何种情况,只要主窗体被关闭了,或主程序结束了,那么Application.Run将会关闭所有窗体,不管它是模式还是⾮模式。

⼆、Owner属性带来了什么上⾯所讲的是不建⽴拥有关系时的窗体。

当为窗体间建⽴了拥有关系,情况就会有所变化。

1、⾸先看⾮模式的情况。

为⾮模式新窗⼝建⽴拥有关系的⽅法是修改其Owner属性。

(默认情况下,⾮模式窗⼝不存在拥有者)form.Owner=this; //假设当前窗⼝是新窗⼝的拥有者form.Show();很显然,新建的⾮模式窗体已经被认为是原活动窗体的⼦窗体,原窗⼝的⾏为将会影响新窗⼝,所以我们姑且把它们称作⽗窗⼝和⼦窗⼝之间的关系。

那么,改动后会有什么显著的变化呢?主要有两点:第⼀,⽗窗⼝最⼩化、还原或关闭,⼦窗⼝也将随之最⼩化、还原或关闭。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC 模式对话框和非模式对话框的创建,销毁和区别在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的。

而非模式对话框则是利用CreateWindow来创建的。

在MFC或是WTL中,模式对话框一般是使用DoModal,而非模式对话框的创建则是使用Create。

模式对话框创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。

而非模式对话框则无需这样,它不强制要求用户立即反应,而是与其他窗口同时接受用户操作。

Create的Dialog一般是modalless,如果你的程序本身就是只有一个Dialog,就无所谓了,看不出modalless的效果。

modalless本来就是让有机会切换到本程序的其他窗口。

非模态对话框的特点:与模态对话框不同,非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互。

非模态对话框的设计与模态对话框基本类似,也包括设计对话框模板和设计CDialog类的派生类两部分。

但是,在对话框的创建和删除过程中,非模态对话框与模态对话框相比有下列不同之处:非模态对话框的模板必须具有Visible风格,否则对话框将不可见,而模态对话框则无需设置该项风格。

更保险的办法是调用CWnd::ShowWindow(SW_SHOW)来显示对话框,而不管对话框是否具有Visible风格。

非模态对话框对象是用new操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在堆栈上。

通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象。

通过调用CDialog::Create函数来启动对话框,而不是CDialog::DoModal,这是模态对话框的关键所在。

由于Create函数不会启动新的消息循环,对话框与应用程序共用同一个消息循环,这样对话框就不会垄断用户的输入。

Create在显示了对话框后就立即返回,而DoModal是在对话框被关闭后才返回的。

众所周知,在MFC程序中,窗口对象的生存期应长于对应的窗口,也就是说,不能在未关闭屏幕上窗口的情况下先把对应的窗口对象删除掉。

由于在Create返回后,不能确定对话框是否已关闭,这样也就无法确定对话框对象的生存期,因此只好在堆中构建对话框对象,而不能以局部变量的形式来构建之。

必须调用CWnd::DestroyWindow而不是CDialog::EndDialog来关闭非模态对话框。

调用CWnd::DestroyWindow是直接删除窗口的一般方法。

由于缺省的CDialog::OnOK和CDialog::OnCancel函数均调用EndDialog,故程序员必须编写自己的OnOK和OnCancel函数并且在函数中调用DestroyWindow来关闭对话框。

因为是用new操作符构建非模态对话框对象,因此必须在对话框关闭后,用delete操作符删除对话框对象。

在屏幕上一个窗口被删除后,框架会调用CWnd::PostNcDestroy,这是一个虚拟函数,程序可以在该函数中完成删除窗口对象的工作,具体代码如下void CModelessDialog::PostNcDestroy{delete this; //删除对象本身}这样,在删除屏幕上的对话框后,对话框对象将被自动删除。

拥有者对象就不必显式的调用delete来删除对话框对象了。

必须有一个标志表明非模态对话框是否是打开的。

这样做的原因是用户有可能在打开一个模态对话框的情况下,又一次选择打开命令。

程序根据标志来决定是打开一个新的对话框,还是仅仅把原来打开的对话框激活。

通常可以用拥有者窗口中的指向对话框对象的指针作为这种标志,当对话框关闭时,给该指针赋NULL 值,以表明对话框对象已不存在了。

提示:在C++编程中,判断一个位于堆中的对象是否存在的常用方法是判断指向该对象的指针是否为空。

这种机制要求程序员将指向该对象的指针初始化为NULL值,在创建对象时将返回的地址赋给该指针,而在删除对象时将该指针置成NULL值。

根据上面的分析,我们很容易把Register程序中的登录数据对话框改成非模态对话框。

这样做的好处在于如果用户在输入数据时发现编辑视图中有错误的数据,那么不必关闭对话框,就可以在编辑视图中进行修改。

窗口对象的自动清除:一个MFC窗口对象包括两方面的内容:一是窗口对象封装的窗口,即存放在m_hWnd成员中的HWND(窗口句柄),二是窗口对象本身是一个C++对象。

要删除一个MFC窗口对象,应该先删除窗口对象封装的窗口,然后删除窗口对象本身。

删除窗口最直接方法是调用CWnd::DestroyWindow或::DestroyWindow,前者封装了后者的功能。

前者不仅会调用后者,而且会使成员m_hWnd保存的HWND无效(NULL)。

如果DestroyWindow删除的是一个父窗口或拥有者窗口,则该函数会先自动删除所有的子窗口或被拥有者,然后再删除父窗口或拥有者。

在一般情况下,在程序中不必直接调用DestroyWindow来删除窗口,因为MFC会自动调用DestroyWindow来删除窗口。

例如,当用户退出应用程序时,会产生WM_CLOSE消息,该消息会导致MFC自动调用CWnd::DestroyWindow来删除主框架窗口,当用户在对话框内按了OK或Cancel按钮时,MFC会自动调用CWnd::DestroyWindow 来删除对话框及其控件。

窗口对象本身的删除则根据对象创建方式的不同,分为两种情况。

在MFC编程中,会使用大量的窗口对象,有些窗口对象以变量的形式嵌入在别的对象内或以局部变量的形式创建在堆栈上,有些则用new操作符创建在堆中。

对于一个以变量形式创建的窗口对象,程序员不必关心它的删除问题,因为该对象的生命期总是有限的,若该对象是某个对象的成员变量,它会随着父对象的消失而消失,若该对象是一个局部变量,那么它会在函数返回时被清除。

对于一个在堆中动态创建的窗口对象,其生命期却是任意长的。

初学者在学习C++编程时,对new操作符的使用往往不太踏实,因为用new在堆中创建对象,就不能忘记用delete删除对象。

读者在学习MFC的例程时,可能会产生这样的疑问,为什么有些程序用new创建了一个窗口对象,却未显式的用delete来删除它呢?问题的答案就是有些MFC窗口对象具有自动清除的功能。

如前面讲述非模态对话框时所提到的,当调用CWnd::DestroyWindow或::DestroyWindow删除一个窗口时,被删除窗口的PostNcDestroy成员函数会被调用。

缺省的PostNcDestroy什么也不干,但有些MFC窗口类会覆盖该函数并在新版本的PostNcDestroy中调用delete this来删除对象,从而具有了自动清除的功能。

此类窗口对象通常是用new操作符创建在堆中的,但程序员不必操心用delete操作符去删除它们,因为一旦调用DestroyWindow删除窗口,对应的窗口对象也会紧接着被删除。

不具有自动清除功能的窗口类如下所示。

这些窗口对象通常是以变量的形式创建的,无需自动清除功能。

所有标准的Windows控件类。

从CWnd类直接派生出来的子窗口对象(如用户定制的控件)。

切分窗口类CSplitterWnd。

缺省的控制条类(包括工具条、状态条和对话条)。

模态对话框类。

具有自动清除功能的窗口类如下所示,这些窗口对象通常是在堆中创建的。

主框架窗口类(直接或间接从CFrameWnd类派生)。

视图类(直接或间接从CView类派生)。

读者在设计自己的派生窗口类时,可根据窗口对象的创建方法来决定是否将窗口类设计成可以自动清除的。

例如,对于一个非模态对话框来说,其对象是创建在堆中的,因此应该具有自动清除功能。

综上所述,对于MFC窗口类及其派生类来说,在程序中一般不必显式删除窗口对象。

也就是说,既不必调用DestroyWindow来删除窗口对象封装的窗口,也不必显式地用delete操作符来删除窗口对象本身。

只要保证非自动清除的窗口对象是以变量的形式创建的,自动清除的窗口对象是在堆中创建的,MFC的运行机制就可以保证窗口对象的彻底删除。

如果需要手工删除窗口对象,则应该先调用相应的函数(CWnd::DestroyWindow)删除窗口,然后再删除窗口对象.对于以变量形式创建的窗口对象,窗口对象的删除是框架自动完成的.对于在堆中动态创建了的非自动清除的窗口对象,必须在窗口被删除后,显式地调用delete来删除对象(一般在拥有者或父窗口的析构函数中进行).对于具有自动清除功能的窗口对象,只需调用CWnd::DestroyWindow即可删除窗口和窗口对象。

注意,对于在堆中创建的窗口对象,不要在窗口还未关闭的情况下就用delete操作符来删除窗口对象.提示:在非模态对话框的OnCancel函数中可以不调用CWnd::DestroyWindow,取而代之的是调用CWnd::ShowWindow(SW_HIDE)来隐藏对话框.在下次打开对话框时就不必调用Create了,只需调用CWnd::ShowWindow(SW_SHOW)来显示对话框.这样做的好处在于对话框中的数据可以保存下来,供以后使用.由于拥有者窗口在被关闭时会调用DestroyWindow删除每一个所属窗口,故只要非模态对话框是自动清除的,程序员就不必担心对话框对象的删除问题.以下是一点资料供参考,非模态对话框的销毁顺序:MFC应用程序中处理消息的顺序1.AfxWndProc() 该函数负责接收消息,找到消息所属的CWnd对象,然后调用AfxCallWndProc2.AfxCallWndProc() 该函数负责保存消息(保存的内容主要是消息标识符和消息参数)供应用程序以后使用,然后调用WindowProc()函数3.WindowProc() 该函数负责发送消息到OnWndMsg()函数,如果未被处理,则调用DefWindowProc()函数4.OnWndMsg() 该函数的功能首先按字节对消息进行排序,对于WM_COMMAND消息,调用OnCommand()消息响应函数,对于WM_NOTIFY消息调用OnNotify()消息响应函数。

任何被遗漏的消息将是一个窗口消息。

OnWndMsg()函数搜索类的消息映像,以找到一个能处理任何窗口消息的处理函数。

如果OnWndMsg()函数不能找到这样的处理函数的话,则把消息返回到WindowProc()函数,由它将消息发送给DefWindowProc()函数5.OnCommand() 该函数查看这是不是一个控件通知(lParam参数不为NULL,如果lParam参数为空的话,说明该消息不是控件通知),如果它是,OnCommand()函数会试图将消息映射到制造通知的控件;如果他不是一个控件通知(或者如果控件拒绝映射的消息)OnCommand()就会调用OnCmdMsg()函数6.OnCmdMsg() 根据接收消息的类,OnCmdMsg()函数将在一个称为命令传递(Command Routing)的过程中潜在的传递命令消息和控件通知。

相关文档
最新文档