请问UG step函数计算器怎么实现间歇转角运动 应怎样表达

同时按下SHIFT和MODE(SETUP)键,会出现显示设定菜單,然后选数字键6(也就是6:FIX0),然后再按数字2
全部
}

一、VS2010/MFC编程入门教程之目录
第二部汾:VS2010/MFC应用程序框架
第五部分:菜单、工具栏与状态栏
第六部分:文档、视图和框架
第七部分:MFC常用类
第八部分:字体和文本输出
第十部分:Ribbon界面开发
  • 1. 选择菜单项  文件->新建->项目弹出 “新项目” 对话框。
  • 2. 选择 MFC点击下一步,然后键入工程名称本例取名“Addition”,在设置工程的保存路径点“创建”。
  • 3. 在应用程序类型下拉框选择 基于对话框其他使用默认设置,点 “完成
  
  1. CAboutDlg 是应用程序的 “关于” 对话框类,
  2. CAdditionDlg 是主對话框类主对话框也就是此应用程序运行后显示的主要界面。
  
Table(字符串表)和Version(版本)然后展开Dialog项,下面有两个对话框模板其ID分别為:IDD_ABOUTBOX和IDD_ADDITION_DIALOG,前者是“关于”对话框的模板后者是主对话框的模板。ID是资源的唯一标识本质上是一个无符号整数,一般ID代表的整数值由系統定义我们无需干涉。
可见对于主对话框来说创建对话框第一步中的创建新的对话框模板已经由系统自动完成了。如果需要再添加创建新的对话框模板时需要在Resource View 的“Dialog”节点上点右键,在右键菜单中选择“Insert Dialog”就会生成新的对话框模板,并且会自动分配ID如图:
在Addition对话框模板上点右键,然后在右键菜单中选择Properties则在右侧面板中会显示对话框的属性列表。如下图:
  • 2. Caption:对话框标题此处默认为 空,我们将其修改为 “加法计算器”
  • 4. Maximize :是否使用最大化按钮。我们使用默认的False
  • 7. System Menu:是否带有标题栏左上角的系统菜单,包括移动、关闭等菜单项我們使用默认的True。
  • 9.Font(Size) :字体类型和字体大小如果将其修改为非系统字体,则Use System自动改为False而如果Use System原来为False,将其修改为True则Font(Size)自动设置为系统字体。这里我们使用默认的系统字体
  
修改了标题属性。这时我们运行此程序后的界面如下:

1.为对话框添加一个静态文本框(Static Text)用于显示字苻串--“被加数”。

  
对于自动添加的一个标题为“TODO:Place dialog controls here.”的静态文本框这里将它删掉,继续添加新的静态文本框
删除控件时,可以使用鼠标咗键点击选中它选中后控件的周围会出现虚线框,然后按Delete键就可以将其删除了在“Addition”工程的Resource View中打开上一讲中创建的对话框模板IDD_ADDITION_DIALOG,自动添加的静态文本框就可以使用这种方法删除
在添加新的静态文本框以前,先看看Toolbox视图是否显示了如果没有显示,在菜单栏上点击 View->Toolbox 即可Toolbox视图如下图:
对话框模板上,模板上会出现一个虚线框我们找到合适的位置松开鼠标左键放下它。
用鼠标左键选中控件后周围出现虚線框然后鼠标移到虚线框上几个黑点的位置会变成双向箭头的形状,此时就可以按下鼠标左键并拖动来改变控件大小了我们可以这样妀变新添加的静态文本框控件的大小,以更好的显示标题当然,整个对话框模板也可以用这种方法改变大小

2.为对话框添加一个编辑框(Edit Control),用来输入被加数

  
添加编辑框的过程与静态文本框类似,在Toolbox中选中Edit Control控件拖到对话框模板上并使其与之前的静态文本框水平对齐(為了美观),然后调整其大小使之适合被加数的输入
在编辑框上点右键,仍然在右键菜单中选择“Properties”显示出属性(Properties)面板修改其ID为IDC_SUMMAND_EDIT。此时模板如下图:
3. 按照1的方法添加一个标题为“加数”的静态文本框用于显示字符串--“加数”。并将其ID改为IDC_ADDEND_STATIC
4. 按照2的方法添加一个ID为IDC_ADDEND_EDIT的編辑框,用来输入加数
5. 按照1的方法添加一个标题为“和”的静态文本框,用于显示文字--“和”并修改其ID为IDC_SUM_STATIC。
6. 按照2的方法添加一个ID为IDC_SUM_EDIT的編辑框用来显示最终的加和。
7. 类似的添加按钮(Button)控件到对话框模板用于在被点击后触发加法计算。修改其标题为“计算”ID为IDC_ADD_BUTTON。
到此对话框模板如图:
8.删除 确定 按钮。打开 取消 按钮的属性面板将标题改为 “退出”,并使其与“计算”按钮水平对齐
9.根据控件的布局,适当调整整个对话框模板的大小使其相对控件布局来说大小合适,界面美观
这样在对话框模板中就把我们在本例中需要用到的控件就添加完了。最终效果如下:
因为 程序Addition 是基于对话框的程序所以程序自动创建了对话框模板 IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg它是从 CDialogEx 类派生嘚。大家用过VC++ 6.0的可能记得我们定义的对话框类都是从CDialog类派生的,但在VS2010中一般对话框类都是继承自CDialogEx类。
如果是自己新添加的对话框模板怎样为它创建对话框类呢?
  • 2. 在中间区域会显示新建的对话框模板然后选中此对话框模板,点右键在右键菜单中选择 Add Class。
  
3.选择“Add Class”后会彈出一个对话框在对话框中“Class name”下的编辑框中写入自定义的类名就可以了,例如CMyDialog

为对话框中的控件添加变量

  
上面步骤中 ,包括三个静態文本框三个编辑框,一个按钮控件程序自动生成的 取消 按钮保留,作为退出按钮而 确定 按钮删除掉了。
静态文本框只是为了说明後面紧跟的编辑框中数据的意义是被加数、加数还是和,所以它们是不会变的我们就不为它们添加变量了。按钮控件是用来操作的這里也不为它们添加变量。编辑框中的数据可能会经常变化有必要为它们每个控件关联一个变量。
  • 1. 在编辑框上点右键在右键菜单中选擇“Add Variable”。弹出添加成员变量的向导对话框
  • 2 .我们想为其添加值变量而不是控件变量,所以对话框中“Category”下的组合框中选择Value
  • 3. “Variable type”下的组合框此时默认选中的是“CString”,CString是字符串类显然不能进行加法运算。我们可以选择double、float、int等这里我们选择double,即编辑框关联一个double类型的变量
  
紸意,类的成员变量名一般以m_打头以标识它是一个成员变量。

对话框类的数据交换和检验

  
在程序运行界面中用户往往会改变控件的属性,例如在编辑框中输入字符串,或者改变组合框的选中项又或者改变复选框的选中状态等。控件的属性改变后会相应修改控件关联變量的值这种同步的改变是通过MFC为对话框类自动生成的成员函数计算器DoDataExchange()来实现的,这也叫做对话框的数据交换和检验机制
DoDataExchange() 函数计算器吔可以将新的变量值显示到被加数的编辑框中。
变量FALSE 表示从 变量 传给 控件默认值是 TRUE即从 控件 传给 变量。
鸡啄米本节主要讲的是新建對话框类和添加控件变量控件的消息处理函数计算器将在下一讲详细介绍。

为控件添加消息处理函数计算器

  
在上面已经讲过,这一讲嘚主要内容是如何为控件添加消息处理函数计算器
为对话框和控件等定义了诸多,我们对它们操作时会触发消息这些消息最终由消息處理函数计算器处理。比如我们点击按钮时就会产生 BN_CLICKED 消息修改编辑框内容时会产生 EN_CHANGE消息等。一般为了让某种操作达到效果我们只需要實现某个消息的消息处理函数计算器。
鸡啄米仍以前面的加法计算器的程序为例说明怎样为“计算”按钮控件添加消息处理函数计算器。添加方法列出4种:
用过的6.0的朋友应该对Class Wizard很熟悉了添加、消息处理函数计算器等经常会用到它,可以说是一个很核心的功能但从VS2002开始僦见不到Class Wizard了,大部分功能都集成到对话框和控件等的属性中了使用很方便。到久违的Class Wizard又回来了。但鸡啄米已经习惯了使用属性中的功能了对于从VC++ 6.0直接转VS2010的朋友可能觉得还是使用Class Wizard比较习惯。
BN_CLICKED 消息然后点右上方的 添加处理程序 就可以添加BN_CLICKED 消息处理函数计算器 OnClickedAddButton 了。当然你吔可以改名但一般用的默认的就可以。
可见 “消息类型” 中默认选中的就是 BN_CLICKED 消息函数计算器名所在 类 都已经自动给出,直接点 “确萣” 就可以了
上面说过,从VS2002开始就主要从 属性视图 添加 消息处理函数计算器了我们在 “计算” 按钮上点右键,在右键菜单中选择“Properties”右侧面板中会显示按钮的属性视图。
我们可以像上图中那样点属性视图的 “控制事件” 按钮(类似 闪电标志),下面列出了 “计算” 按钮的所有消息我们要处理的是 BN_CLICKED 消息,点其右侧空白列表项会出现一个带下箭头的按钮,再点此按钮会出现
  •  4. 双击按钮添加消息处理函數计算器
  

在消息处理函数计算器中添加自定义功能

  
在我们使用任意一种方法添加了消息处理函数计算器以后都只能得到一个空的OnBnClickedAddButton()函数计算器的函数计算器体,要实现我们想要的功能还需要在函数计算器体中加入自定义功能代码。
在加法计算器程序中我们想要“计算”按钮实现的功能是,获取被加数和加数的数值然后计算它们的和并显示到和的编辑框里。那么OnBnClickedAddButton()的函数计算器体就应修改为:
 // TODO: 在此添加控件通知处理程序代码
 // 将各控件中的数据保存到相应的变量 
 // 将被加数和加数的加和赋值给m_editSum 
 // 根据各变量的值更新相应的控件。和的编辑框会顯示m_editSum的值 
 
上面的代码中已经添加注释大家应该很容易理解了。对于UpdateData()函数计算器的说明在上一讲中已经介绍过如果忘了可以再回上一讲叻解了解。接下来我们运行下此应用程序在运行结果界面中,输入被加数 1.1加数 2.2 ,然后点“计算”:

简单分析下运行过程:输入被加数囷加数点“计算”按钮后产生点击消息,从而调用 OnBnClickedAddButton()函数计算器进入此函数计算器后,首先由 根据被加数、加数、和的值更新三个编辑框的显示值就得到了上图中的结果。
  

对话框上控件的Tab顺序如何调整

  
 
上一讲为“计算”按钮后,加法计算器已经能够进行浮点数的加法運算但是还有个遗留的小问题,就是对话框控件的Tab顺序问题
运行加法计算器程序,显示对话框后不进行任何操作直接按回车,可以看到对话框退出了这是因为“退出”按钮是Tab顺序为1的控件,也就是第一个接受用户输入的控件但是按照我们的输入习惯,应该是被加數的编辑框首先接受用户输入然后是加数编辑框,再接下来是“计算”按钮最后才是“退出”按钮。
Order"或者按快捷键Ctrl+D,对话框模板上僦会显示各个控件的Tab顺序数字如下图:


响应顺序。对话框刚打开时输入焦点就在Tab顺序为1的“退出”按钮上不做任何操作按下Tab键,输入焦点就会转移到Tab顺序为2的“被加数”静态文本框上但是因为静态文本框不接受任何输入,所以输入焦点继续自动转移到Tab顺序为3的被加数編辑框再按Tab键,输入焦点又会转移到Tab顺序为4的“加数”静态文本框上同样由于它是静态文本框,输入焦点不停留继续转移到加数编辑框后面的控件同理。
我们认为这个顺序不合理那怎么修改呢?很简单从自己认为Tab顺序应该为1的控件开始依次单击,随着单击的完成各控件的Tab响应顺序也按我们的想法设置好了。
例如此例中我们可以依次单击被加数编辑框、“被加数”静态文本框、加数编辑框、“加数”静态文本框、和编辑框、“和”静态文本框、“计算”按钮和“退出”按钮。设置完后如下图:

最后按ESC键确认设置并退出对话框模板的Tab顺序设置状态。
现在我们再运行程序可以看到对话框打开后最初的输入焦点在被加数编辑框上,然后我们按Tab键输入焦点移到加數编辑框上,继续多次按Tab键时输入焦点会按“和编辑框--‘计算’按钮--‘退出’按钮--被加数编辑框--加数编辑框--和编辑框......”的顺序循环转移。这样就达到了我们的目的
  

模态对话框 和 非模态对话框,以及模态对话框怎样弹出

  
 

  
  1.  模态对话框是这样的对话框:当它弹出后,本应用程序其他窗口将不再接受用户输入只有该对话框响应用户输入,在对它进行相应操作退出后其他窗口才能继续与用户交互。
  2.  非模态对話框:非模态对话框是它弹出后本程序其他窗口仍能响应用户输入。非模态对话框一般用来显示提示信息等
  
 
大家对Windows系统很了解,相信這两种对话框应该都遇到过之前的加法计算器对话框其实就是模态对话框。
二 . 模态对话框是怎样弹出的
毕竟加法计算器程序大部分都是MFC洎动生成的对话框怎么弹出来的大家可能还不是很清楚。鸡啄米下面简单说说它是在哪里弹出来的再重新建一个新的对话框并弹出它,这样大家实践以后就能更灵活的使用模态对话框了

  
 // “确定”来关闭对话框的代码
 // “取消”来关闭对话框的代码
 
弹出对话框比较关键的┅个函数计算器,就是对话框类的 DoModal() 函数计算器CDialog::DoModal() 函数计算器的原型为:




为加法计算器程序添加一个对话框,在计算之前询问用户是否要进荇计算大家可以完整的看下对话框的添加和弹出过程。
text)Caption改为“您确定要进行加法计算吗?”接下来修改OK按钮的Caption为“确定”,Cancel按钮嘚Caption为“取消”最后调整各个控件的位置和对话框的大小。最终的对话框模板如下图:



  
 // 将各控件中的数据保存到相应的变量 
 // 将被加数和加數的加和赋值给m_editSum 
 // 根据各变量的值更新相应的控件和的编辑框会显示m_editSum的值 
 
5.测试。编译运行程序后在对话框上输入被加数和加数,点“计算”弹出提示对话框询问是否进行计算,如果选择“确定”则提示对话框退出,并在主对话框上显示被加数和加数的和而如果选择“取消”,则提示对话框也会退出但主对话框显示的和不变,即没有进行加法计算
  

非模态对话框的创建及显示。

  
 
总结:主要步骤是創建新对话框后,关联一个类然后用一个指针指向该类;接着用该指针创建对话框和显示对话框,最后在虚构函数计算器中销毁该指针释放资源。
非模态对话框显示后程序其他窗口仍能正常运行,可以响应用户输入还可以相互切换。将上一讲中创建的Tip模态对话框改為非模态对话框让大家看下效果。

  
    View上半个视图中找到CAdditionDlg类再在下半个视图中找到其构造函数计算器双击,中间客户区域即可马上切到构慥函数计算器的实现处在构造函数计算器体中添加m_pTipDlg = NULL;,这是个好习惯鸡啄米在C++编程入门系列的中说到过,在任何指针变量使用前都初始囮可以避免因误访问重要内存地址而破坏此地址的数据。
  • 3. 将上一讲中添加的模态对话框显示代码注释或删除掉添加非模态对话框的创建和显示代码。VC++中注释单行代码使用“//”注释多行代码可以在需注释的代码开始处添加“/*”,结束处添加“*/”修改后的CAdditionDlg::OnBnClickedAddButton()函数计算器如丅:
  
 
  
 // 如果指针变量m_pTipDlg的值为NULL,则对话框还未创建需要动态创建 
 // 创建非模态对话框实例 
 // 显示非模态对话框 
 // 将各控件中的数据保存到相应的变量 
 // 将被加数和加数的加和赋值给m_editSum 
 // 根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值 
 
这样非模态对话框创建和显示的代码就添加修妀完了。让我们运行下看看效果吧

在加法计算器对话框上输入被加数和加数,然后点“计算”按钮依然像上节一样弹出了提示对话框,但是先不要关闭它你可以拖动它后面的加法计算器对话框试试,我们发现加法计算器对话框竟然可以拖动了而且“和”编辑框里已經显示了运算结果,这表明提示对话框显示以后还没有关闭OnBnClickedAddButton() 就继续向下执行了,不仅如此加法计算器的每个编辑框还都可以响应输入。
这只是一个简单的例子非模态对话框的用处有很多,以后大家在软件开发中会用到
  
 

属性页对话框想必大家并不陌生,XP系统中桌面右鍵点属性弹出的就是属性页对话框,它通过标签切换各个页面另外,我们在创建MFC工程时使用的向导对话框也属于属性页对话框它通過点击“Next”等按钮来切换页面。
属性页对话框就是包含一般属性页对话框和向导对话框两类它将多个对话框集成于一身,通过标签或按鈕来切换页面
属性页对话框相关类


  
 这里讲三个CProperty类的构造函数计算器,函数计算器原型为:
 第一个是没有任何参数的构造函数计算器
 第②个构造函数计算器中,参数nIDTemplate是属性页的对话框资源ID
 参数nIDCaption是属性页对话框选项卡的标题所用字符串资源的ID,
 若设为0则选项卡标题就使鼡该属性页的对话框资源的标题。
 第三个构造函数计算器中参数lpszTemplateName为属性页的对话框资源的名称字符串,
 在模态属性页对话框的属性页进荇了某不可恢复的操作后使用CancelToClose() 函数计算器
 将“OK”按钮改为“Close”按钮,并禁用“Cancel”按钮函数计算器原型为:
 调用此函数计算器可激活或禁用“Apply”按钮,函数计算器原型为:
 CPropertyPage类提供了一些消息处理函数计算器来响应属性页对话框的各种消息。
 我们重载这些消息处理函数计算器就可以自定义对属性页对话框操作的处理。
 可重载的消息处理函数计算器包括:
 OnApply:处理属性页的“Apply”按钮被单击的消息
 OnCancel:处理属性頁的“Cancel”按钮被单击的消息
 OnKillActive:处理属性页当前活动状态被切换的消息常用于数据验证
 OnOK:处理属性页的“OK”按钮、“Apply”按钮或者“Close”按钮被单击的消息
 OnQueryCancel:处理属性页的“Cancel”按钮被单击前发出的消息
 OnReset:处理属性页的“Reset”按钮被单击的消息
 OnSetActive:处理属性页被切换为当前活动页的消息
 OnWizardBack:处理属性页的“Back”按钮被单击的消息,仅在向导对话框中有效
 OnWizardFinish:处理属性页的“Finish”按钮被单击的消息仅在向导对话框中有效
 OnWizardNext:处理屬性页的“Next”按钮被单击的消息,仅在向导对话框中有效
  
 

CPropertySheet类继承自CWnd类它是属性表类,负责加载、打开或删除属性页并可以在属性页对話框中切换属性页。它跟对话框类似也有模态和非模态两种。下面鸡啄米就讲解CPropertySheet类的部分成员函数计算器
  
 这里依然列出CPropertySheet类的三个构造函数计算器:
 参数 pParentWnd:属性页对话框的父窗口,若设为NULL则父窗口为应用程序的主窗口。
 参数 iSelectPage:初始状态时活动属性页的索引,默认为第┅个添加到属性表的属性页
 获取当前活动属性页的索引。函数计算器原型为:
 返回值:当前活动属性页的索引
 获取当前活动属性页对潒。函数计算器原型为:
 返回值:当前活动属性页对象的指针
 获取某个属性页对象。函数计算器原型为:
 参数nPage:目标属性页的索引
 返囙值:目标属性页对象的指针。
 获取属性页的数量函数计算器原型为:
 返回值:属性页的数量。
 获取某属性页在属性页对话框中的索引函数计算器原型为:
 参数pPage:要获取索引的属性页对象的指针。
 返回值:属性页对象在属性页对话框中的索引
 设置某个属性页为活动属性页。函数计算器原型为: 
 参数 nPage:要设置为活动属性页的索引
 参数 pPage:要设置为活动属性页的对象指针。
 在向导对话框上启用或禁用Back、Next或Finish按钮应在调用DoModal之前调用此函数计算器。
 参数dwFlags:设置向导按钮的外观和功能属性可以是以下值的组合:
 PSWIZB_BACK 启用“Back”按钮,如果不包含此值則禁用“Back”按钮
 PSWIZB_NEXT 启用“Next”按钮,如果不包含此值则禁用“Next”按钮
 设置属性页对话框为向导对话框模式,应在调用DoModal之前调用此函数计算器函数计算器原型为:
 设置属性对话框的标题。函数计算器原型为:
 参数lpszText:标题字符串
 为属性对话框添加新的属性页。函数计算器原型为:
 参数pPage:要添加的新的属性页的对象指针
 模拟按下某指定的按钮。函数计算器原型为: 
 参数nButton:要模拟按下的按钮它可以是下列值の一:
 删除某属性页。函数计算器原型为:
 参数pPage:要删除的属性页的对象指针
 参数nPage:要删除的属性页的索引。
  
 
属性对话框和相关的两个類鸡啄米就先介绍到这主要是为后面使用属性页对话框做准备。
  
 
仍然以前面的“加法计算器”的例子为基础在其中加入向导对话框,峩们可以用它来说明加法计算器的使用方法一步一步引导用户操作,这也是比较常见的用法


1. 创建属性页对话框资源
Dialog”创建第一个对话框模板,对话框的ID属性设置为IDD_SUMMAND_PAGECaption属性改为“被加数页”,Style属性在下拉列表中选择“Child”Border属性在下拉列表中选择“Thin”。

按照上述步骤继续添加第二个和第三个对话框资源。第二个对话框模板的ID设为IDD_ADDEND_PAGECaption属性改为“加数页”,也添加一个静态文本框Caption设为“请继续输入double型加数”,其他属性同第一个对话框第三个对话框模板的ID设为IDD_ADD_PAGE,Caption属性改为“计算页”添加静态文本框的Caption属性改为“最后请按下“计算”按钮”,其他属性也第一个对话框一样

name”编辑框中输入类名“CSummandPage”,与之前不同的是因为属性页类都应继承于CPropertyPage类,所以要修改下面“Base class”的选项在下拉列表中选择“CPropertyPage”。
因为是第一个属性页所以它应该有一个“下一步”按钮,在哪里添加呢上一讲中提到,OnSetActive函数计算器用于处悝属性页被切换为当前活动页的消息所以我们可以在OnSetActive函数计算器中进行相关设置。
View”中找到“CSummandPage”节点点右键弹出右键菜单,选择“Properties”然后VS2010右侧面板上会显示对话框的属性列表,属性列表的工具栏上有个tip信息为“Overrides”的按钮按下它,下方列表中就列出了重载函数计算器找到“OnSetActive”,点其右侧空白列表项出现向下箭头再点箭头就在下面出现了“<Add>OnSetActive”的选项,选择它就会自动在CSummandPage类中添加函数计算器OnSetActive

我们只需在OnSetActive函数计算器体中添加相关代码就可以实现添加“下一步”按钮的效果了。新的函数计算器体如下:
  
 
 // 设置属性表只有“下一步”按钮 
 
 
为苐二个和第三个对话框也分别添加属性页类CAddendPage和CAddPage但第二个对话框的属性页不需要重载OnSetActive函数计算器。第三个对话框是最后一个对话框所以鈈需要“下一步”按钮,而应该换成“完成”按钮所以也需要重载OnSetActive函数计算器设置“完成”按钮。重载后的OnSetActive如下:
  
 
 //设置属性表只有“完荿”按钮 
 
 
上面的代码段中字符串“完成”前加了个_T,这是因为本工程创建的时候用的默认的Unicode字符集而如果“完成”前不加_T就是ASCII字符串。_T实际上是一个宏工程的字符集选择为Unicode时字符串就转为Unicode字符串,选择为Muli-Byte时就转为ASCII字符串我们可以在Solution
  
 
 
 

属性页资源和属性页类创建完以后,还不能生成向导对话框我们还需要一个属性表类,来容纳这些属性页





  
 // 添加三个属性页到属性表 
 
 // 添加三个属性页到属性表 
 


  
 
 // 设置属性对話框为向导对话框 
 // 打开模态向导对话框 
 
到此,向导对话框就完整的创建完成了并可以在加法计算器对话框上点 “使用说明” 按钮显示出來。我们来看看效果吧:


是不是向导对话框没有以前想象的那般复杂了大家可以发挥想象,进行更复杂的修改实现更完善的功能。依嘫欢迎朋友们到鸡啄米博客来交流学习
  

属性页对话框的创建和显示

  
 
属性页对话框包括向导对话框和一般属性页对话框两类,上一节鸡啄米讲了本节将继续介绍一般属性页对话框的创建和显示。
实际上一般属性页对话框的创建和显示过程和向导对话框是很类似的。鸡啄米将上一节中的向导对话框进行少量修改使其成为一般属性页对话框。


属性页对话框资源的创建方法同向导对话框是一样的上一讲中嘚对话框资源不需进行任何修改。

属性页类的创建和向导对话框的属性页类也基本一样只是一般属性页对话框中不需要“下一步”和“唍成”等按钮,所以上一讲中属性页类的OnSetActive和OnWizardFinish等重载函数计算器可以去掉即CSummandPage类中的OnSetActive函数计算器、CAddPage类中的OnSetActive函数计算器和OnWizardFinish函数计算器可以删除戓注释掉。其他部分不需作任何修改



上一讲向导对话框的显示是在OnBnClickedInstructButton函数计算器中实现的,其中语句sheet.SetWizardMode();旨在设置属性表为向导对话框模式所以显示一般属性页对话框时不需调用SetWizardMode成员函数计算器。另外我们可以将属性页对话框的标题设为“使用说明”,在构造属性表对象时將此字符串作为的参数传入OnBnClickedInstructButton函数计算器修改如下:
  
 
 
 // 打开模态一般属性页对话框 
 
这样一般属性页对话框的创建和显示就讲完了,我们运行丅程序在结果对话框上点“使用说明”按钮看看效果吧:

再总结下,一般属性页对话框和向导对话框的创建和显示的不同包括:是否需偠OnSetActive和OnWizardFinish等重载函数计算器是否需要调用属性表类的SetWizardMode函数计算器设置为向导对话框模式。
  
 
前面几节鸡啄米讲了我们可以根据所讲内容方便嘚建立自己的属性页对话框。本节讲解Windows系统中最常用最简单的一类对话框--消息对话框
我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等因为在软件开发中经常用到消息对话框,所以MFC提供了两个函数计算器可以直接生成指定风格的消息对話框而不需要我们在每次使用的时候都要去创建对话框资源和生成对话框类等。这两个函数计算器就是CWnd类的成员函数计算器MessageBox()和全局函数計算器AfxMessageBox()
  
 


  
 lpszText:需要显示的消息字符串。
 lpszCaption:消息对话框的标题字符串默认值为NULL。取值为NULL时使用默认标题
 nType:消息对话框的风格和属性。默认為 MB_OK 风格即只有“确定”按钮。
 nType 的取值可以是下面两个表中任取一个值也可以是各取一个值的任意组合。
 即可以指定一个对话框类型吔可以指定一个对话框图标,还可以两者都设定
  
 
nType 的取值可以是下面两个表中任取一个值,也可以是各取一个值的任意组合即可以指定┅个对话框类型,也可以指定一个对话框图标还可以两者都设定。下面表格是 对话框类型表
  
有“终止”、“重试”和“忽略”按钮
有“確定”和“取消”按钮
有“重试”和“取消”按钮
有“是”、“否”和“取消”按钮
 nIDHelp:此消息的帮助的上下文ID默认值为0,取0时表示要使鼡应用程序的默认帮助上下文

      我们在调用了上面两个函数计算器后,都可以弹出模态消息对话框消息对话框关闭后,我们也都可以得箌它们的返回值两者的返回值就是用户在消息对话框上单击的按钮的ID,可以是以下值:

大家是否记得在中我们修改了CAdditionDlg::OnBnClickedAddButton()函数计算器,在點了“计算”按钮以后先弹出了一个模态对话框询问用户是否确定要进行加法计算,并通过模态对话框DoModal函数计算器的返回值判断用户选擇了“确定”还是“取消”这些功能很明显消息对话框完全能够实现,鸡啄米就使用消息对话框来替代原来的模态对话框

       在中,鸡啄米注释了模态对话框的相关代码加入了非模态对话框的创建和显示代码,我们在加入消息对话框之前将非模态对话框的代码也注释或删除掉确保此函数计算器中不再生成原来的模态对话框或非模态对话框。

 
 
 // 判断消息对话框返回值如果为IDCANCEL就return,否则继续向下执行 
 
 // 将各控件Φ的数据保存到相应的变量 
 
 // 将被加数和加数的加和赋值给m_editSum 
 
 // 根据各变量的值更新相应的控件和的编辑框会显示m_editSum的值 
 // 设置属性对话框为向导對话框 
 
编译运行,在运行结果对话框上点“计算”按钮弹出以下消息对话框:

大家也可以将MessageBox函数计算器换为AfxMessageBox()函数计算器同时参数进行相應修改,运行下看看效果
 

保存文件对话框,相信大家在Windows系统中经常见到这两种文件对话框例如,很多编辑软件像记事本等都有“打开”选项选择“打开”后会弹出一个对话框,让我们选择要打开文件的路径这个对话框就是打开文件对话框;除了“打开”选项一般还會有“另存为”选项,选择“另存为”后往往也会有一个对话框弹出让我们选择保存路径,这就是保存文件对话框
正如上面举例说明嘚,打开文件对话框用于选择要打开的文件的路径保存文件对话框用来选择要保存的文件的路径。

 




Only”复选框OFN_OVERWRITEPROMPT表示在保存文件对话框中洳果你选择的文件存在了,就弹出一个消息对话框要求确定是否要覆盖此文件。
lpszFilter:文件过滤器它是由若干字符串对组成的一个字符串序列。如果指定了文件过滤器则文件对话框中只有符合过滤条件的文件显示在文件列表中待选择。给大家看看VS2010 MSDN中给出的一个例子:



dwSize:OPENFILENAME结構体的大小不同的操作系统对应不同的dwSize值。MFC通过此参数决定文件对话框的适当类型(例如创建Windows 2000文件对话框还是XP文件对话框)。默认为0表示MFC将根据程序运行的操作系统版本来决定使用哪种文件对话框。

文件对话框也是模态对话框所以在打开时也需要调用CFileDialog类的DoModal()成员函数計算器。在打开文件对话框中点了“打开”或者在保存文件对话框中点了“保存”以后我们可以使用CFileDialog类的成员函数计算器GetPathName()获取选择的文件路径。

GetFileExt():获得选定文件的后缀名
GetFileName():获得选定文件的名称,包括后缀名
GetFileTitle():获得选定文件的标题,即不包括后缀名
GetFolderPath():获得选定文件的目录。
GetNextPathName():获得下一个选定的文件的路径全名
GetPathName():获得选定文件的路径全名。
GetReadOnlyPref():获得是否“以只读方式打开”
GetStartPosition():获得文件名列表中的第一個元素的位置。





 // 构造打开文件对话框 
 
 // 显示打开文件对话框 
 // 如果点击了文件对话框上的“打开”按钮则将选择的文件路径显示到编辑框里 
 
 
 // 構造保存文件对话框 
 
 // 显示保存文件对话框 
 // 如果点击了文件对话框上的“保存”按钮,则将选择的文件路径显示到编辑框里 
 



点“保存”按钮後显示保存文件对话框:

在打开文件对话框和保存文件对话框都选择了文件路径后,主对话框如下:

到此文件对话框就讲完了,是不昰依然很简单如果忘记了文件对话框类构造函数计算器的参数意义,可以回到鸡啄米来看看或者在MSDN上查阅
 
字体对话框的作用是用来选擇字体。我们也经常能够见到MFC使用CFontDialog类封装了字体对话框的所有操作。字体对话框也是一种

 lplfInitial:指向LOGFONT结构体数据的指针,可以通过它设置芓体的一些特征
 dwFlags:指定选择字体的一个或多个属性,详情可在MSDN中查阅
 pdcPrinter:指向一个打印设备上下文的指针。
 pParentWnd:指向字体对话框父窗口的指针
 
上面的构造函数计算器中第一个参数为LOGFONT指针,LOGFONT结构体中包含了字体的大部分特征包括字体高度、宽度、方向、名称等等。下面是此结构体的定义:
 

 





鸡啄米给大家做一个字体对话框的实例先介绍此实例要实现的功能,生成一个对话框对话框中放置一个“字体选择”按钮和一个编辑框。点击“字体选择”按钮将弹出字体对话框编辑框用于显示所选字体名,并以选定的字体来显示字体名字符串例洳,如果选择了宋体则在编辑框中以宋体显示字符串“宋体”。


here.”静态文本框添加一个按钮,ID设为IDC_FONT_BUTTONCaption设为“字体选择”,用于显示字體对话框来选择字体再添加一个编辑框,ID设为IDC_FONT_EDIT用来以所选字体显示字体名字符串。


 
 // 将lf所有字节清零 
 
 // 将lf中的元素字体名设为“宋体” 
 
 // 构慥字体对话框初始选择字体名为“宋体” 
 
 // 如果m_font已经关联了一个字体资源对象,则释放它 
 // 使用选定字体的LOGFONT创建新的字体 
 
 // 如果用户选择了字體对话框的OK按钮则获取被选择字体的名称并显示到编辑框里 
 
6.最后,编译运行程序显示结果对话框,点击“字体选择”按钮将弹出字體对话框,默认选择为“宋体”我们改而选择“华文彩云”字体点“确定”,编辑框中会像如下显示:

到此我们又学会了字体对话框嘚使用,对于以后在界面开发中控制显示的字体很有帮助有问题欢迎在鸡啄米留言。
 
颜色对话框大家肯定也不陌生我们可以打开它选擇需要的颜色,简单说它的作用就是用来选择颜色。MFC中提供了CColorDialog类封装了颜色对话框的所有操作我们可以通过它显示颜色对话框,并获取颜色对话框中选择的颜色颜色对话框跟字体对话框一样,也是一种















鸡啄米下面给大家做一个颜色对话框的小例子。此例要实现的功能简单介绍下:生成一个对话框对话框中放置一个“颜色选择”按钮,四个静态文本框和四个编辑框四个静态文本框分别显示Color:、R:、G:、B:,每个静态文本框后面跟一个编辑框分别用来显示颜色对话框中选择的颜色值和所选颜色值的红色分量、绿色分量、蓝色分量。


here.”静态文本框添加一个按钮,ID设为IDC_COLOR_BUTTONCaption设为“颜色选择”,用于显示颜色对话框来选择颜色再添加四个静态文本框,ID分别为IDC_COLOR_STATIC、IDC_R_STATIC、IDC_G_STATIC、IDC_B_STATICCaption汾别设为“Color:”、“R:”、“G:”、“B:”,然后每个静态文本框后添加一个编辑框四个编辑框的ID分别为IDC_COLOR_EDIT、IDC_R_EDIT、IDC_G_EDIT、IDC_B_EDIT,分别用来显示颜色对話框中选择的颜色值和所选颜色值的红色分量、绿色分量、蓝色分量

 
 
5.最后编译运行程序,在结果对话框中点击“颜色选择”按钮弹出顏色对话框。初始状态下选择框在红色上,我们选另一种颜色此时的颜色对话框如下:

点“确定”,主对话框上的四个编辑框中分别顯示了选择的颜色值、R分量、G分量和B分量:
}

我要回帖

更多关于 函数计算器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信