C++ 对话框
对话框及常用控件
2
对话框程序的创建
2.1 一个对话框程序 2.2 创建对话框资源模板 2.3 利用对话框类CDialog操纵对话框 2.4 初始化对话框 2.5 对话框的调用 2.6 对话框的消息处理
2.1
一个对话框程序
1.程序功能 该应用程序具有认证的功能:当该程序运行时,首先弹 出一个“密码验证” 对话框,让用户输入其用户名和密 码。用户需要输入用户名“good”和用户密码“ good ” 后才能进入主界面,若有一个输入错误,都不能进入。 2.程序类型
1.3 对话框的组成(续)
对话框类 从CDialog类派生的对话框类提供编程接口来 管理与对话框模板相关联的对话框。 CDialog 类的 许多成员函数与对话框编程密切相关,可供程序员 调用。由于对话框是一种窗口,因此相应的对话框 类必须与一个Windows窗口相联系,而对话框资源 模板就是用于创建这个 Windows窗口及其包含在其 中的控件。 对话框类可以看作对话框应用程序的一种程序 员接口,用户对应用程序操作,后台调用的都是该 类的成员函数来完成的。
可见在对话框的构造函数中主要是对对话框的数据成员变量 进行初始化。
2.4
初始化对话框(续)
2.在WM_CREATE的消息映射函数中初始化 由于对话框也是窗口,它在窗口创建时会收到 WM_CREATE 消息,该消息的响应函数是 OnCreate()。 这样,就能在窗口创建中做一些初始化工作。尽管用户 可能在 WM_CREATE 消息处理函数中进行一些数据成员 的初始化工作,但更通常的做法是在对话框中的所有控 件都建立起来之后,响应消息 WM_INITDIALOG 时,对 数据成员进行初始化。 3.在WM_INITDIALOG的消息映射函数中初始化 在对话框创建时,会收到 WM_INITDIALOG 消息,该 消息的响应函数是OnInitDialog()。在得到了
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 :将被销毁的窗口的句柄。
返回值:如果函数成功,返回值为非零:如果函数失败,返回值为零。
12.对话框和对话框类CDialog
12.对话框和对话框类CDialog对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的。
1.模式和无模式对话框对话框分后两种类型,模式对话框和并无模式对话框。
1.模式对话框一个模式对话框就是一个存有系统菜单、标题栏、边线等的弹出式窗口。
在建立对话框时选定ws_popup,ws_sysmenu,ws_caption和ds_modalframe风格。
即使没选定ws_visible风格,模式对话框也可以被表明。
创建对话框窗口时,将发送wm_initdialog消息(如果指定对话框的ds_setfont风格,还有wm_setfont消息)给对话框过程。
对话框过程(dialogboxprocedure)不是对话框窗口的窗口过程(windowprocedure)。
在win32里,对话框的窗口过程由windows系统提供更多,用户在建立对话框窗口时提供更多一个对话框过程由窗口过程调用。
对话框窗口被创建之后,windows使得它成为一个激活的窗口,它保持激活直到对话框过程调用::enddialog函数结束对话框的运行或者windows激活另一个应用程序为止,在激活时,用户或者应用程序不可以激活它的所属窗口(ownerwindow)。
从某个窗口建立一个模式对话框时,windows自动地严禁采用(disable)这个窗口和它的所有子窗口,直至该模式对话框被停用和封存。
虽然对话框过程可以enable所属窗口,但是这样搞就丧失了模式对话框的促进作用,所以不引导这样搞。
windows创建模式对话框时,给当前捕获鼠标输入的窗口(如果有的话)发送消息wm_canclemode。
收到该消息后,应用程序应该终止鼠标捕获(releasethemousecapture)以便于用户能把鼠标移到模式对话框;否则由于owner窗口被禁止,程序将失去鼠标输入。
为了处置模式对话框的消息,windows已经开始对话框自身的消息循环,暂时掌控整个应用程序的消息队列。
MFC对话框与对话框之间的参数传递实例
MFC对话框与对话框之间的参数传递实例在MFC中,对话框(dialog)是一种用户界面的组件,用于与用户进行交互。
对话框通常包含各种控件,如按钮、文本框、列表框等,用户可以通过这些控件输入信息或执行操作。
有时候我们需要在不同的对话框之间传递参数,以实现数据共享或在对话框之间传递信息。
下面通过一个实例来说明如何在MFC中实现对话框之间的参数传递。
以一个学生信息管理系统为例,假设我们有两个对话框,一个用于输入学生基本信息(对话框A),一个用于显示学生信息(对话框B)。
我们希望在对话框A中输入学生信息后,能够在对话框B中显示该学生的信息。
在对话框A的头文件中,定义一个结构体用于保存学生信息:```struct StudentInfoCString name;int age;CString gender;};```然后在对话框A的代码中,添加一个成员变量用于保存学生信息:```StudentInfo m_studentInfo;``````m_ = "";m_studentInfo.age = 0;m_studentInfo.gender = "";GetDlgItem(IDC_EDIT_NAME)->SetWindowText(m_);GetDlgItem(IDC_EDIT_AGE)->SetWindowText(m_studentInfo.age);GetDlgItem(IDC_EDIT_GENDER)->SetWindowText(m_studentInfo.gender);```在对话框A的代码中,添加一个按钮的响应函数OnOK(,在此函数中将学生信息传递给对话框B:```void CDialogA::OnOKGetDlgItem(IDC_EDIT_NAME)->GetWindowText(m_);GetDlgItem(IDC_EDIT_AGE)->GetWindowText(m_studentInfo.age);GetDlgItem(IDC_EDIT_GENDER)->GetWindowText(m_studentInfo.gender);CDialogB dlgB;dlgB.SetStudentInfo(m_studentInfo); // 将学生信息传递给对话框BdlgB.DoModal(; // 打开对话框BCDialog::OnOK(;```在对话框B的头文件中,添加一个成员变量用于保存学生信息:```StudentInfo m_studentInfo;```在对话框B的头文件中,添加一个函数用于接收学生信息```void CDialogA::SetStudentInfo(const StudentInfo& studentInfo) m_studentInfo = studentInfo;GetDlgItem(IDC_STATIC_NAME)->SetWindowText(m_);GetDlgItem(IDC_STATIC_AGE)->SetWindowText(m_studentInfo.age);GetDlgItem(IDC_STATIC_GENDER)->SetWindowText(m_studentInfo.gender);```通过以上代码,我们实现了在对话框A中输入学生信息后,在对话框B中显示该学生的信息。
C++ VC登录对话框
图3.19 “Adding a Class”对话框
单击“OK”按钮,将弹出如图3.20所示的New Class对话框。其中,Name框 是用来输入用户定义的类名,注意要以“C”字母打头,以保持与Visual C++标 识符命名规则一致。File Name框用来指定类的源代码文件名,单击“Change” 按钮可改变默认的源文件名称及其在磁盘中的位置。Base class和Dialog ID内 容是由系统自动设置的,一般无须修改。从Base class框的内容可以看出,用户 对话框类是从基类CDialog派生而来的。
程序文本、界面编辑区
编译信息显示区
图3.3 VC++ 6.0 编程平台
2.建立管理系统工程 选择“文件”→“新建”菜单,在弹出的“新建”对话框中选择“工程” (Project)标签,这时显示出一系列的应用程序项目类型;选择MFC AppWizard (exe)的项目类型(该类型用于创建可执行的Windows应用程序即MFC应用程序, 不同于控制台方式的“Win32 Console Application”),并在“工程”(Project) 中输入项目名XSCJTEST(为与后文叙述一致,请读者在编程时尽量使用本书定义的 名称),在“位置”(Location)处选择或输入工程保存的位置,如图3.4所示。
3.基于资源的程序设计 .
Windows应用程序常常包含众多图形元素,例如光标、菜单、工具 栏、位图、对话框等。每一个这样的资源都用相应的标识符来区分,而 且Windows内部也有预定义的资源,例如在Ex_HelloWin中,LoadIcon 和LoadCursor函数将系统内部的IDI_APPLICATION(应用程序图标) 和IDC_ARROW(箭头光标)作为创建窗口的窗口图标和鼠标指针。
mfc对话框基础要点
第五章对话框对话框是一种用户界面,它的主要功能是输出信息和接收用户的输入。
对话框与控件是密不可分的,在每个对话框内一般都有一些控件,对话框依靠这些控件与用户进行交互。
一个典型的对话框例子是选择了File-Open命令后弹出的文件对话框。
5.1对话框和控件的基本概念5.1.1对话框的基本概念对话框(Dialog)实际上是一个窗口。
在MFC中,对话框的功能被封装在了CDialog类中,CDialog类是CWnd类的派生类。
对话框分为模态对话框和非模态对话框两种。
大部分读者都会有这样的经历,当你通过File-Open命令打开一个文件对话框后,再用鼠标去选择菜单将只会发出嘟嘟声,这是因为文件对话框是一个模态对话框。
模态对话框垄断了用户的输入,当一个模态对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息。
我们平时所遇到的大部分对话框都是模态对话框。
非模态对话框的典型例子是Windows95提供的写字板程序中的搜索对话框,搜索对话框不垄断用户的输入,打开搜索对话框后,仍可与其它用户界面对象进行交互,用户可以一边搜索,一边修改文章,这样就大大方便了使用。
本节主要介绍模态对话框,在第四节将介绍非模态对话框。
从MFC编程的角度来看,一个对话框由两部分组成:1.对话框模板资源。
对话框模板用于指定对话框的控件及其分布,Windows根据对话框模板来创建并显示对话框。
2.对话框类。
对话框类用来实现对话框的功能,由于对话框行使的功能各不相同,因此一般需要从CDialog类派生一个新类,以完成特定的功能。
5.1.2控件的基本概念图5.1对话框中的控件控件(Control)是独立的小部件,在对话框与用户的交互过程中,控件担任着主要角色。
控件的种类较多,图5.1显示了对话框中的一些基本的控件。
MFC的控件类封装了控件的功能,表5.1介绍了一些常用的控件及其对应的控件类。
表5.1控件实际上都是窗口,所有的控件类都是CWnd类的派生类。
C#中选择文件夹的对话框控件(转)
C#中选择⽂件夹的对话框控件(转)C#⾥⾯有选择⽂件的对话框控件,却没有选择⽂件夹的对话框控件,不少⼈为了选择⼀个⽂件夹只好⾃⼰⽤TreeView类来处理,其实在C#⾥⾯完全不⽤那么⿇烦,我们可以⽤C#的FolderNameEditor类的⼦类FolderBrowser类来实现获取浏览⽂件夹对话框的功能。
下⾯来看看具体是怎么实现的。
⾸先新建⼀个winform的项⽬,再新建⼀个类⽂件(File->AddNewItem->Class)。
因为FolderNameEditor是在System.Windows.Forms.Design命名空间下的,此命名空间位于动态链接库system.design.dll,所以我们要先在解决⽅案中添加新的引⽤(reference)System.Design。
然后在代码中添加: using System.Windows.Forms.Design; 接着,我们新建⼀个FolderDialog类,此类从FolderNameEditor类继承,在此类中新建⼀个FolderBrowser类的实例。
DisplayDialog(string description)函数⽤于设置实例fDialog的属性,并且显⽰浏览⽂件夹对话框。
为了取得⽂件夹的路径,设置⼀个Path属性,返回选取⽂件夹的路径。
代码如下: public class FolderDialog : FolderNameEditor{FolderNameEditor.FolderBrowser fDialog =newSystem.Windows.Forms.Design.FolderNameEditor.FolderBrowser();public FolderDialog(){}public DialogResult DisplayDialog(){return DisplayDialog("请选择⼀个⽂件夹");} public DialogResult DisplayDialog(string description){fDialog.Description = description;return fDialog.ShowDialog();}public string Path{get{return fDialog.DirectoryPath;}}~FolderDialog(){fDialog.Dispose();}}//在winform窗体⾥写以下代码,可以看看运⾏效果。
MFC 对话框系统托盘详细步骤
MFC中将窗口最小化至系统托盘1.在对话框类中声明NOTIFYICONDATA变量class CCamProjDlg : public CDialog{...NOTIFYICONDATA nid;BOOL isNotify;...}//初始化isNotify = false;2.在resource.h文件中自定义消息#define WM_SHOWTASK 10013.在对话框类中声明消息相应函数class CCamProjDlg : public CDialog{...afx_msg LRESULT onShowTask(WPARAM wParam,LPARAM lParam);...}4、在消息映射中添加BEGIN_MESSAGE_MAP(CCamProjDlg, CDialog)...ON_MESSAGE(WM_SHOWTASK,onShowTask)...END_MESSAGE_MAP()5.定义消息响应函数LRESULT CCamProjDlg::onShowTask( WPARAM wParam, LPARAM lParam ){ // wParam接收的是图标的ID,而lParam接收的是鼠标的行为if( wParam != IDR_MAINFRAME )return 1;switch(lParam){case WM_RBUTTONUP: // 右键起来时弹出快捷菜单,这里只有一个"关闭"{LPPOINT lpoint = new tagPOINT;::GetCursorPos(lpoint); // 得到鼠标位置CMenu menu;menu.CreatePopupMenu(); // 声明一个弹出式菜单menu.AppendMenu(MF_STRING,WM_DESTROY,_T("关闭")); // 增加菜单项"关闭",点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。
在CFileDialog对话框中添加控件
在C对话框中添加控件关键字:C扩展类,OFNHookProc需求描述:昨天遇到一个用户需求,在C对话框(SAVE)中加入一个Check , 一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据.实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。
我最终用的就是方法二.方法一: 首先查找MSDN关于C扩展的实现描述,上网查到实现预览图片式的C的例子。
按照其思路从C派生了一个新的类C.在类中添加以下代码#define WM_CHECKZOOMIN WM_USER+1856public:BOOL bZoomIn;UINT nMul; //[1~100]//前置声明---------------BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn);UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);// CIMPLEMENT_DYNAMIC(C, C)C(BOOL bOpen, LPCTSTR lpszDefExt, LPCTSTR lpsz,DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :C(bOpen, lpszDefExt, lpsz, dwFlags, lpszFilter, pParentWnd){//这个四个常用标识位m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY|OFN_EXPLORER; //OFN_EXPLORER | OFN_ENABLEHOOKm_ofn.lpstrTitle = _T("高级保存对话框");m_ofn.hInstance = AfxGetInstanceHandle();m_ofn.lpstrFilter = _T("*.bmp\0*.BMP\0所有文件\0 *.*\0 ");m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_);m_ofn.lpfnHook = (LPOFNHOOKPROC)OFNHookProc;}//Hook function for the Comm Dlg//在这里处理我们感兴趣的消息,想要哪个,截哪个!UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){switch (uMsg){case WM_INITDIALOG: //初始化对话框上的控件if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK,0,0) == BST_UNCHECKED){::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);::SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ZOOMNUM),_T("1"));//ShowWindow(button,SW_HIDE);}break;case WM_DESTROY: //消毁对话框{LPOPEN lpOFN = (LPOPEN)GetWindowLong(hDlg, DWL_USER);}break;case WM_COMMAND: //这里处理,IDC_CHECK_ZOOMIN命令{if ((HIWORD(wParam) == BN_CLICKED) && (LOWORD(wParam) ==IDC_CHECK_ZOOMIN)){BOOL bZoomIn = TRUE;if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){bZoomIn = TRUE;::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),TRUE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),TRUE);}else{bZoomIn = FALSE;//::SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ZOOMNUM),"");::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);}HWND hParent = GetParent(hDlg); // 注意hDlg是新加的模板对话框句柄,它是C对话框的子部分,要获取C对话框的句柄需要用GetParent函数PostMessage(hParent,WM_CHECKZOOMIN,(WPARAM)bZoomIn,(LPARAM) 0);bZoomIn = FALSE;}break;case WM_NOTIFY:HandleNotify(hDlg, (LPOFNOTIFY)lParam);break;}return 0;}//这里处理notify 消息BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn){C dlg(TRUE);switch (pofn->hdr.code){case CDN_SELCHANGE:{//char sz];//// Get the path of the selected file.//if (CommDlg_OpenSave_Get(GetParent(hDlg), szFile, sizeof(szFile)) <= sizeof(szFile))//{// if(Get(szFile) != )// {// //Should we load the Pic// if(SendDlgItemMessage(hDlg, IDC_CHECK1, BM_GETCHECK,0,0) == BST_UNCHECKED)// dlg.ShowImagepreview(hDlg, szFile);// }//}}break;case CDN_FILEOK:{int num;GetDlgItemInt(hDlg,IDC_EDIT_ZOOMNUM,&num,FALSE);if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){dlg.bZoomIn = TRUE;}elsedlg.bZoomIn = FALSE;return FALSE;}break;}return(TRUE);}原计划从回调函数得到触发消息,然后用PostMessage的方式将自定义的WM_CHECKZOOMIN消息发给主窗口,在主窗口中更新我新加的变量bZoomIn和nMul的值。
C# winform对话框用法大全
C# winform对话框用法大全对话框中我们常用了以下几种:1、文件对话框(FileDialog) 它又常用到两个:打开文件对话框(OpenFileDialog)保存文件对话(SaveFileDialog)2、字体对话框(FontDialog)3、颜色对话框(ColorDialog)4、打印预浏对话框(PrintPreviewDialog)5、页面设置(PrintDialog)6、打印对话框(PrintDialog)还有更多,有时间的网友可以看看MSDN。
下面我们一个个来介绍。
在介绍的过程中我用到了一个自己开发的类:File,主要是文件操作的。
文件对话框(FileDialog)一、打开文件对话框(OpenFileDialog)1、OpenFileDialog控件有以下基本属性InitialDirectory 对话框的初始目录Filter 要在对话框中显示的文件筛选器,例如,"文本文件(*.txt)|*.txt|所有文件(*.*)||*.*" FilterIndex 在对话框中选择的文件筛选器的索引,如果选第一项就设为1 RestoreDirectory 控制对话框在关闭之前是否恢复当前目录FileName 第一个在对话框中显示的文件或最后一个选取的文件Title 将显示在对话框标题栏中的字符AddExtension 是否自动添加默认扩展名CheckPathExists 在对话框返回之前,检查指定路径是否存在DefaultExt 默认扩展名DereferenceLinks 在从对话框返回前是否取消引用快捷方式ShowHelp 启用"帮助"按钮ValiDateNames 控制对话框检查文件名中是否不含有无效的字符或序列2、OpenFileDialog控件有以下常用事件FileOk 当用户点击"打开"或"保存"按钮时要处理的事件HelpRequest 当用户点击"帮助"按钮时要处理的事件3、OpenFileDialog的效果如下:可以用以下代码来实现上面这个对话框:private void openFileDialogBTN_Click(o b j e c t sender, System.EventArgs e){ OpenFileDialog openFileDialog=new OpenFileDialog();openFileDialog.InitialDirectory="c:\\";//注意这里写路径时要用c:\\而不是c:\ openFileDialog.Filter="文本文件|*.*|C#文件|*.cs|所有文件|*.*";openFileDialog.RestoreDirectory=true;openFileDialog.FilterIndex=1;if (openFileDialog.ShowDialog()==DialogResult.OK){fName=openFileDialog.FileName;File fileOpen=new File(fName);isFileHaveName=true;richTextBox1.Text=fileOpen.ReadFile();richTextBox1.AppendText("");}}其中有用到了File()这个类,是我在程序用来执行文件操作,自己写的,在最后附了这个类的源码。
实验1 创建对话框应用程序及控件使用
实验1 创建对话框应用程序及控件使用一.实验目的1.掌握使用“MFC应用程序向导”创建对话框应用程序框架的方法2.掌握给对话框添加控件的方法,以及使用“MFC类向导”为控件通知消息映射消息处理函数的方法3.掌握使用“MFC类向导”为控件添加控件变量的方法4.掌握控件变量与控件的数据交换机制以及使用控件变量访问和控制控件的方法5.掌握对话框中添加自定义消息的方法二.实验内容1.创建一个Windows对话框应用程序,其界面要求实现以下功能:在下部的文本编辑框(Edit Control )中输入内容后,单击“添加”按钮,文本编辑框的内容被作为一个条目添加到上部的列表框(List Box)中2.为上一步创建的程序添加一条自定义消息,消息名为WM_MYMESSAGE,也可自己命名。
单击“添加”按钮时,将发送盖消息,该消息的处理函数将删除编辑框中已输入的所有内容。
三.实验步骤1.使用“MFC应用程序向导”创建一个对话框应用程序,项目名称编程者自己确定。
2.将主动生成的对话框中的静态文本控件和“取消”命令按钮删除,在窗口上部添加一个列表框(List Box)控件,在列表框中的静态文本控件和“取消命令按钮删除,在窗口上部添加一按钮左侧添加一个命令按钮(Button)控件.3.将“确定”按钮的caption属性修改为“退出”,新添加的命令按钮的caption属性修改为“添加”,修改对话框窗口的caption属性为“实验1”,调整各控件的大小和布局如上图所示。
4.为列表框控件添加一个控制变量,类别为control,变量名编程者自己确定,这里取名为m_list,为编辑框控件添加一个控制变量,类别为value,类型Cstring,变量名为m_Edit,也可由编程者自己确定。
5.为“添加”按钮添加并编写BN_CLICKED消息的消息处理函数,该函数代码如下:Void CShiyanDlg : : OnBnclickedButton1( ){//TODO:在此添加控件通知处理程序代码UpdateData(true); //将控件中的数据交换至控件变量If(!m_Edit . ISEmpty()) //如果编辑框内容不空,则将内容添加至列表框M_List . Addstring(m_Edit);}6.编译运行程序,在文本编辑框中输入内容并单击“按钮”,观察执行结果。
VC-MFC对话框控件随窗口自动调整大小
作者:**************一般情况下,我们新建的对话框,里面的“确定”和:取消”按钮,在对话框最大化得时候,不会一起变大的,而是保持原来的大小。
而MFC默认不支持控件大小按比例缩放功能最简单的情况:当我们点击最大化按钮的时候,对话框会最大化,但是控件“确定”和“取消”不会跟着变大。
如果我们在对话框上面有多少控件,那么会很丑,而且很不实用,最大化本来就是想看的更清楚嘛。
我们可以采取下面的措施:对话框也是窗口,最大化是对窗口大小的改变,而在windows message handle中有个WM_SIZE的消息,该消息在窗口大小发生变化的时候会产生。
那么我们可以根据这个消息,在窗口大小发生变化的时候,利用MoveWindow()函数来重新设置各个控件的大小。
在网上查了一些资料,都不方便使用,还需要自己写好多代码。
在这里我封装了一个简单的类,可以实现这个功能:用法是,1、在对话框类头文件中添加此类的对象CItemResize m_itemSize;2、在窗口初始化函数OnInitDialog中填写需要改变大小的对应控件的ID号:m_itemSize.AddItemRect(IDOK, this);m_itemSize.AddItemRect(IDC_LIST1, this);此处的ID替换成对话框上实际的ID。
3、在OnSize函数中调用:m_itemSize.ResizeItem();功能实现完毕类代码代码如下:头文件:ItemResize.h#ifndef ITEMRESIZE_H#define ITMERESIZE_H/************************************************************************/ /* 作者:***************/ /************************************************************************/#include<stdio.h>#include<vector>using namespace std;typedef struct_RESIZEINFO{UINT nID;CWnd* pParent;float fLeft;float fRight;float fTop;float fBottom;}RESIZEINFO;class CItemResize{CRect m_rectDlg;//在窗口创建时,添加需要自动按比例调整大小的控件ID。
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改变对话框按钮字体颜色和背景的解决方案要想修改CButton类按钮背景颜色和文字颜色,必须利用自绘方法对按钮进行重新绘制。
这可以通过定义一个以CButton为基类的新按钮类来实现。
以下为具体的实现方法:方法一:加入一个新类,类名:CButtonEx,基类:CButton。
在头文件 CButtonEx.h 中加入以下变量和函数定义:private:int m_Style; //按钮形状(0-正常,1-当前,2-按下,3-锁定)BOOL b_InRect; //鼠标进入标志CString m_strText; //按钮文字COLORREF m_ForeColor; //文本颜色COLORREF m_BackColor; //背景色COLORREF m_LockForeColor; //锁定按钮的文字颜色CRect m_ButRect; //按钮尺寸CFont* p_Font; //字体void DrawButton(CDC *pDC); //画正常的按钮// 接口函数public:void SetText(CString str);void SetForeColor(COLORREF color); //设置文本颜色void SetBkColor(COLORREF color); //设置背景颜色void SetTextFont(int FontHight,LPCTSTR FontName); //设置字体在 CButtonEx.cpp 的构造函数中初始化变量:CButtonEx::CButtonEx(){m_Style = 0; //按钮形状风格b_InRect = false; //鼠标进入标志m_strText = _T(""); //按钮文字(使用默认文字) m_ForeColor = RGB(0,0,0); //文字颜色(黑色) m_BackColor = RGB(243,243,243); //背景色(灰白色)m_LockForeColor = GetSysColor(COLOR_GRAYTEXT); //锁定按钮的文字颜色p_Font = NULL; //字体指针}用ClassWizard添加下列消息函数:PreSubclassWindow();DrawItem();onMouseMove();OnLButtonDown();OnLButtonUp();在各函数内加入代码:void CButtonEx::PreSubclassWindow(){ModifyStyle( 0, BS_OWNERDRAW ); //设置按钮属性为自画式CButton::PreSubclassWindow();}PreSubclassWindow()在按钮创建前自动执行,所以我们可以在其中做一些初始工作。
C_教程_第6章_窗体、控件和组件
窗体的创建、显示与隐藏( 6.1.2 窗体的创建、显示与隐藏(续)
3、如何隐藏一个打开的窗体 使用Form2 );创建的窗体 (1)fm.Hide( ); // 使用Form2 fm = new Form2( );创建的窗体 隐藏当前窗体: (2)隐藏当前窗体:this.Hide( ); 隐藏其它窗体: (3)隐藏其它窗体:Application.OpenForms["Form1"].Hide( ); 只能隐藏“无模式”窗体。 注:只能隐藏“无模式”窗体。 4、如何重新显示隐藏的窗体 使用Form2 );创建的窗体 (1)fm.Show( ); // 使用Form2 fm = new Form2( );创建的窗体 显示当前窗体: (2)显示当前窗体:this.Show( ); 显示其它窗体: (3)显示其它窗体:Application.OpenForms["Form1"].Show( ); 5、退出应用程序 Application.Exit( ); 执行该语句后,停止本应用程序的消息循环, 执行该语句后,停止本应用程序的消息循环,关闭本应用程序所有 打开的窗体。 打开的窗体。
窗体的创建、显示与隐藏( 6.1.2 窗体的创建、显示与隐藏(续)
6、关闭一个窗体后再显示另一个窗体 static void Main( ) { …. . //创建欢迎窗体 //创建欢迎窗体 WelcomeForm fm = new WelcomeForm( ); //以 模式” //以“模式”窗体显示 fm.ShowDialog( ); //运行主窗体 运行主窗体MainForm //运行主窗体MainForm Application.Run(new MainForm( )); }
61窗体与对话框62控件共有的基本操作63容器类控件和组件64文本操作类控件65选择操作类控件66图像操作类控件和组件67菜单工具栏与状态栏68视图操作类控件69其他常用控件1窗体应用程序的启动和停止使用application类提供的静态方法来启动停止应用程序
C技巧:VC中对话框上显示信息的方法
VC实现对话框上信息的显⽰ 利⽤ VC的AppWizard,可以很容易地实现⼯具条和菜单项的ToolTip,或在状态条上显⽰帮助信息,但要在对话框的控件上显⽰ToolTip和在状态条上显⽰控件信息并不容易实现。
现在,我们⽤VC中的WM_SETCURSOR 与TTN_NEEDTEXT消息就可达到⽬的。
具体操作如下: ⼀、利⽤ VC的 MFC AppWizard ⽣成⼀个 SDI 或 MDI 的应⽤程序 ⼆、编辑对话框控件的字符串资源 例如:IDC_dbBUTTON1 = “This is 肖天鹏的第⼀⾃制按钮天鹏\", 其中字符串“This is肖天鹏的第⼀⾃制按钮“将在⿏标移到控件上时显⽰在状态条上,字符串“天鹏\"将作为 ToolTip 显⽰。
三、建⽴消息映射 在对话框的头⽂件 (*.H) 中 加⼊以下代码: protected: void SetStatusText(UINT nID=0); //{{AFX_MSG(CFileOp1) afx_msg void OnDestroy(); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); //}}AFX_MSG afx_msg BOOL OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ); DECLARE_MESSAGE_MAP() 在对话框的实现⽂件 (*.CPP) 中加⼊以下代码: BEGIN_MESSAGE_MAP(CFileOp1, CDialog) //{{AFX_MSG_MAP(CFileOp1) ON_WM_DESTROY() ON_WM_SETCURSOR() //}}AFX_MSG_MAP ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotvify) END_MESSAGE_MAP() 四、编辑消息处理函数 BOOL CFileOp1::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) {// TODO: Add your message handler code here and/or call default if(pWnd==this) SetStatusText(); else {TOOLTIPTEXT m_psttt; m_psttt.hdr.hwndFrom=m_hWnd; m_psttt.hdr.idFrom=pWnd->GetDlgCtrlID(); m_psttt.hdr.code=TTN_NEEDTEXT; m_psttt.uFlags= TTF_IDISHWND; SetStatusText(pWnd->GetDlgCtrlID()); this->SendMessage(WM_NOTIFY,m_psttt.hdr.idFrom,(LPARAM)&m_psttt); } return CDialog::OnSetCursor(pWnd, nHitTest, message);} void CFileOp1::OnDestroy() {SetStatusText(); CDialog::OnDestroy();} void CFileOp1::SetStatusText(UINT nID) {if(nID==0) nID=AFX_IDS_IDLEMESSAGE; CWnd *pWnd=AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR); if(pWnd) {AfxGetMainWnd()->SendMessage(WM_SETMESS AGESTRING ,nID); pWnd->SendMessage(WM_IDLEUPDATECMDUI); pWnd->UpdateWindow();}} BOOL CFileOp1::OnTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult ) { TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR; UINT nID =pNMHDR->idFrom; if (pTTT->uFlags & TTF_IDISHWND) { nID = ::GetDlgCtrlID((HWND)nID); if (nID) { TCHAR szFullText[256]; CString StrTipText; AfxLoadString(nID,szFullText); AfxExtractSubString(StrTipText,szFullText,1,′′); if(!StrTipText.IsEmpty()) strcpy(pTTT->lpszText,StrTipText); pTTT->hinst = AfxGetResourceHandle(); return(TRUE); } } return(FALSE);} 五、将该对话框作为⼀个 SDI 或 MDI应⽤程序的主框架的⼦窗⼝,⽣成这样⼀个对话框后,当你把⿏标移到某个控件 (必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip和状态条信息。
如何在VC++中两个对话框相互传递信息
如何在VC++中两个对话框相互传递信息? 在主对话框Main_OnCommand 中,利用DialogBoxParam 弹出一个新的对话框,在函数最后一个参数里传一个long 型的参数1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 { HINSTANCE hInstance = (HINSTANCE)GetWindowLong(hwnd,GWL_HINSTANCE); //获得实例 //TCHAR *buf = "abc"; login_data ld; ername = "geekgu"; ld.password = "7634336"; //DialogBoxParam 最后一个参数传值 ret 得到返回值 int ret = DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_LOGIN), NULL, Login_Proc,(LPARAM)&ld); if (ret == 0) { MessageBox(hwnd,TEXT("用户点击了取消"),TEXT(""),MB_OK); }}在新建对话框里初始化代码里得到参数1 2 3 4 5 6 7 8 9 { login_data *buf = (login_data *)lParam; //MessageBox(hwnd,buf->username,"",MB_OK); //SetDlgItemText(hwnd,IDC_EDITUSERNAME,buf->username); //SetDlgItemText(hwnd,IDC_EDITPASSWORD,buf->password); SetWindowLong(hwnd,GWL_USERDATA,(LPARAM)buf); //将数据跟窗口关联起来(存起来),比全局变量更好的方法。
WinCC中C脚本弹出对话框代码详解
WinCC中C脚本弹出对话框代码代码:int cal_wr;cal_wr=MessageBox(NULL, "1#卷取机1#助卷辊标定?", "标定确认",MB_YESNO|MB_SYSTEMMODAL);if (cal_wr==IDYES)SetTagBit("TAGNAME",TRUE);elseSetTagBit("TAGNAME",FALSE);相关知识:HWND hWnd=NULL //定义变量hWnd=FindWindow(NULL,"Wincc‐运行系统 ‐ ") //获取窗口句柄MessageBox(hWnd,"这是个对话框!","哈哈",MB_OKCANCEL|MB_ICONWARNING|MB_APPLMODAL)函数功能:该函数创建、显示、和操作一个消息框。
消息框含有应用程序定义的消息和标题,加上预定义图标与Push(下按)按钮的任何组合。
函数原型:int MessageBox(HWND hWnd,LPCTSTR IpCaption,UINT UType);参数:hWnd:标识将被创建的消息框的拥有窗口。
如果此参数为NULL,则消息框没有拥有窗口。
IpText:指向一个以NULL结尾的、含有将被显示的消息的字符串的指针。
IpCaption:指向一个以NULL结尾的、用于对话框标题的字符串的指针。
uType:指定一个决定对话框的内容和行为的位标志集。
此参数可以为下列标志组中标志的组合。
指定下列标志中的一个来显示消息框中的按钮,标志的含义如下。
MB_ABORTRETRYIGNORE:消息框含有三个按钮:Abort,Retry和Ignore。
MB_OK:消息框含有一个按钮:OK。
这是缺省值。
MB_OKCANCEL:消息框含有两个按钮:OK和Cancel。
模态、非模态 MFC 调用一个新的 对话框
调用一个新的对话框的方法注意:这里是插入窗体。
一、模态对话框1) 首先,新建的一个对话框,假如为test2) 在刚才插入的子窗口添加消息映射函数void C***Dll::PostNcDestroy() ,在次函数里面添加:delete this;3) 在需要调用新建对话框的CPP 文件添加头文件#include "test.h"4) 然后在需要调用新建对话框的按钮的成员函数里写上:AFX_MANAGE_STATE(AfxGetStaticModuleState());test testDlg;testDlg.DoModal();二、非模态对话框1) 首先,插入一个窗体,假如为CFrmDl ;2) 在刚才插入的子窗口添加消息映射函数void C***Dll::PostNcDestroy() ,在次函数里面添加:delete this;3) 在需要调用新建对话框的CPP 文件添加头文件#include "FrmDll.h" ;4) 然后在需要调用新建对话框的按钮的成员函数里写上:AFX_MANAGE_STATE(AfxGetStaticModuleState());CFrmDll *dlg = new CFrmDll; // 在内存中new 出来dlg->Create(IDD_FRMDLLDlg); // 创建对话框,dlg->CenterWindow(); // 窗口居中dlg->ShowWindow(SW_SHOW); // 显示窗口非模态Dll 调用例子:typedef void ( * P_show)();HINSTANCE hinstance =NULL;void CTestDlgDlg::OnButton1(){if (hinstance ==NULL){hinstance = LoadLibrary ("dllPro.dll");}if(hinstance ==NULL){AfxMessageBox("Fail");return;}P_show show = (P_show)::GetProcAddress (hinstance,"showdlg");show();// FreeLibrary(hinstance); // 这个记得放在析构函数里面// hinstance = NULL; // 这个记得放在析构函数里面}。
MFC对话框开启Aero“毛玻璃”半透明效果
必备要求:1. Vista 及以上操作系统。
2. VS2008 SP1 及以上编译环境。
导入下列文件:#include<dwmapi.h>#pragma comment(lib,"dwmapi.lib")对话框的基类要选择CDialogEx,而不是CDialog。
在OnInitDialog() 中添加下列代码:BOOL bDwm;DwmIsCompositionEnabled(&bDwm);if(bDwm){MARGINS mrg= {-1};DwmExtendFrameIntoClientArea(m_hWnd, &mrg);SetBackgroundColor(RGB(0, 0, 0));}效果图:这张图的缺陷,不用说,就是那2个按钮了。
为什么会这样的呢?因为DWM 使用alpha 通道来绘图。
然而,诞生已久的GDI 并不支持alpha 通道。
想用alpha 通道来绘图,必须使用GDI+ 或者WPF 这类先进的东东。
碰巧的是,GDI 里面的黑色RGB(0, 0, 0) 和DWM 的完全透明色00000000 恰好是一样的。
于是,DWM 就把GDI 的黑色当作了透明色。
这就是为什么在前一个例子里面要把背景设为黑色的原因。
这样也带来一个负面效果:GDI 的控件,都是用黑色作为默认颜色的,现在成了透明色,当然会看不清楚了。
让我们改变一下,换个别的颜色作为透明色。
(当然,这个颜色绝对不能在对话框中出现。
)首先要设置窗口具有WS_EX_LAYERED 属性。
可以修改资源或者调用SetWindowLong() 实现。
有了这个属性,窗口就不能正常显示了,除非设置了透明色。
#define TRANSPARENT_COLOR RGB(200, 201, 202)在OnInitDialog() 中修改代码为:SetLayeredWindowAttributes(TRANSPARENT_COLOR, 0,LWA_COLORKEY);BOOL bDwm;DwmIsCompositionEnabled(&bDwm);if(bDwm){MARGINS mrg= {-1};DwmExtendFrameIntoClientArea(m_hWnd, &mrg);SetBackgroundColor(TRANSPARENT_COLOR);}效果图(右):MFC对话框开启Aero“毛玻璃”半透明效果(三)这张图,要说有什么不完美的地方,那就是2个按钮的边框了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.2 创建模式对话框
按照上面的方法,我们在对话框资源中添加控件资源, 并 且 按 照 修 改 对 话 框 标 题 的 方 法 对 每 个 控 件 对 ID 和 Caption进行修改,如表5.1所示
控件名称 Static Text Edit Box Group Box1 Radio Button1 Radio Button2 Group Box2 Combo Box Group Box3 ID值 IDC_STATIC IDC_EDIT_NAME IDC_STATIC IDC_RADIO_M IDC_RADIO_F IDC_STATIC IDC_COMBO_SCHOO LIDC_STATIC Caption 姓名 性别 男 女 最高学话框资源 接下来,我们要做的工作是创建对话框资源,其创建 步骤如下: 步 骤 一 : 在 打 开 的 工 程 中 , 选 择 【Insert】 菜 单 中 的 【Resource】 菜 单 项 , 或 直 接按 Ctrl+R 键 , 系 统将 弹 出 【Insert Resource】对话框 Insert Resource 步骤二:在对话框中选择 【Dialog】选项,然后单击 【New】按钮,或直接双击【Dialog】选项,这时对话框 资源编辑器将显示在Visual C++平台中,在对话框资源编 辑器中显示了一个只有【OK】按钮和【Cancel】按钮的 简单的对话框。
16
5.2 创建模式对话框
按【Esc】键退出设置Tab键顺序状态。并将以上各个控 件的属性中的【Tab Stop】复选框置为选中状态。 步骤六:测试生成对话框资源。选择 【Dialog】 工具栏 中的【Test】按钮,或者直接按Ctrl+T键,输入焦点应该 首先在文本框 IDC_EDIT_NAME上,不断按Tab键,观察 输入焦点的变化是否和设置的顺序一致。也可以进行在文 本框中输入文本信息、选中单选按钮、选择组合框信息、 选中复选框等操作。 5.2.3 创建对话框类 5.2.3.1 创建对话框类并添加成员变量 对话框资源已经编辑完成,下面的工作是通过 Class Wizard 来创建自己的对话框类。 返回
会出现一个数字标签,这个数字标签就代表了Tab 键顺序。 下面,我们按以下顺序,用鼠标左键单击每一个控件: 1. IDC_EDIT_NAME 2. IDC_RADIO_M 3. IDC_RADIO_F 4. IDC_COMBO_SCHOOL 5. IDC_CHECH_ART 6. IDC_CHECK_SPORT 7. IDC_CHECK_MUSIC 8. IDOK 9. IDCANCEL 返回
12
5.2 创建模式对话框
在Visual C++中,对于不同的控件定义了不同的ID 类 型:IDC_是控件的 ID 值(ID of Control) 的前缀;IDD_ 是对话框的ID值( ID of Dialog)的前缀;ID是系统自己 缺省的ID值的前缀。 步骤四:向对话框中添加控件。向对话框中添加控件的 方法有两种: 1. 在控件工具栏中选择所需要的控件,按下鼠标的左键 (不要松开),将鼠标拖到对话框中松开,在对话框中 将添加一个指定的控件。 2. 在控件工具栏中单击所需要的控件,此时控件将呈凹 下状态,将鼠标移至对话框,鼠标此时显示为“十”字 形,按下鼠标左键,在对话框上拖动至适当大小,松开 鼠标左键,开鼠标左键,在对话框中将添加一个指定的 控件。 返回
步骤五:下面我们来设置一下Tab 键顺序。所谓Tab 键顺 序是指当对话框拥有输入焦点时,每次按下Tab 键,对 话框中各个控件依次拥有输入焦点的次序。 选择【Layout】菜单中的【Tab Order】菜单项,或直 接按下 Ctrl+D键,此时对话框中的每一个控件左上角将 返回
15
5.2 创建模式对话框
第五章 对话框及常用控件
本章导读
在Windows应用程序中,对话框(Dialog)是最重要 的用户界面元素之一,是应用程序与用户交互的重要 手段。当用户进行某项操作之后,弹出一个对话框把 反馈信息传递给用户,也可以要求用户输入数据或者 进行选择。 控件在Windows应用程序中也很常见。一般来说, 在对话框中是通过各种控件来和用户进行交互的,我 们经常用到的控件有按钮、列表框、编辑框、组合框、 滚动条等。实际上,控件是一种特殊类型的窗口,通 常为其父窗口所拥有。
14
返回
5.2 创建模式对话框
控件名称 Check Box1 Check Box2 Check Box3 Button1 Button2 ID值 IDC_CHECK_ART IDC_CHECK_SPORT IDC_CHECK_MCSIC IDOK IDCANCEL Caption 艺术 体育 音乐 确定 取消
返回
8
5.2 创建模式对话框
在新建对话框的同时,在其右边随之出现了一个控件 模板,即Controls工具栏,它的作用是向对话框资源中添 加控件。工具栏中的每一个图标(除了左上角的指针) 都代表一种能够添加到对话框中的控件,我们可以用一 种“所见即所得”的方式来向对话框资源添加各种控件。 如果仔细观察一下系统的菜单,你就会发现菜单中多 了一项【Layout】菜单,而且在状态拦的上面增加了一个 新的工具栏——【Dialog】工具栏,其中的按钮在编辑对 话框资源和增加控件时是十分有用的工具。下面我们对 【Dialog】工具栏进行详细的说明。
返回
4
5.1 对话框的组成和分类
1. 在创建时,模式对话框是由系统自动分配内存空间, 因此在退出对话框时,对话框对象会自动删除。而 无模式对话框则是需要用户来指定内存,退出时还 需用户自己来删除对话框对象。 2. 在退出时,两种对话框所使用的终止函数不一样。 模式对话框通过调用CDialog::EndDialog来终止,而 无模式对话框则是通过调用CWnd::DestroyWindow 来终止。
17
5.2 创建模式对话框
步骤一:在对话框编辑器打开并且显示刚才新创建的对 话 框 资 源 的 情 况 下 , 选 择 【View】 菜 单 中 的 【Class Wizard】菜单项。Class Wizard会提示将对话框资源和一 个类相连接,这个类可以是新创建的类,也可以是已经 存在的类。 步骤二:接受缺省设置【Creat an new class】,单击 【OK】按钮,为对话框资源创建一个新类。系统将会弹 出【New Class】对话框。 在【Name】编辑框中输入需要生成的对话框类名 “CMydataDialog”,在指定对话框类名的同时,Class Wizard将按照给出的对话框类名来自动定义生成的对话 框的文件名为“MydataDialog.cpp”。单击【OK】按钮, 将继续执行。 返回
返回
5
5.2 创建模式对话框
5.2.1 创建应用程序框架 在进行创建对话框之前,我们首先按照第四章介绍的 方法创建一个应用程序框架,并且在Visual C++ 6.0中将 “工程”打开。 步骤一:在Visual C++ 6.0中选择【File】菜单的【New】 菜单命令,弹出【new】对话框。在工程列表中选中选项 【MFC AppWizard[exe]】,在【Project name】栏中输入 工程名称为【Dialog】,在【Location】栏中指定工程的存 储路径为E:\C++\EXAMPLE\。单击【OK】按钮启动App Wizard。 步骤二:在接下来的AppWizard的各个步骤中按下列要 求设置选项: 返回
2
5.1 对话框的组成和分类
5.1.2 对话框的分类 对话框有两种类型:模式对话框和无模式对话框。下 面分别对这两种对话框进行说明。 1. 模式对话框 所谓“模式对话框”是指对话框被弹出后,用户必须 在对话框中作出相应的操作;在退出对话框之前,会阻 止其他应用程序的运行(包括它所在的应用程序)。 一 般 情 况 下 , 模 式 对 话 框 会 有 【OK】 ( 确 定 ) 和 【Cancel】(取消)两个按钮。单击【OK】按钮,系统 认定用户在对话框中的选择或输入有效,退出对话框; 单击【Cancel】按钮,系统认定用户在对话框中的选择或 输入无效,退出对话框,程序恢复原有状态。 返回
返回
9
5.2 创建模式对话框
1. Test:单独运行对话框来测试对话框的外观和行为; 2. Align Left :将选定的多个控件按照左对齐的格式放置; 3. lign Right:将选定的多个控件按照右对齐的格式放置 4. Align Top:将选定的多个控件按照上对齐的格式放置 5. Align Botton:将选定的多个控件按照下对齐格式放置 6. Central Vertical:将选定的一个或多个控件按照中心垂 直对齐格式放置 7. Central Horizontal: 将选定的一个或多个控件按照中心 水平对齐格式放置 8. Space Across:将选定的多个控件两两之间的水平间隔 相同
6
5.2 创建模式对话框
Step 1:选择单文档界面(Single Document),其他接受 : 系统缺省设置,单击【Next】按钮,进入下一步。 Step 2:接受系统缺省设置,单击【Next】按钮 : Step 3:关闭【ActiveX Controls】复选框选项,单击Next】 : 按钮,进入下一步。 Step 4: 关闭【Docking toolbar】、【Initial status bar】、 : 【Printing and print preview】,以及【3D Control】复选 框选项,单击【Next】按钮,进入下一步。 Step 5:接受系统缺省设置,单击【Next】按钮。 : Step 6:接受系统缺省设置,单击【Finish】按钮。 : 最后: 最后:弹出工程信息对话框,单击【OK】按钮,完成应 用程序框架的设计。 返回
返回
10
5.2 创建模式对话框