VC 中自己创建对话框方法
- 格式:doc
- 大小:583.50 KB
- 文档页数:7
mfc创建对话框的基本步骤创建MFC对话框的步骤如下:1. 新建MFC项目。
在创建项目时,选择visual c++选项卡,然后选择MFC。
在右侧选择MFC应用程序,并在下方填写项目名称。
2. 选择应用程序类型。
在创建项目的过程中,你需要选择应用程序类型。
你可以选择单文档或基于对话框的应用程序类型。
以基于对话框的应用程序为例。
3. 添加对话框。
右键点击“Resource Files”,然后选择“Add Resource”。
在弹出的对话框中,选择“Dialog”,然后点击“New”。
这将在资源视图中创建一个新的对话框。
4. 给新的对话框重写ID。
右键点击新创建的对话框,选择“属性”,在属性页中修改IDD为所需的ID,例如IDD_EXEC。
5. 为模态对话框添加类。
右键点击选中的对话框,然后选择“添加类”。
在弹出的对话框中,输入类的名称,然后点击“确定”。
这将为对话框创建一个新的类。
6. 添加控件。
在对话框编辑器中,你可以直接从工具箱里拖动控件到对话框上。
例如,你可以拖动按钮控件到对话框上。
7. 添加事件处理程序。
对于每个添加的控件,你都可以为其添加事件处理程序。
你可以通过右键点击控件,然后选择“添加事件处理程序”来添加事件处理程序。
在弹出的对话框中,选择相应的事件(例如单击事件),然后在右侧的代码编辑器中编写事件处理程序。
8. 运行对话框。
在完成对话框的编辑后,你可以运行对话框来测试其功能。
你可以通过点击工具栏上的“启动”按钮或按F5键来启动应用程序。
这些步骤可以帮助你创建一个基本的MFC对话框。
当然,具体的实现方式还需要根据你的需求进行调整和修改。
Visual C++(VC)中“选择文件夹”对话框的程序的编写2010-04-1001:07A.M.在实际的MFC编程当中,常常需要弹出对话框选择文件、选择目录等操作,对于选择文件,用CFileDialog就可以很简单的解决,而对于选择目录,则稍稍需要多一些步骤,需要自己创建Dialog。
首先创建如下的对话框,并为它创建类Dialog,在Dialog头文件中添加保存目录名的变量CString m_strPath,然后为编辑框右边的按钮添加消息响应函数OnButtonBrowser(),并添加如下代码。
void CDialog::OnButtonBrowser(){//TODO:Add your control notification handler code hereUpdateData(TRUE);char szDir[MAX_PATH];BROWSEINFO bi;ITEMIDLIST*pidl;bi.hwndOwner=this->m_hWnd;//指定父窗口,在对话框显示期间,父窗口将被禁用bi.pidlRoot=NULL;//如果指定NULL,就以“桌面”为根bi.pszDisplayName=szDir;bi.lpszTitle="请选择目录";//这一行将显示在对话框的顶端bi.ulFlags=BIF_STATUSTEXT|BIF_USENEWUI|BIF_RETURNONLYFSDIRS;bi.lpfn=NULL;bi.lParam=0;bi.iImage=0;pidl=SHBrowseForFolder(&bi);if(pidl==NULL)return;if(!SHGetPathFromIDList(pidl,szDir))return;else m_strPath=szDir;UpdateData(FALSE);}当程序启动起来的时候,点击按钮,就会弹出如下的选择目录的对话框=========================================================================== =======Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息。
VC通用对话框类CFileDlgCFileDialog类封装了Windows常用的文件对话框。
常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。
可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。
每种情况下,对话框都与标准MFC对话框一样工作。
因为它们都是CCommonDialog类的派生类。
要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。
m_ofn结构是OPENFILENAME类型的。
要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。
初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。
DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。
当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。
CFileDIalog包含许多保护成员,使你可以处理常用的共享冲突、文件名合法性检查、列表框改变通知。
这些保护成员对许多应用来说用处不大,因为缺省处理是自动的。
对这些函数来说,消息映射入口是不必要的,因为它们是标准虚函数。
可以使用Windows CommDlgExtendError函数判断在初始化对话框时是否是发生了错误,并获取关于错误的更多信息。
析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog。
要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。
你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal 之前进行此操作。
如何使⽤visualstudio2019创建简单的MFC窗⼝(使⽤C++)本⽂介绍了如何使⽤visual studio2019创建简单的MFC窗⼝(使⽤C++)```cpp使⽤visual studio 2019 创建过程请参考Bili的上⼀篇⽂章⬇⬇→!使⽤visual studio 2019 创建简单的MFC窗⼝「使⽤底层的C语⾔」#include<windows.h> //底层实现窗⼝的头⽂件//6.处理窗⼝过程//CALLBACK 代表_stdcall 参数的传递顺序:从右到左依次⼊栈,并且函数返回前清空堆栈LRESULT CALLBACK WindowProc(HWND hand, //消息所属窗⼝句柄UINT uMsg, //具体消息名称 WM_XXXX消息名WPARAM wParam, //键盘附加消息LPARAM lParam) { //⿏标附加消息switch (uMsg){case WM_CLOSE://所有以XXXXWindow为结尾的⽅法,都不会进⼊到消息队列中,⽽是直接执⾏DestroyWindow(hand);//发送另⼀个消息WM_DESTROYbreak;case WM_DESTROY:PostQuitMessage(0);break;case WM_LBUTTONDOWN://⿏标左键按下{int xPos = LOWORD(lParam);int yPos = HIWORD(lParam);char buf[1024];wsprintf(buf, TEXT("x = %d,y = %d"),xPos,yPos);MessageBox(hand, buf, TEXT("按下⿏标左键"), MB_OK);break;}case WM_KEYDOWN: //键盘{MessageBox(hand, TEXT("键盘"), TEXT("按下键盘"), MB_OK);break;}case WM_PAINT: //画图{PAINTSTRUCT ps; //画图结构体HDC hdc = BeginPaint(hand, &ps);TextOut(hdc, 100, 100,TEXT("hello"), strlen("hello"));EndPaint(hand, &ps);break;}default:break;}//返回值⽤默认处理⽅式return DefWindowProc(hand, uMsg, wParam, lParam);}/*程序⼊⼝函数_In_ HINSTANCE hInstance,//应⽤程序实例句柄_In_opt_ HINSTANCE hPrevInstance,//上⼀个应⽤程序句柄,在WIN32环境下⼀般为NULL,不起作⽤了_In_ LPSTR lpCmdLine,//char * argv[]_In_ int nShowCmd//显⽰命令最⼤化、最⼩化、正常WINAPI 代表_stdcall 参数的传递顺序:从右到左依次⼊栈,并且函数返回前清空堆栈*/int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) {/*1.设计窗⼝2.注册窗⼝3.创建窗⼝4.显⽰和更新5.通过循环取消息6.处理消息(窗⼝过程)*///1.设计窗⼝WNDCLASS wc;wc.cbClsExtra = 0; //类的额外的内存wc.cbWndExtra = 0; //窗⼝额外的内存wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //设置背景wc.hCursor = LoadCursor(NULL, IDC_HAND); //设置光标,如果第⼀个参数为null,代表使⽤系统提供的光标wc.hIcon = LoadIcon(NULL, IDI_ERROR); //图标,如果第⼀个参数为null,代表使⽤系统提供的图标wc.hInstance = hInstance; //应⽤程序的实例句柄,传⼊winmain的形参即可wc.lpfnWndProc = WindowProc; //回调函数窗⼝过程wc.lpszClassName = TEXT("WIN"); //指定窗⼝名称wc.lpszMenuName = NULL; //菜单名称wc.style = 0; //显⽰风格,0代表默认//2.注册窗⼝RegisterClass(&wc);//3.创建窗⼝/*lpszClassName,//类名lpWindowName, //标题名dwStyle, //风格 WC_OVERLAPPEDWINDOWx, //坐标 CW_USERDEFAULTy, //坐标nWidth, //宽nHeight, //⾼hWndParent, //⽗窗⼝ nullhMenu, //菜单 nullhInstance, //实例句柄lpParam //附加值⿏标附加值*/HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); //4.显⽰和更新ShowWindow(hwnd, SW_SHOWNORMAL);UpdateWindow(hwnd);/*HWND hwnd; //主窗⼝句柄UINT message; //具体消息名称WPARAM wParam; //附加消息键盘消息LPARAM lParam; //附加消息⿏标消息DWORD time; //消息产⽣时间POINT pt;*/ //附加消息⿏标消息 x,y//5.通过循环取消息MSG msg;/*_Out_ LPMSG lpMsg, //消息_In_opt_ HWND hWnd, //捕获窗⼝填null表⽰捕获所有窗⼝_In_ UINT wMsgFilterMin, //最⼤和最⼩的过滤消息⼀般填0_In_ UINT wMsgFilterMax);*/while (GetMessage(&msg, NULL, 0, 0)){/*if (GetMessage(&msg, NULL, 0, 0) == FALSE) {break;}*///翻译消息TranslateMessage(&msg);//不是false//分发消息DispatchMessage(&msg);}return 0;}划重点:项⽬->属性->常规->⾼级->将MFC的使⽤设置为在“共享dll中使⽤mfc”头⽂件mfc.h#include <afxwin.h>//mfc头⽂件class MyApp:public CWinApp{public:virtual BOOL InitInstance();};class MyFrame :public CFrameWnd {//窗⼝框架类public:MyFrame();//声明宏提⽰消息映射机制DECLARE_MESSAGE_MAP();afx_msg void OnLButtonDown(UINT,CPoint);afx_msg void OnChar(UINT,UINT,UINT);afx_msg void OnPaint();};源⽂件mfc.cpp#include “mfc.h”MyApp app;BOOL MyApp::InitInstance() {//创建窗⼝MyFrame* frame = new MyFrame;//显⽰和更新frame->ShowWindow(SW_SHOWNORMAL);frame->UpdateWindow();m_pMainWnd = frame;//保存指向应⽤程序的主窗⼝的指针return TRUE;//返回正常初始化}//分界宏BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)ON_WM_LBUTTONDOWN()//⿏标左键按下ON_WM_CHAR()ON_WM_PAINT()END_MESSAGE_MAP()MyFrame::MyFrame(){Create(NULL,TEXT(“windows”));}void MyFrame::OnLButtonDown(UINT, CPoint point){//TCHAR buf[1024];//wsprintf(buf, TEXT(“x = %d,y = %d”), point.x, point.y);//MessageBox(buf);CString str;str.Format(TEXT(“x = %d,y = %d”),point.x,point.y);MessageBox(str);}void MyFrame::OnChar(UINT key, UINT, UINT){CString str;str.Format(TEXT(“按下了%c键”),key);MessageBox(str);}void MyFrame::OnPaint(){CPaintDC dc(this);dc.TextOutW(100,100,TEXT(“为了部落”));dc.Ellipse(10,10,100,100);}到此这篇关于如何使⽤visual studio2019创建简单的MFC窗⼝(使⽤C++)的⽂章就介绍到这了,更多相关vs2019创建MFC窗⼝内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
VC中自定义消息的方法2009-07-13 17:22第一:简易版本:定义一个自定义消息号:const UINT WM_MYMESSAGE = WM_USER + n; // 自定义消息一般大于WM_USER,然后就可以为该消息添加映射了afx_msg LRESULT OnMyMessage ( WPARAM wParam, LPARAM lParam );ON_MESSAGE ( WM_MYMESSAGE, OnMyMessage )LRESULT cxx::OnMyMessage ( WPARAM wParma, LPARAM lParam ){...}如果该消息不需要返回值,也不需要参数,那么可以使用宏ON_MESSAGE_VOID 来映射afx_msg void OnMyMessage ();ON_MESSAGE_VOID ( WM_MYMESSAGE, OnMyMessage )void cxx::OnMyMessage (){...}复杂全面版本:消息映射、循环机制是Windows程序运行的基本方式。
VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。
在MFC ClassWizard中不允许添加用户自定义消息,所以我们必须在程序中添加相应代码,以便可以象处理其它消息一样处理自定义消息。
通常的做法是采取以下步骤:第一步:定义消息。
推荐用户自定义消息至少是WM_USER+100,因为很多新控件也要使用WM_USER消息。
#define WM_MY_MESSAGE (WM_USER+100)第二步:实现消息处理函数。
该函数使用WPRAM和LPARAM参数并返回LPESULT。
LPESULT CMainFrame::OnMyMessage(WPARAM wParam, LPARAM lParam){// TODO: 处理用户自定义消息...return 0;}第三步:在类头文件的AFX_MSG块中说明消息处理函数:class CMainFrame:public CMDIFrameWnd{...// 一般消息映射函数protected:// {{AFX_MSG(CMainFrame)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnTimer(UINT nIDEvent);afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);//}}AFX_MSGDECLARE_MESSAGE_MAP()}第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
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按钮添加消息处理函数。
在Visual Basic .NET中,对话框的使用方法主要包括以下步骤:
创建对话框对象:首先,你需要创建一个对话框对象。
这可以通过使用Visual Studio的内置对话框工具箱来完成。
在工具箱中,选择你需要的对话框类型(例如,消息框、文件对话框等),并将其拖放到你的窗体上。
显示对话框:在需要显示对话框时,调用相应的显示方法。
例如,对于消息框,你可以使用MessageBox.Show()方法来显示一个消息框。
处理对话框事件:对话框通常有一些事件,例如打开事件、关闭事件等。
你可以通过编写事件处理程序来处理这些事件。
例如,你可以在打开事件中设置对话框的属性,或在关闭事件中执行一些清理操作。
获取对话框结果:对于一些需要用户输入的对话框,你可以通过获取对话框的结果来获取用户输入的值。
例如,对于文件对话框,你可以使用OpenFileDialog.FileName属性来获取用户选择的文件路径。
VC中创建具有透明效果的对话框1、创建一个基于对话框的MFC EXE2、在对话框的OnInitDialog 函数中,设置对话框扩展属性为:WS_EX_LAYEREDconst WS_EX_LAYERED = 0x80000;::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE, GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_ LAYERED);3、在对话框的OnInitDialog 函数中,设置对话框透明HINSTANCE hInst;const LWA_COLORKEY = 0x00001;const LWA_ALPHA = 0x00002;typedef BOOL (WINAPI*FSetLayeredWindowAttributes)(HWND,COLORREF,BYTE, DWORD);FSetLayeredWindowAttributes SetLayeredWindowAttributes; hInst = LoadLibrary("User32.dll"); SetLayeredWindowAttributes = (FSetLayeredWindowAttributes)GetProcAddress(hInst,"SetLayeredWindowAttributes");SetLayeredWindowAttributes(GetSafeHwnd(),RGB(0,0,0),150,LWA_A LPHA);FreeLibrary(hInst);注:此方法仅适用Windows2000以上平台补充部分:还有另外一种方法可以实现对话框的透明,而且也简单一些,但是我在除自己电脑外,还在同学电脑上也试了下,效果一点都不好,做法是这样的,在VC中打开对话框资源,在对话框编辑器上右击选择属性(PROPERTIES),然后选择扩展属性(EXTENTED STYLE),勾选上TRANSPARENT。
使用 VBA 实现自定义对话框VBA(Visual Basic for Applications)是一种用于扩展Microsoft Office应用程序功能的编程语言。
通过使用VBA,用户可以自定义编写程序代码来实现各种任务和功能。
其中一个常见的应用是使用VBA实现自定义对话框。
自定义对话框是一种用于收集用户输入信息或向用户显示特定信息的弹出窗口。
使用VBA,您可以通过编写代码来创建和控制自定义对话框的外观和行为,以满足您的具体需求。
要使用VBA实现自定义对话框,您需要使用Microsoft Office中的可视化编辑器(如Excel或Word)打开Visual Basic编辑器。
首先,您需要选择适当的Office应用程序(如Excel),然后按下“Alt”和“F11”键,以打开Visual Basic编辑器。
在Visual Basic编辑器中,您可以看到一个称为“Microsoft Excel对象”的项目资源管理器窗格。
通过双击它,您可以打开一个代码窗口,其中包含一个名为“Workbook”的对象和一个名为“Module1”的模块。
对于自定义对话框,您可以在“Module1”模块中编写代码。
首先,您需要声明一个名为“UserForm”的对象,以便在代码中引用对话框。
然后,使用“UserForm1.Show”代码行显示对话框。
这将使自定义对话框以模式对话框的形式显示,用户无法与Excel应用程序进行交互,直到关闭对话框。
接下来,您可以使用自定义对话框的控件,例如文本框、标签、按钮等,通过使用VBA代码控制对话框的外观和行为。
例如,您可以在对话框中添加一个文本框来接收用户输入,并使用VBA代码读取和处理该输入。
要读取文本框中的内容,您可以使用类似于“UserForm1.TextBox1.Value”的代码行。
这将返回文本框中的当前文本作为字符串。
使用类似于“UserForm1.TextBox1.Text”的代码行也可以实现相同的功能,但它将返回的文本包含在一个对象中,可以对其进行更多操作。
VC++对话框的应用程序的菜单操作对话框的应用程序的菜单操作一、课程设计的功能:在一个基于对话框的应用程序中增加一个菜单资源,并把它连接到对话框窗口中,运行时显示出来。
完成以后的程序其运行界面如图1所示。
应用程序的标题为Application of Dialog based。
其主窗口中有三个按钮,它们分别为“时间”、“显示”和“退出”,以及两个“文件”和“帮助”的菜单栏。
单击“文件”菜单,出现一个下拉菜单,选择“时间”菜单,可以看到显示当前系统时间的消息框;单击菜单中的“显示”选项,则弹出一个显示基本信息的消息框;选择“退出”菜单,退出本应用程序。
单击相应的按钮完成同样的效果。
若单击“帮助”菜单,出现一个“关于应用程序”菜单项。
图1 Ex4_2程序主窗口二、课程的设计步骤1使用AppWizard创建一个对话框MFC应用程序(2)在Visual C++主菜单栏中选择File菜单中的New选项,打开New对话框。
(3)选择Project标签页,并在该标签页中选择MFC AppWizard应用程序向导,在Project name编辑框中输入工程文件名为Ex4_2,单击“OK”按钮。
(4)在MFC AppWizard-Step1对话框中,选择Dialog based选项,在MFCAppWizard-Step 2 of 4对话框中,在Please enter a title for your dialog 编辑框中给应用程序主窗口标题命名为“Application of Dialog based”。
单击“Finish”完成应用程序框架文件的创建。
2编辑对话框(1)选择项目工作区的ResourceView面板,(2) 切换到资源视图。
展开Dialog对话框资源类型。
双击IDD_EX4_2_DIALOG菜单资(3) 将弹出对话框编辑窗口和一个控件工具栏面板如下图所示。
图2 初始对话框编辑窗口控件工具栏面板列出了VC中所可以建立的控件类型,用户只要把鼠标停在某个控件标识上,可显示该控件的类型提示。
第6章创建和使用对话框对话框是一种用户界面,几乎每一个Windows程序都使用对话框与用户进行交互。
对话框可能是一个简单的只含有OK按钮的消息框,也可以是一个复杂的数据输入表单。
对话框上有一些方便用户输入的控件,对话框依靠这些控件与用户进行交互,其实质是一个接收消息的窗口。
在本章节我们主要讲述模式对话框和无模式对话框的原理和使用方法,下一章将详细介绍各种控件的使用。
你将学习创建一个对话框,使用对话框模板编辑一个对话框资源,并在程序中调用对话框的方法。
6.1 对话框的基本原理6.1.1 对话框的工作原理在创建一个对话框之前,我们先来了解一下对话框是如何工作的,对话框的数据来自三方面:对话框资源、对话框对象、和一个文档对象:1.对话框资源对话框资源是一个用户输入或取得数据的图形界面。
这个图形界面是使用Develop Studio的对话框编辑器在对话框模板上创建的,程序员可以在对话框模板上增加并编辑控件,生成对话框资源。
当应用程序运行时,就可以得到一个对话框。
2.对话框对象MFC使用CDialog类来描述对话框,它是CWnd类的派生类。
在CWnd类的基础上增加了数据交换的功能。
当创建一个新的对话框资源后,使用ClassWizard可以创建一个对话框类的派生类。
对话框对象实现了对话框和应用程序之间的通信。
在应用程序中定义一个对话框对象后,在对话框显示前,可以通过访问对话框对象的成员变量为一个对话框的控件初始化,在对话框关闭后,可以通过访问对话框对象的成员变量获得用户的输入数据。
3.文档对象MFC使用文档对象描述应用程序处理的数据,用户输入的数据要进一步的处理,通常要先存贮到文档对象中。
例如:一个学生记录处理的应用程序,用户通过一个对话框输入学生记录并贮存到一个文件中。
应用程序的处理顺序是:用户在对话框中输入信息,通过对话框对象得到输入信息,将输入信息整理到文档对象中,使用序列化函数将文档对象存贮到一个文件中,所以文档对象扮演了一个很重要的数据交换的角色。
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对话框是Windows编程中常用的GUI界面,它提供了一种方便快捷的方式来创建和
管理用户界面。
使用MFC对话框,可以轻松地添加控件、处理事件和响应用户操作。
创建MFC对话框的步骤很简单。
打开Visual Studio并创建一个新的MFC应用程序。
然后,选择“对话框”作为应用程序类型,并选择所需的对话框模板。
接下来,可以在对话框中添
加所需的控件,例如按钮、文本框、列表框等。
可以使用MFC框架提供的事件处理程序
来响应用户操作。
MFC对话框的优点在于它的易用性和灵活性。
通过使用MFC对话框,可以快速创建一个
功能完善的用户界面,同时还可以轻松地对其进行自定义和扩展。
MFC框架还提供了许
多有用的功能,例如自动布局、对话框管理和资源管理等。
MFC对话框是一种非常有用的工具,可以帮助Windows程序员快速创建和管理用户界面。
无论是初学者还是经验丰富的开发人员,都可以从MFC对话框的使用中受益。
手工生成(不用向导)MFC对话框应用程序天天用MFC的向导开发程序觉得有的时候不是很方便,怎样不用向导直接用MFC来生成一个对话框应用程序呢?现在我来为大家介绍一下。
打开vc++6.0,建立个基本的工程,当然了工程名称自己随便取,这里我取名为AppDlgTst。
工程的类型选择Win32 Application,如下图:第二歩选择“An empty project”,一个空的工程,如下图:点击“完成”,再“确定”,建立一个win32工程。
接下来,给工程添加主程序类。
主菜单(insert->NewClass),打开“New Class”对话框。
新建一个类,Name: CWinAppDlg ,Derived From :CWinApp,as:public。
点击“Change…”按钮,修改类文件的路径,把类文件放到新建的工程目录下。
界面如下:点击“OK”,会出现如下提示框:不用管它,确定。
这是一个基本的应用程序类,就这样建成了。
接下来,我们需要手动添加一个对话框,添加方法如下:依次点击主菜单的“insert”→“resource…”,打开insert resource对话框。
选中“Dialog”,点击“New”按钮,一个对话框就添加到你的工程中了。
如下图:对话框添加了,但工程中相应的资源管理器(ResourceView)还没有出现,无法操作添加的对话框。
关闭工作区,此时系统会提示是否保存资源文件?如下图:点击“是”,保存资源文件为“script.rc”,保存,如下图。
重新打开工程,但左侧的工程管理栏内仍然没有“resourceView”页,怎么办?把刚才保存的资源文件添加到工程即可,操作如下:依次点击主菜单“project”→“add project”→“Files…”,打开“Insert Files into Project”对话框,找到刚才退出工程时保存的资源文件“Script.rc”,选中它,点击“保存”。
VC中自己创建对话框的方法
这里讲在VC中不需要打开MFC工程,通过代码直接创建一个对话框,我看这个对话框比MFC的漂亮多了,而且要写会代码不需要研究MFC就直接开发新的工程.
先打开VC++ 6.0 版本, 第一步:创建一个工程名为:Main Dialog 的Win32 Application。
创建过程如下:
打开File菜单中New,选自Win32 Application,工程名为:Main Dialog,点击OK,再选自A simple Win32 application。
点击Finish,再点击OK.(见图1)
第二步:创建资源脚本。
再打开File菜单中New,选自File选项的Resource Script(就是资源脚本),文件名为Dialog,点击OK。
(见图2)
第三步:插入对话框。
刚才建立的脚本Dialog显示为Dialog.rc,就在Dialog.rc上面点击鼠标右键Insert(插入)Resource中选自插入Dialog(对话框),点击New(新建),这样对话框插入完毕。
(见图3)
第四步:添加resource.h。
我们把第四步插入的对话框ID改为IDD_MAIN ,在FileView中有个Header Files的文件,上面点击右键,选择Add Files to Folder...(添加文件到目录),弹出一个工程目录窗口,中间找到resource.h,然后OK了(添加)。
(见图4)
第五步:复制代码。
双击Main Dialog.cpp,我们写代码的位置出现了(见图5),那里有几行代码,把它们全部删掉,下面已经准备好的代码全部复制到那里,编译,执行,您的是否成功了?
#include "stdafx.h"
#include "resource.h"
#include <windowsx.h>
BOOL WINAPI Main_Proc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
BOOL Main_OnInitDialog(HWND hwnd,HWND hwndFocus,LPARAM lParam);
void Main_OnCommand(HWND hwnd,int id,HWND hwndCtl,
UINT codeNotify);
void Main_OnClose(HWND hwnd);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_MAIN),NULL,Ma in_Proc);
return 0;
}
BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
}
return FALSE;
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
return TRUE;
}
void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch(id)
{
case IDOK:
{
MessageBox(hwnd,TEXT("Thank you build me!"),TEXT("Happy"),MB_OK);。