MFC学习 -- 手写菜单,选项对话框的创建

手写菜单

在MFC项目中存在这样一个文件,叫MainFrm.cpp,此文件是描述当前菜单的整体框架文件,所以我们要在此文件中编写菜单代码,首先通过CMenu类定义一个菜单对象,之后使用菜单类中的CreateMenu函数来创建菜单,具体编码如下:
在这里插入图片描述
之后我们需要在此菜单中添加这么几个子项,分别是画线,画矩形,画椭圆以及画笔。这里就要用到AppendMenu()函数,该函数中需要这四个子项的ID,那么我们就通过enum枚举方法来定义,具体代码如下:
在这里插入图片描述
这里WM_USER是定义的宏,定义好ID后就可以调用函数将子项添加进来,具体如下:
在这里插入图片描述
添加好之后我们需要将创建好的菜单加入到菜单栏中,代码如下图所示:
在这里插入图片描述
这里注意我们是在OnCreate函数中定义的临时变量menu,所以当函数运行结束之后此临时变量就会被消除,所以此时我们需要将menu变量进行分离,也就是detach()函数,具体如下图所示:
在这里插入图片描述
最后我们只需要找到下图的代码,将所有的ID全部换成我们之前定义好的ID,也就是ID_MSG_DRAW_LINE等,具体如下图所示:
在这里插入图片描述
之后就可以实现手写菜单的功能了,运行图如下:
在这里插入图片描述

选项对话框

选项对话框的创建

首先在资源视图中的菜单栏里添加选项,结果如下图所示:
在这里插入图片描述
之后需要创建一个对话框资源,这个对话框资源是点击选项之后弹出来的,将此资源添加到资源视图里的Dialog中,具体如下图:
在这里插入图片描述
之后将对话框的描述文字以及ID名字修改成我们自己的即可,如下图:
在这里插入图片描述

选项对话框中滑块的创建

首先我们要在工具栏中找到滑块组件,将此滑块组件拖到上面创建好的对话框中,并且对滑块中的一些属性进行设置,具体如下图:
在这里插入图片描述
这是滑块组件就创建好了,那么我们如何从滑块中获取到用户设置的值呢?首先我们要为对话框中添加一个类,我们也就是通过该类获取用户设置的值,具体如下:
在这里插入图片描述
之后我们就可以为滑块这个控件添加一个控制变量,用来记录用户当前需要的画笔的宽度,具体如下图:
在这里插入图片描述
然后我们在Setup.cpp文件中初始化滑块这个控件,具体代码如下:
在这里插入图片描述
初始化好之后,我们需要重写DoDataExchange函数,此函数是将控件中得到的数据转换到绑定的变量中,以便于使用,具体代码如下:
在这里插入图片描述
最终我们编写选项的事件处理函数即可,也就是先定义一个Setup类,并通过绑定的变量获取到各个组件的数据,具体代码如下:
在这里插入图片描述
运行后截图如下:
在这里插入图片描述
调节完滑块之后我们就可以看到,画线变粗了,截图如下:
在这里插入图片描述

选项对话框中画线类型的选择

首先和上面一样,我们先在对话框中添加画线的几种类型分别是:画实线,画虚线,画点线等。
在这里插入图片描述
之后的步骤就和前面创建滑块时一样了,直接通过类向导将该组件绑定一个变量,如下图:
在这里插入图片描述
后面的步骤就基本和滑块操作一致了,我们只需要在view文件中也创建一个该变量,然后刚开始用view文件中的变量初始化Setup对象中的变量,之后获取到变量后,再使用Setup对象中的变量赋值view文件中的变量最后将之前所有的画笔类型全部改成该变量即可,具体操作如下图:
在这里插入图片描述
在这里插入图片描述
最终运行截图如下:
在这里插入图片描述

选项对话框中画笔颜色的选择

首先在选项对话框中添加颜色组件,该组件类型时button类型,具体如下图:
在这里插入图片描述
添加成功之后我们需要对该按钮设置事件处理函数,在该函数中我们需要将用户选中的颜色返回给Setup类中,这里就要介绍一下CColorDialog类,通过此类中的rgbResult获取用户选中的颜色,具体操作如下图:
在这里插入图片描述
之后在view文件中进行修改即可得到颜色切换操作,具体如下:
在这里插入图片描述
在这里插入图片描述

选项对话框中示例的展示

首先在对话框中添加示例的组件,这里示例的组件是group box,具体如下图:
在这里插入图片描述
之后我们就需要在类向导中添加一个消息函数OnPaint()函数,此函数可以在指定位置画图,这里我们就要使用它在示例的位置画一条线,具体操作如下图:
在这里插入图片描述
画好之后所呈现出来的就是下面这种情况:
在这里插入图片描述
最后我们想要实现的是每当我选中不同的线宽不同的线类型,下面的示例都可以显示出不同的线,这里我们就要为实心线,虚线,点线这几个按钮添加对应的处理函数了,这里的处理函数内容只需要调用Invalidate()函数,此函数就是将当前窗口取消,重新进行绘画,这样我们就可以根据不同情况来分别进行绘画,当然颜色的处理函数中也需要调用Invalidate()函数最终我们需要创建一个消息函数OnHScroll()函数,此函数是用来控制滑块的,函数中也只需调用上面的函数即可,具体代码如下图所示:
在这里插入图片描述
在这里插入图片描述
这样就可以实现出一个随着不同情况而不断变化的示例了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值