基于MFC的对话框Dialog的OpenGL程序框架

合集下载

计算机图形学实验指导书(vc++版)

计算机图形学实验指导书(vc++版)

实验指导书刘文涛2013目录第一章图形学实验环境和要求 (4)1.1 VC++实验环境 (4)1.1.1 基本环境 (4)1.1.1 开发图形程序的一般流程 (7)1.1.3 基本绘图函数介绍 (11)1.2 OpenGL (22)1.2.1 OpenGL介绍 (22)1.2.2 OpenGL开发环境 (24)1.2.3 OpenGL函数 (24)1.2.4 回调函数 (25)1.2.4 一个典型OpenGL例程 (26)1.3 实验要求 (29)1.3.1 实验内容 (29)1.3.2 实验方法 (29)1.3.3 实验效果 (30)第二章直线生成算法 (30)2.1 实验原理 (30)2.1.1 DDA算法 (30)2.1.2 Bresenham算法 (30)2.2 实验内容 (30)2.3 参考示例程序 (30)第三章圆和椭圆生成算法 (32)3.1 实验原理 (32)3.2 实验内容 (32)3.3 参考示例程序1 (32)3.4 参考示例程序2 (33)第四章裁剪算法 (35)4.1 实验原理 (35)4.2 实验内容 (35)4.3 示例程序 (35)4.3.1 参考例子1 (35)4.3.2参考例子2 (38)第五章二维变换 (40)5.1 实验原理 (40)5.2 实验内容 (40)5.3 示例程序 (40)5.3.1参考例子1 (40)第六章三维变换 (44)6.1 实验原理: (44)6.2 实验内容 (45)6.3示例程序 (45)第七章填充算法 (47)7.1 实验原理: (47)7.2 实验内容 (47)7.3示例程序 (47)第八章曲线曲面 (50)8.1 实验原理 (50)8.2 实验内容 (50)8.3示例程序 (51)8.3.1 参考例子(1) (51)8.3.2 参考例子(2) (52)8.3.3 参考例子(3) (54)8.3.4 参考例子(4) (56)第九章真实感图形绘制 (59)9.1 实验原理 (59)9.2 实验内容 (59)9.3示例程序 (59)9.3.1参考例子(1) (59)9.3.2参考例子(2) (61)9.3.3参考例子(3) (63)第十章动画 (66)10.1 实验原理 (66)10.2 实验内容 (66)10.3示例程序 (66)10.3.1 参考例子 (66)参考文献: (72)第一章图形学实验基础1.1 VC++实验环境1.1.1 基本环境Microsoft Visual C++ 6.0 是微软推出的功能强大的可视化C/C++语言编译器,运行在Windows 9x/2000/NT等平台上,可以建立32位应用程序。

mfc创建对话框的基本步骤

mfc创建对话框的基本步骤

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对话框。

当然,具体的实现方式还需要根据你的需求进行调整和修改。

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘

MFC基于Dialog的窗口程序启动时最小化到托盘一、托盘是什么所谓的“托盘”,在Windows系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。

在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。

二、NOTIFYICODDATA结构和Shell_NotifyIcon函数1、NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。

其定义为:typedef struct _NOTIFYICONDATA {DWORD cbSize;//以字节为单位的这个结构的大小HWND hWnd;//接收托盘图标通知消息的窗口句柄UINT uID;//应用程序定义的该图标的ID号UINT uFlags;//设置该图标的属性UINT uCallbackMessage;//应用程序定义的消息ID号,此消息传递给hWndHICON hIcon; //图标的句柄char szTip[64]; //鼠标停留在图标上显示的提示信息} NOTIFYICONDATA, PNOTIFYICONDATA;该结构中,成员uFlags可以是下列的组合或其中之一:NIF_ICON:设置成员hIcon有效NIF_MESSAGE:设置成员uCallbackMessage有效NIF_TIP:设置成员szTip有效2、全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。

其原型为:WINSHELLAPI BOOL WINAPI Shell_NotifyIcon( DWORD dwMessage,PNOTIFYICONDATA pnid);Pnid是上面的NOTIFYICONDATA结构的指针。

dwMessage是被传递的消息,可以是以下消息之一:NIM_ADD:增加图标NIM_DELETE:删除图标NIM_MODIFY:修改图标三、如何实现1、在CYourDlg.cpp文件中定义一个变量NOTIFYICONDATA m_nid;2、在CYourDlg.h文件中定义宏#define WM_SHOWTASK WM_USER+13、在CYourDlg::OnInitDialog()函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

VC通用对话框类CFileDlg

VC通用对话框类CFileDlg

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 之前进行此操作。

mfc对话框基础要点

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类的派生类。

OPenGL的基本程序结构

OPenGL的基本程序结构

O p enGL的基本程序结构常用的程序设计语言,如C、C++、Pascal、Fortran和Java等,都支持OpenGL的开发。

这里只讨论C版本下OpenGL的语法。

程序的基本结构OpenGL程序的基本结构可分为三个部分:第一部分是初始化部分。

主要是设置一些OpenGL的状态开关,如颜色模式(RGBA或ALPHA)的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。

这些状态一般都用函数glEnable(), glDisable()来设置,表示特定的状态。

第二部分设置观察坐标系下的取景模式和取景框位置大小。

主要利用了三个函数:函数void glViewport(left,top,right,bottom):设置在屏幕上的窗口大小,四个参数描述屏幕窗口四个角上的坐标(以象素表示);函数void glOrtho(left,right,bottom,top,near,far):设置投影方式为正交投影(平行投影),其取景体积是一个各面均为矩形的六面体;函数void gluPerspective(fovy,aspect,zNear,zFar):设置投影方式为透视投影,其取景体积是一个截头锥体。

第三部分是OpenGL的主要部分,使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系、几何变换、光照处理等等。

以上三个部分是OpenGL程序的基本框架,即使移植到使用MFC的Windows程序中,也是如此。

只是由于Windows自身有一套显示方式,需要进行一些必要的改动以协调这两种不同显示方式。

OpenGL基本函数均使用gl作为函数名的前缀,如glClearColor();实用函数则使用glu作为函数名的前缀,如gluSphere()。

OpenGL基本常量的名字以GL_开头,如GL_LINE_LOOP;实用常量的名字以GLU_开头,如GLU_FILL。

一些函数如glColor* ()(定义颜色值),函数名后可以接不同的后缀以支持不同的数据类型和格式。

基于MFC和OpenGL的快速填充等值线实现

基于MFC和OpenGL的快速填充等值线实现

基于M FC和OpenGL的快速填充等值线实现孙晓燕1,伍增贵2(1.石油大学计算机与通信工程学院,山东东营257061;2.石油大学石油工程学院,山东东营257061)摘 要:通过等值线的绘制与填充过程分离的编程思想,先用OpenG L硬件加速的光栅化技术实现区域快速填充,然后利用MFC下的G D I绘图功能在相同的区域上绘制等值线。

该方法不涉及到复杂的算法,用很简单的代码就能实现与商业软件视觉效果相媲美的等值线填充效果,且适用于离散区域为任意形状的多边形网格系统。

关键词:等值线填充;OpenG L;可视化;MFC;调色板中图法分类号:TP391141 文献标识码:A 文章编号:100123695(2005)0320169202 Realizati on of Fast Filling Cont ours Based on MFC and OpenG LS UN Xiao2yan1,WU Zeng2gui2(1.College of Co m puter&Co mm unication Engineering,U niversity of Petroleum(East China),D ongying Shandong257061,China;2.College of Petroleum Engineering,U niversity of Petroleum(East China),D ongying Shandong257061,China)Abstract:This paper p resents a p r ogra mm ing idea of dra wing and filling cont ours res pectively.First the zone is filled by ta2 king advantage of rap id raster dis p lay of OpenG L,then on the sa me zone cont ourlines are generated by using G D I functi ons of MFC.W ithout any comp licated algorith m,the p r ogra m is easily realized,but p r ovides excellent visual effects comparable with commercial s oft w are.I n additi on,the method can be app lied t o vari ous grid syste m s.Key words:Cont ours Fill;OpenG L;V isualizati on;M FC;Palette 在工程计算分析中常常涉及到大量的参数场,如温度场、压力场、浓度场、速度场、应力场等数据场的分析和处理。

实验1 创建对话框应用程序及控件使用

实验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.编译运行程序,在文本编辑框中输入内容并单击“按钮”,观察执行结果。

将现有MFC对话框工程(Dialog based)修改为BCG工程(皮肤美化)

将现有MFC对话框工程(Dialog based)修改为BCG工程(皮肤美化)

HelloDlg.h
class CHelloDlg : public CBCGPDialog { // Construction public:
CHelloDlg(CWnd* pParent = NULL);
// standard constructor
// Dialog Data enum { IDD = IDD_HELLO_DIALOG };
pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } }
// Set the icon for this dialog. The framework does this automatically
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); };
HelloDlg.cpp
// HelloDlg.cpp : implementation file //
#include "stdafx.h" #include "Hello.h" #include "HelloDlg.h"
Hello.h
……
class CHelloApp : public CWinApp, public CBCGPWorkspace { public:
CHelloApp();
// Overrides public: virtual BOOL InitInstance();
// Implementation
CBCGPVisualManager::SetDefaultManager(RUNTIME_CLASS(CBCGPVisualManager2007 ));

第8章 MFC对话框

第8章  MFC对话框
DoDataExchange()函数 控件将事件消息发往父窗体(对话框),在对话框类内可以处理它们
谢谢 Thanks for listening.
- 16 -
void CRegDlg::OnBnClickedOk() {
/*1、访问对话框控件*/ char chPhone[30]; memset(chPhone,0,sizeof(chPhone)); GetDlgItem(IDC_ED_PHONE)->GetWindowTextW((LPTSTR)chPhone,20); GetDlgItem(IDC_ED_PHONE2)->SetWindowTextW((LPTSTR)chPhone); }
- 19 -
标准控件与对话框—对话框数据交换与验证
数据交换:
在对话框类中,MFC自动添加了DoDataExchange()函数,在其中实现对 话框控件数据的交换和验证机制。
void CRegDlg::DoDataExchange(CDataExchange* pDX) {
CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_ED_USERNAME, m_edUserName); DDX_Text(pDX, IDC_ED_PHONE, m_edPhone); DDX_Text(pDX, IDC_ED_EMAIL, m_edEmail); }
SetDlgItemText(IDC_ED_PHONE2,(LPTSTR)chPhone);
}
- 17 -
class CRegDlg : public CDialog {
…… char phone[30];//此处是向导添加的变量 }; …… GetDlgItemText(IDC_ED_PHONE,(LPTSTR)phone,20); SetDlgItemText(IDC_ED_PHONE2,(LPTSTR)phone); ……

MFC对话框几个对话框程序例子建立对话框与相应程序相关联

MFC对话框几个对话框程序例子建立对话框与相应程序相关联

MFC对话框和对话框类几个对话框程序例子建立对话框与相应的程序相关联如何建立对话框与相应的程序相关联:在MFC中,对资源的操作都是建立相关的类来完成的;所以我门先NEW 一个对话框资源然后建立他的类与相应的应用程序相关联就可以;步骤:1 NEW 一个对话框资源2 在资源上选择 Classwarrzd上创建一个新的类(或在资源上双击左键)3 起名字!(注意文件名将会去掉C 例如我门的名字叫 CDaiDlg那么文件名是 DaiDlg);对话框的俩种类型:1 模态对话框(特性:当建立模态对话框时,将不允许用户点击对话框以外的控件后应用程序本身,也就是说当模态对话框建立时应用程序停止运行而只运行对话框,所以模态对话框是可以使用局部变量的定义方法的!)模态对话框是比较方便的一种对话框~建立函数:int CDialog::DoMadol() //注意他是CDialog类成员也就是说想使用先建立一个 CDialog 对象吧如果我门想要在View类中建立一个 CDialog对象不要忘了要在View的Cpp 文件中包含 CDialog.h2 非模态对话框(特性与模态的相反)使用成员函数 BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );nIDTemplate 为对话框的ID号pParentWnd 拥有这个对话框的对象指针,如果是NULL 为默认的主应用窗口也就是 Frame应用窗口注意如果我门在使用Create创建非模态对话框时要调用一个函数来显示这个对话框CWnd::ShowWindow(SW_SHOW);不仅这样非模态对话框时不能是局部变量!完整代码: CDialog dlg;dlg.Create(ID,this);dlg.ShowWindow(SW_SHOW):对ShowWindow的发现: ShowWindow是CWnd的成员函数是改变窗口的显示属性(包括Hide Show等)ShowWindow这一函数是改变属性同样在创建一个窗口时(窗口包括很多,CButton也是一个窗口!)可以直接给他赋予属性 WS_VISIBLE (可见的)等属性也可以解决改变窗口之后更新窗口的问题显示出新窗口的问题~!对于俩种对话框的销毁;模态对话框中OnOK的成员函数中有对模态对话框的 EndDialog();来销毁而非模态的对话框时 OnOK不能销毁对话框而我门需要对OnOK函数进行覆盖调用DestryWindow;做一个对话框的小程序,在对话框上动态增加一个按钮:在这要强调一下动态的增加某种资源是需要把资源对象声明成类的成员这样才可以(不然被析构了建立了也就没有效果了)而资源对象是对象资源是资源只有吧资源和对象联系起来这个的东西才有实际的意义,我门才能对他进行操作,而把资源和对象联系起来有俩个函数 LoadMenu 和CreateMenu (当然有些类是不存在 Load函数的例:Button类) Load函数是将一个已经被我门在资源视图中创建好的东西与对象联系而Create函数是直接创立一个新的东西(而直接创立时我门还需要给他一些这样东西的属性所以使用Create函数时总是件另人讨厌的事情~)更重要的事情是:一个对象只能与一个资源相联系如果你想把这个已与资源联系的对象与另一个资源联系起来那必须先调用DestoryWindow()这个资源然后在做新的联系;静态文本框的操作:刚刚建立的静态文本框是不可以做消息响应的(一般也不需要这么去做)而我门想要去用静态文本框的消息就要改边文本框的 ID (因为一般不给文本框添加消息响应文本框的的ID都是一样的)并且要把属性->样式(Styles)->通告(Notify)打上对号!!几个有用的函数:获得窗口的文本CWnd::int GetWindowText(CString &str);CWnd::int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const; 参数str是放置文本的对象!lpszStringBuf是一个字符串的指针,nMaxCount 到大的最大字符数同样使用 SetWindowText(CString str)SetWindowText(LPCTSTR lpszString);来设置文本获得对话框上控件的指针(控件包括了Button,静态文本等等!)CWnd::CWnd* GetDlgItem( nID )使用ID号来获取控件的指针!从而进行操作!从编辑框得到数据的几种操作1 使用GetDlgItem( nID )->GetWindowText( )然后把字符转换为我门所要的东西(使用 atoi,itoa 的转换函数)这几个函数所要注意的问题使用函数前一定要确定这个函数是对谁操作!对谁操作要获取谁的指针!!GetWindowText(LPTSTR lpszStringBuf, int nMaxCount )这个函数参数lpszStringBuf所要存储的指针 nMaxCount 是最大得到多少个字符~使用代码例子:char str[10];GetDlgItem( nID )->GetWindowText(str,10 );//注意第一个参数使用的是指针aoti itoa 函数介绍:(介绍前的感想,做ACM时看到程序就要将程序分成一个一个功能函数,然后将功能函数做好,从来没有想过使用他人做好的函数,而现在学习了MFC这套教程,养成的第一个习惯就是寻找自己想要的函数在MSDN中,然后再自己编写算是一种偷懒的行为吧,估计在以后的编程中,也要养成先寻找和想要的类模型差不多的类然后在通过继承派生来得到想要的类模型,这可能就是代码重用的本质吧 ~ MS就是一大堆会偷懒的编程员 ~呵呵)double atof( const char *string );int atoi( const char *string );__int64 _atoi64( const char *string );long atol( const char *string );这四个函数不用多说了,要注意的就是参数的问题,不要看参数名字叫 string 就是一个CString 成员而是 char*(指针) 也就是数组的名字返回型是相应转化的数据类型;(这是一个不错的函数)不过要注意他是需要包含头文件Routine Required Header Compatibilityatof <math.h> and <stdlib.h> ANSI, Win 95, Win NTatoi <stdlib.h> ANSI, Win 95,Win NT_atoi64 <stdlib.h> Win 95, Win NTatol <stdlib.h> ANSI, Win 95, Win NT还可以反过来 itoa, ftoa等等做一个介绍char *_itoa( int value, char *string, int radix );value要转换的数char *string 一个buffer 接受转换后的字符串int radix 十进制啊二进制 ...==(还有这里的 atoi 的 a 是ASCII的 A 这就解释了为什么不是ctoi~)2 使用函数GetDlgItemText( nID,LP... ),SetDlgItemText(nID,LP...)(这函数不仅长的象 GetDlgItem 和 GetWindowText 的混合体功能更是相同...又个偷懒的杰作!)int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;int GetDlgItemText( int nID, CString& rString ) const;void SetDlgItemText( int nID, LPCTSTR lpszString ); 使用也是一样的!比那个能方便点~!3 又一个混合体函数 GetDlgItemInt();; SetDlgItemInt()在2的基础上来atoi都不用了!UINT CWnd:: GetDlgItemInt( int nID, BOOL* lpTrans = NULL, BOOL bSigned = TRUE ) const;nID ID号lpTrans 如果NULL 那么不会给出错误的提示bSigned 是否是有符号的数字(就是是否去转化符号“-”) TRUE就是有符号啦!!void SetDlgItemInt( int nID, UINT nValue, BOOL bSigned = TRUE ); nValue 是你想要在DlgItem输出的数字;4 使用资源来关联变量的方式来控制数据交换(这才是重点,因为他不只提供了对数据错误的提示功能还增加了控件与资源的联系当然我门需要了解框架所带给我门的东西;)在控件上使用ClassWarrzd 选择第2个选项卡!(Member Variables)对相应的 ID 号进行资源与数据的联系:观察一下ClassWarrzd给我门在代码里家了些什么:1 在头文件中加了// Dialog Data//{{AFX_DATA(CTextDlg)enum { IDD = IDD_DIALOG1 };int m_num1;int m_num2;int m_num3;//}}AFX_DATA这是数据交换的宏2 在构造函数里给这几个成员变量初始化://{{AFX_DATA_INIT(CTextDlg)m_num1 = 0;m_num2 = 0;m_num3 = 0;//}}AFX_DATA_INIT3 在void CTextDlg::DoDataExchange(CDataExchange* pDX)函数中增加了数据交换声明{CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CTextDlg)DDX_Text(pDX, IDC_EDIT1, m_num1);DDX_Text(pDX, IDC_EDIT2, m_num2);DDX_Text(pDX, IDC_EDIT3, m_num3);//}}AFX_DATA_MAP}对与 void CTextDlg::DoDataExchange(CDataExchange* pDX) 的使用用来数据交换!!这个函数是被框架调用,用来交换和验证数据的函数!这个函数从来不被直接掉用而是通过调用UpdateData()函数来调用这个函数来交换和验证数据的(这句的意思是DoDataExchange 接口是不对我门开放的我门想要掉用 DoDataExchange这个函数必须用UpdateData()来间接调用)BOOL UpdateData( BOOL bSaveAndValidate = TRUE );介绍:参数问题:bSaveAndValidate=TRUE 时数据开始交换(也就是说我门对该变量的操作是生效的)而当他是 FALSE 时数据不再交换而是初始化这个函数(也就是把这个变量的操作失效不过可以在屏幕上进行显示!)通过改变这个参数的值我门可以控制数据的交换或是数据的显示~这是很重要的;!错误的数字使得我门的操作成为无效;~还要说的一点是当创建的是模态对话框时(DoModal)时系统会自动把这个参数变成 FALSE 也就是说我门初始时是不能改变变量的例子代码: UpdateData();m_num3=m_num1+m_num2;UpdateData(FALSE);//我门也可以让控件关联一个控件变量然后在调用他的成员函数进行操作(教程里有讲不过觉得有些多余,也许在其他类型的程序中可能要有用,注意这种方法ClassWarrzd的使用方法)函数 SendMessage( );(注意是SendMessage 而不是SetMessage)是一个发送消息的函数使用....不详,查查SDK API什么的吧~ 功能很强大static LRESULT SendMessage( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )关于SendMessage()函数的说明发送一个响应的消息message,然后用wParam,lParam来接受我门想要的东西(当然这个要取决于我门发的是什么消息现在已知的消息是:WM_SETTEXT,WM_GETTEXT去MSDN 看看)而SendMessage 在API 和 MFC 中都有要注意是谁调用他的原始问题;SendMessage()的变种(向对话框中的子控件发送消息):LRESULT SendDlgItemMessage( int nID, UINT message, WPARAM wParam = 0, LPARAM lParam = 0 ); 用法基本相同对于获取编辑框复选的操作:向编辑框发送一个 EM_GETSEL (同样也是 EM_SETSEL) 要使用SendMessage()来发送//还要注意的是我门已经把复选设置好了有的时候也是看不见效果的,因为我门在操作时点击了按钮或者其他的操作使得焦点没有在我门所设置那个Item上所以我门是看不见结果的我门还要增加一个操作是用函数改变焦点:CWnd* CWnd::SetFocus( );没有参数返回值是以前那个带有焦点的指针;(对与复选最常用的是复选所有的东西,这样我门要把 SendMessage 的wParam =0,lParam =-1)总结:怎么样改变对话框的大小用来增加新的功能?对话框的矩形坐标可以利用一个图形控件和 SetWindowPos 来改变先要知道对话框的矩形坐标通过控件得到(GetWindowRect())矩形坐标 ...这样我门就能知道需要改变什么矩形坐标了void GetWindowRect( LPRECT lpRect ) const; 函数参数 lpRect 用来储存矩形坐标BOOL SetWindowPos( const CWnd* pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags ); 本来是用来改变Window Z-order 的(什么是 Z-order简单说就是显示窗口的顺序)在 79 710 俩课中使用的SDK 函数不再介绍(因为不明白!!)使用default按钮的特性来增加对话框对回车(0x0d)按键响应的操作我门用一个设置输入焦点随回车变化的例子来说明;因为在重载OnOK函数时 OnOK还是会调用基类的 OnOK函数(OnOK函数会自动关闭对话框)而我门不希望我门在输入回车时关闭对话框所以我门将它转化为注释!然后使用函数获取当前焦点的句并 Wnd* GetFocus( )来选择GetNextWindow(UINT nFlag = GW_HWNDNEXT )然后在使用SetFocus( );完整代码:(在Dialog中的 OnOK 函数中)GetFocus()->GetNextWindow()->SetFocus();这个代码逻辑上是可以的,不过执行起来会发生错误,如果一直回车下去回造成程序崩溃;(哪有那么都 GetNext呀?)我门要使用Tab功能的函数来完成这个功能就不会出错了~CWnd* GetNextDlgTabItem( CWnd* pWndCtl, BOOL bPrevious = FALSE ) const;pWndCtl开始时的窗口bPrevious = FALSE 向下走;如何查看 Tab 顺序:布局(layout)-> Tab顺序(Tab Order)OK按钮不管存在不存在都会执行 OnOK函数他的ID 号是IDOK(不是ID_OK 哦)孙鑫MFC教程笔记(菜单.对话框)2007-08-11 20:03对话框先要对消息的传送进行分析:消息分为三类标准消息,命令消息,通告消息;标准消息:是除WM_COMMAND以外的所有以WM_开头的消息(WM_Char,WM_Move 等)命令消息:WM_COMMAND 包括了来自菜单、加速键或工具栏按钮的消息。

基于mfc的实验报告

基于mfc的实验报告

基于mfc的实验报告摘要本实验旨在通过使用MFC(Microsoft Foundation Classes)开发框架,实现一个简单的图形化界面程序。

通过这次实验,我深入理解了MFC框架的基本原理和开发流程,并成功完成了一个简单的图形化界面程序。

1. 引言MFC是微软公司开发的一套C++类库,用于创建Windows平台上的应用程序。

它建立在Windows API之上,简化了Windows操作系统的编程方式。

MFC 提供了一系列的类和函数,包括窗口(Window)、对话框(Dialog)、消息映射(Message Map)等,极大地简化了Windows应用程序的开发过程。

2. 实验目的本实验主要目的是熟悉MFC框架的基本原理和开发流程,实现一个简单的图形化界面程序。

通过本实验,能够掌握MFC框架中的窗口创建、消息处理、界面设计等基本概念和操作。

3. 实验过程3.1 环境配置首先,需要在计算机上安装Visual Studio和MFC组件。

打开Visual Studio,创建一个新的MFC应用程序项目,并选择对话框类型作为项目的基础结构。

3.2 窗口创建在MFC应用程序中,窗口是最基本的界面单位。

通过菜单选择“添加类”的方式,创建一个新的对话框类,并继承自CDialog类。

在新建的对话框类中,可以定义与界面相关的成员变量和控件。

3.3 控件添加在对话框设计界面中,可以通过拖拽和调整控件的方式,向对话框中添加各种控件,如按钮、文本框、列表框等。

每个控件都有自己的属性和事件响应函数。

3.4 消息映射消息映射是MFC框架的核心概念之一。

通过消息映射,可以将用户的操作(如点击按钮)与特定的函数关联起来。

在对话框类中,可以通过DECLARE_MESSAGE_MAP和BEGIN_MESSAGE_MAP宏定义来实现消息映射关系的建立。

3.5 编译和运行完成界面设计和消息映射后,即可对程序进行编译和运行。

在编译过程中,MFC 会自动将资源文件编译成可执行的文件。

使用MFC实现OpenGL应用程序的开发

使用MFC实现OpenGL应用程序的开发
[ 稿 日期 ]07 8 0 收 20 —0 —1
0 / n lh u e , / oa abf r p
0,/ hf i i o e /s i bt g rd t n
P D DRA F W
— —
的应 用提供 了 完备 的支 持 。对 于 应用 V C+ +编
程 的软件开 发领域来 说 , 利用 MF C搭 建 的框 架来 实现 O eG pn L的应 用 的 目的 和 意 义 在 于 , M C 将 F 系统 和 O eG pn L系统 进 行 有机 的 结 合 , 而 驱 除 从 了 MF C系统 本身 的 复杂 性 给 程序 设 计 带来 的影 响 , 得 我 们 可 以 高 效 率 地 编 写 出 高 品 质 的 使 O eG 应 用程序 。 pn L

PX L O I E F RMA D S R P O f = T E C IT R pd {
s ef( I E O MA D S R P O , / i o P X I R T E C IT R) / z
sz ft i f ‘ ie o h sp d 1 1,/ eso u /v rin n mbe r
库) 因其具 有独 立 于硬件 、 立 于 窗 口系统 、 以 独 可 在不 同的操作 系统 平 台之 间进 行 移 植 , 支 持 网 并
络环 境下 以客 户/ 务器模 式 工作 的特 点 , 服 已经成
以及 时而方便 的输 出文本 信息 ; 是 , 完备 的方 但 更
法是 使用 O eG pn L渲 染 系 统 自行 绘 制控 制 台。 下 面 就用这种 方法 阐述 O e G p n L编程模式 :
维普资讯
第 5期
安 阳 师范 学 院学 报

openggl

openggl

MFC中的OpenGL窗口MFC中的OpenGL窗口建立一个基于对话框的工程(名称:OpenGL)并且在设置的Link里加入库opengl32.lib glu32.lib glaux.lib为对话框添加picture control 控件,ID:IDC_RENDER主要程序:// OpenGLDlg.cpp : implementation file//#include "stdafx.h"#include "OpenGL.h"#include "OpenGLDlg.h"#include <gl\gl.h>#include <gl\glu.h>#include <gl\glaux.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MS G(CAboutDlg)//}}AFX_MS GDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MS G_MAP(CAboutDlg)// No message handlers//}}AFX_MS G_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COpenGLDlg dialogCOpenGLDlg::COpenGLDlg(CWnd* pParent /*=NULL*/): CDialog(COpenGLDlg::IDD, pParent){//{{AFX_DATA_INIT(COpenGLDlg)// NOTE: the ClassWizard will add member initialization here//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 PixelFormat=0;m_yRotate = 0;m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void COpenGLDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(COpenGLDlg)// NOTE: the ClassWizard will add DDX and DDV calls here//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COpenGLDlg, CDialog)//{{AFX_MS G_MAP(COpenGLDlg)ON_WM_S YSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()//}}AFX_MS G_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COpenGLDlg message handlersBOOL COpenGLDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); }}// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon///////////////////////OPENGL INIT/////////////////////////CWnd *wnd=GetDlgItem(IDC_RENDER);hrenderDC=::GetDC(wnd->m_hWnd);if(SetWindowPixelFormat(hrenderDC)==FALSE)return 0;if(CreateViewGLContext(hrenderDC)==FALSE)return 0;glPolygonMode(GL_FRONT,GL_FILL);glPolygonMode(GL_BACK,GL_FILL);///////////////////////////////////////////glEnable(GL_TEXTURE_2D);glShadeModel(GL_SMOOTH);glViewport(0,0,259,231);glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45,1,0.1,100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();glShadeModel(GL_SMOOTH); // Enable Smooth ShadingglClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black BackgroundglClearDepth(1.0f); // Depth Buffer SetupglEnable(GL_DEPTH_TEST); // Enables Depth TestingglDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do/////////////////////////////////////////////////////////////////////////glEnableClientState(GL_VERTEX_ARRAY);glEnableClientState(GL_TEXTURE_COORD_ARRAY);SetTimer(1,10,0);////////////////////////////////////////////////////////////////// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void COpenGLDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void COpenGLDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangleint cxIcon = GetS ystemMetrics(SM_CXICON);int cyIcon = GetS ystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR COpenGLDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}BOOL COpenGLDlg::SetWindowPixelFormat(HDC hDC){PIXELFORMATDESCRIPTOR pixelDesc;pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR); pixelDesc.nVersion = 1;pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW |PFD_S UPPORT_OPENGL |PFD_DOUBLEBUFFER |PFD_TYPE_RGBA;pixelDesc.iPixelType = PFD_TYPE_RGBA; olorBits = 32;pixelDesc.cRedBits = 0;pixelDesc.cRedShift = 0;pixelDesc.cGreenBits = 0;pixelDesc.cGreenShift = 0;pixelDesc.cBlueBits = 0;pixelDesc.cBlueShift = 0;pixelDesc.cAlphaBits = 0;pixelDesc.cAlphaShift = 0;pixelDesc.cAccumBits = 0;pixelDesc.cAccumRedBits = 0;pixelDesc.cAccumGreenBits = 0;pixelDesc.cAccumBlueBits = 0;pixelDesc.cAccumAlphaBits = 0;pixelDesc.cDepthBits = 0;pixelDesc.cStencilBits = 1;pixelDesc.cAuxBuffers = 0;pixelDesc.iLayerType = PFD_MAIN_PLANE; pixelDesc.bReserved = 0;pixelDesc.dwLayerMask = 0;pixelDesc.dwVisibleMask = 0;pixelDesc.dwDamageMask = 0;PixelFormat = ChoosePixelFormat(hDC,&pixelDesc);if(PixelFormat==0) // Choose default{PixelFormat = 1;if(DescribePixelFormat(hDC,PixelFormat,sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0) {return FALSE;}}if(SetPixelFormat(hDC,PixelFormat,&pixelDesc)==FALSE) {return FALSE;}return TRUE;}BOOL COpenGLDlg::CreateViewGLContext(HDC hDC) {hrenderRC = wglCreateContext(hDC);if(hrenderRC==NULL)return FALSE;if(wglMakeCurrent(hDC,hrenderRC)==FALSE)return FALSE;return TRUE;}void COpenGLDlg::RenderScene(){/////////////////////////////////////////////////glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glLoadIdentity();glTranslatef(0.0f,0.0f,-6.0f); // Move Left 1.5 Units And Into The Screen 6.0 glRotated(m_yRotate, 0.0, 1.0, 0.0);glBegin(GL_TRIANGLES); // Drawing Using TrianglesglVertex3f( 0.0f, 1.0f, 0.0f); // TopglVertex3f(-1.0f,-1.0f, 0.0f); // Bottom LeftglVertex3f( 1.0f,-1.0f, 0.0f); // Bottom RightglEnd(); // Finished Drawing The TriangleSwapBuffers(hrenderDC);}void COpenGLDlg::OnTimer(UINT nIDEvent) //实时绘制场景{// TODO: Add your message handler code here and/or call defaultRenderScene();m_yRotate +=3;CDialog::OnTimer(nIDEvent);}// OpenGLDlg.h : header file//#if !defined(AFX_OPENGLDLG_H__8E962FCE_4DD3_4AE0_BA13_D93DE3FBA4A1__INCLUDE D_)#define AFX_OPENGLDLG_H__8E962FCE_4DD3_4AE0_BA13_D93DE3FBA4A1__INCLUDED_ #if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000/////////////////////////////////////////////////////////////////////////////// COpenGLDlg dialogclass COpenGLDlg : public CDialog{// Constructionpublic:COpenGLDlg(CWnd* pParent = NULL); // standard constructorBOOL SetWindowPixelFormat(HDC hDC); //设定象素格式BOOL CreateViewGLContext(HDC hDC); //View GL Contextvoid RenderScene(); //绘制场景HDC hrenderDC; //DCHGLRC hrenderRC; //RCfloat m_yRotate; //转速int PixelFormat;// Dialog Data//{{AFX_DATA(COpenGLDlg)enum { IDD = IDD_OPENGL_DIALOG };// NOTE: the ClassWizard will add data members here//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(COpenGLDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:HICON m_hIcon;// Generated message map functions//{{AFX_MS G(COpenGLDlg)virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnTimer(UINT nIDEvent);//}}AFX_MS GDECLARE_MESSAGE_MAP()};//{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif// !defined(AFX_OPENGLDLG_H__8E962FCE_4DD3_4AE0_BA13_D93DE3FBA4A1__INCLUDED _)/rwdata/temp/opengl.rarafx_msg void OnTimer(UINT nIDEvent);一、OpenGL简介众所周知,OpenGL原先是Silicon Graphics Incorporated(SGI公司)在他们的图形工作站上开发高质量图像的接口。

MFC-CDockablePane使用心得

MFC-CDockablePane使用心得

MFC-CDockablePane使⽤⼼得m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// BOTTOM(4)第四种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// LEFT// 注意这⾥,将0放在1上⾯m_Panes[0].DockToWindow(&m_Panes[1], CBRS_TOP);(5)第五种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// LEFTCDockablePane* pTabbedBar = NULL;// 放到同⼀个选项卡中,并默认选择1m_Panes[1].AttachToTabWnd(&m_Panes[0], DM_SHOW, TRUE, &pTabbedBar);(6)第六种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[2].Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);m_Panes[2].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// LEFTDockPane(&m_Panes[1]);// LEFTDockPane(&m_Panes[2]);// LEFTm_Panes[0].DockToWindow(&m_Panes[2], CBRS_TOP);CDockablePane* pTabbedBar = NULL;m_Panes[1].AttachToTabWnd(&m_Panes[0], DM_SHOW, TRUE, &pTabbedBar);(7)第七种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// BOTTOMDockPane(&m_Panes[1]);// BOTTOMCDockablePane* pTabbedBar = NULL;m_Panes[0].DockToWindow(&m_Panes[1], CBRS_LEFT);(8)第⼋种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[2].Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[3].Create(_T("Pane 3"), this, CRect(0, 0, 200, 100), TRUE, 1003, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[4].Create(_T("Pane 4"), this, CRect(0, 0, 200, 100), TRUE, 1004, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);m_Panes[2].EnableDocking(CBRS_ALIGN_ANY);m_Panes[3].EnableDocking(CBRS_ALIGN_ANY);m_Panes[4].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// BOTTOMDockPane(&m_Panes[1]);// BOTTOMDockPane(&m_Panes[2]);// LEFTDockPane(&m_Panes[3]);// LEFTDockPane(&m_Panes[4]);// RIGHTCDockablePane* pTabbedBar = NULL;m_Panes[0].DockToWindow(&m_Panes[1], CBRS_LEFT);m_Panes[3].AttachToTabWnd(&m_Panes[2], DM_SHOW, TRUE, &pTabbedBar);(9)第九种情况if (!m_Panes[0].Create(_T("Pane 0"), this, CRect(0, 0, 200, 100), TRUE, 1000, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[1].Create(_T("Pane 1"), this, CRect(0, 0, 200, 100), TRUE, 1001, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_BOTTOM | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[2].Create(_T("Pane 2"), this, CRect(0, 0, 200, 100), TRUE, 1002, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[3].Create(_T("Pane 3"), this, CRect(0, 0, 200, 100), TRUE, 1003, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_LEFT | CBRS_FLOAT_MULTI)){return FALSE;}if (!m_Panes[4].Create(_T("Pane 4"), this, CRect(0, 0, 200, 100), TRUE, 1004, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS |WS_CLIPCHILDREN | CBRS_RIGHT | CBRS_FLOAT_MULTI)){return FALSE;}m_Panes[0].EnableDocking(CBRS_ALIGN_ANY);m_Panes[1].EnableDocking(CBRS_ALIGN_ANY);m_Panes[2].EnableDocking(CBRS_ALIGN_ANY);m_Panes[3].EnableDocking(CBRS_ALIGN_ANY);m_Panes[4].EnableDocking(CBRS_ALIGN_ANY);DockPane(&m_Panes[0]);// BOTTOMDockPane(&m_Panes[1]);// BOTTOMDockPane(&m_Panes[2]);// LEFTDockPane(&m_Panes[3]);// LEFTDockPane(&m_Panes[4]);// RIGHTCDockablePane* pTabbedBar = NULL;m_Panes[1].AttachToTabWnd(&m_Panes[0], DM_SHOW, TRUE, &pTabbedBar); m_Panes[3].AttachToTabWnd(&m_Panes[2], DM_SHOW, TRUE, &pTabbedBar);转⾃:/kikaylee/article/details/8936953。

XXX软件案例分析实验8 基于对话框的录入界面

XXX软件案例分析实验8 基于对话框的录入界面

XXX软件案例分析实验8 基于对话框的录入界面实验报告课程名称:计1201实验名称:基于对话框的录入界面班级:xxxxxxxx0122姓名:XXX、XXX指导教师:实验日期:2015年12月24日一、实验目的1.了解MFC ADO数据库访问技术。

2.熟悉XXX DataGrid控件和XXX ADO Data控件的使用方法。

3.掌握基于对话框的用户界面设计方和数据操作方法。

4.掌握主窗口和子窗口之间的数据访问方法。

二、实验环境系统:Windows 7编程工具:Visual C++ 6.0三、实验要求实现对人事或其它基本信息的增加、编辑、删除、刷新和导出功能。

四、实验步骤与结果1.启动VC++6.0,创建基于对话框的MFCAppWizard(exe)类型的工程,命名为GUIStyle。

2.修改对话框ID为“IDD_GUISTYLE _DIALOG”,标题为“人事基本信息管理”。

3.在菜单栏选择Project—>Add to Project—>XXX命令,打开XXX对话框,打开“Registered ActiveX Controls”文件夹,选择“XXX DataGrid Control 6.0”和“Microsoft ADO Data Control 6.0”插入当前工程。

4.从控件工具栏中选择相应控件,设计主界面,设置ADO Data控件ID为IDC_ADODC,设置DataGrid控件ID为IDC_DATAGRID,其中DataSource属性值为IDC_ADODC,n属性值为空。

5.打开MFC ClassWizard对话框,为GUIStyleDlg类定义DataGrid控件的成员变量CDataGrid m_DataGrid,定义ADOData控件成员变量CAdodc m_Adodc。

为按钮添加消息响应成员函数。

6.加入自定义类CADOConn。

7.在CGUIStyleApp::Instance函数中加入如下代码:if(!AfxOleInit()){AfxMessageBox("XXX.");return FALSE;以上是实验步骤,下面是实验结果的截图。

mfc中富文本框的使用 -回复

mfc中富文本框的使用 -回复

mfc中富文本框的使用-回复MFC中富文本框的使用在MFC(Microsoft Foundation Class)的框架下开发图形用户界面应用程序,富文本框(Rich Edit Control)是常用的控件之一。

富文本框提供了更丰富的文本编辑和显示功能,使得用户可以在应用程序中创建格式化的文本。

本文将一步一步介绍如何在MFC中使用富文本框控件。

第一步:创建MFC项目首先,在Visual Studio中打开“新建项目”对话框,并选择MFC应用程序向导。

按照向导的指示填写项目名称和位置信息,然后点击“完成”创建项目。

第二步:添加富文本框控件打开创建好的MFC项目,双击Resource View中的“Dialog”文件夹,然后双击“IDD_DIALOG1”对话框文件。

在对话框编辑器中,选择工具箱中的“富文本框”控件(即带有大写“A”的图标)。

点击对话框中需要放置富文本框的位置,拖动鼠标绘制出一个适当大小的矩形。

第三步:处理富文本框的消息在对话框编辑器中选中刚刚添加的富文本框控件,右键点击,选择“属性”。

在属性窗口中,找到“ID”属性,并将其更改为适当的值(例如“IDC_RICHEDIT1”)。

回到资源视图,双击“Dialog”文件夹下的“Dialog.cpp”文件,打开对话框的消息处理函数。

找到对话框消息映射函数“BEGIN_MESSAGE_MAP(CDialog1, CDialogEx)”并在其后添加以下代码:ON_EN_CHANGE(IDC_RICHEDIT1,&CDialog1::OnEnChangeRichedit1)在同一个文件中,找到消息处理函数“voidCDialog1::OnEnChangeRichedit1()”并添加以下代码:CString strText;GetDlgItemText(IDC_RICHEDIT1, strText);AfxMessageBox(strText);以上代码将获取富文本框中的文本,并使用消息框(MessageBox)显示出来。

mfc对话框使用

mfc对话框使用

mfc对话框使用
MFC对话框是Windows编程中常用的GUI界面,它提供了一种方便快捷的方式来创建和
管理用户界面。

使用MFC对话框,可以轻松地添加控件、处理事件和响应用户操作。

创建MFC对话框的步骤很简单。

打开Visual Studio并创建一个新的MFC应用程序。

然后,选择“对话框”作为应用程序类型,并选择所需的对话框模板。

接下来,可以在对话框中添
加所需的控件,例如按钮、文本框、列表框等。

可以使用MFC框架提供的事件处理程序
来响应用户操作。

MFC对话框的优点在于它的易用性和灵活性。

通过使用MFC对话框,可以快速创建一个
功能完善的用户界面,同时还可以轻松地对其进行自定义和扩展。

MFC框架还提供了许
多有用的功能,例如自动布局、对话框管理和资源管理等。

MFC对话框是一种非常有用的工具,可以帮助Windows程序员快速创建和管理用户界面。

无论是初学者还是经验丰富的开发人员,都可以从MFC对话框的使用中受益。

mfc dialog 浮动层样式

mfc dialog 浮动层样式

MFC Dialog 浮动层样式一、介绍MFC DialogMFC(Dialog-based的图形用户界面)是Microsoft Foundation Class 的缩写,是Microsoft公司为VC++提供的一套面向对象的类库。

它是构建Windows程序的一种快速容易的方法。

MFC封装了Windows API,并提供各种类供开发者使用,通过MFC可以快速掌握Windows编程。

MFC Dialog是MFC中对话框类的一个重要子类,对话框是Windows界面程序中常用的一种界面,其窗口类型为对话框窗口。

对话框以资源的形式存在于应用程序中,可以使用资源编辑器进行界面设计。

二、MFC Dialog 浮动层样式的介绍1. MFC浮动层MFC对话框中的浮动层样式是指将对话框中的某个控件或者一组控件设置为浮动状态,使其能够以浮动的形式显示在对话框中,而不占用固定的空间。

这种样式的设计主要是为了满足一些特定的用户交互需求,比如在对话框中显示额外的信息或者设置面板,而不影响原有的界面布局。

2. 浮动层样式的应用场景浮动层样式通常用于用户界面设计中,可以用来实现一些弹出式的面板,如设置面板、提示信息面板等。

通过设置浮动层样式,可以在对话框中临时显示这些面板,并且在不需要时可以隐藏,从而提升用户体验。

3. 实现浮动层样式的方法MFC提供了丰富的界面控件和样式设置方法,实现浮动层样式的方法也多种多样。

最常用的方法是通过控件的显示或隐藏属性来实现浮动层的效果,也可以通过控件的位置和大小属性来调整控件在对话框中的布局。

若要实现更加复杂的浮动层效果,还可以通过自定义绘制控件以及处理鼠标事件的方式来实现。

通过这些方法,可以实现不同类型的浮动层效果,以满足不同的用户需求。

三、MFC Dialog 浮动层样式的实际应用1. 配置面板在一些软件设计中,通常会包含一些配置选项,用户可以通过这些选项来个性化自己的使用体验。

而这些配置选项往往需要放在一个独立的面板中,通过浮动层样式,可以实现这个面板的弹出式显示和隐藏,从而更加方便地进行配置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SetIcon(m_hIcon, FALSE); // Set small icon
///////////////////////OPENGL INIT/////////////////////////
CWnd *wnd=GetDlgItem(IDC_RENDER);
hrenderDC=::GetDC(wnd->m_hWnd);
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
BOOL COpenGLDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
SetTimer(1,10,0);
////////////////////////////////////////////////////////////////
// TODO: Add extra initialization here
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application’s main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(COpenGLDlg, CDialog)
//{{AFX_MSG_MAP(COpenGLDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
基于MFC的对话框Dialog的OpenGL程序框架 收藏
建立一个基于对话框的工程(名称:OpenGL)
并且在设置的Link里加入库opengl32.lib glu32.lib glaux.lib
为对话框添加picture control 控件,ID:IDC_RENDER
主要程序:
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
/////////////////////////////////////////////////////////////////////////
glEnableClientState(GL_VERTEX_ARRAY);
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void COpenGLDlg::OnPaint()
: CDialog(COpenGLDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(COpenGLDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
// OpenGLDlg.cpp : implementation file
//
#include "stdafx.h"
#include "OpenGL.h"
#include "OpenGLDlg.h"
#include <gl\gl.h>
#include <gl\glu.h>
return TRUE; // return TRUE unless you set the focus to a control
}
void COpenGLDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
if(SetWindowPixelFormat(hrenderDC)==FALSE)
return 0;
Hale Waihona Puke if(CreateViewGLContext(hrenderDC)==FALSE)
return 0;
glPolygonMode(GL_FRONT,GL_FILL);
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,1,0.1,100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpenGLDlg message handlers
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COpenGLDlg dialog
COpenGLDlg::COpenGLDlg(CWnd* pParent /*=NULL*/)
}
void COpenGLDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(COpenGLDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
glPolygonMode(GL_BACK,GL_FILL);
///////////////////////////////////////////
glEnable(GL_TEXTURE_2D);
相关文档
最新文档