首先使用快速新建项目 搭建模板框架 :

参数设置如下:

点击生成,生成该解决方案

然后将DMMain文件夹导入到该文件当中

用CMAKE进行构建项目

编译完点击Generate即可 使用VisualStudio打开解决方案

这边推荐VisualStudio2019或者2017打开 因为代码风格更好看

然后会弹出这个界面 均选择无升级就ok

然后生成解决方案即可

ok

接下来就到比较有意思的环节  就是做界面

这里本人推荐使用Designer设计器 虽然设计器真的难用 但是所见即所得的思想很重要

打开设计器工具 DM Designer  ---》新建

项目名称写MyRes即可  主要原因是因为代码默认查找这个名字---也可以改成其他就是了

然后界面设计如下:简单的界面设计

用到的工具是Button,Combox,Edit;

然后就是逻辑设计的这部分了

我把主要的头文件和cpp文件给大家展示一下 供大家研读,解释起来不难,但是费劲

显示MainWnd.h文件

#include <Widgets\DUIComboBox.h>
#include <Widgets\DUIButton.h>
#pragma once  class CMainWnd : public DMHWnd
{
public://消息映射宏(必加)DECLARE_MESSAGE_MAP()                       // 仿MFC消息映射宏,也可以使用BEGIN_MSG_MAPT宏使消息处理在头文件DECLARE_EVENT_MAP()                            // 事件分发映射宏,也可以使用BEGIN_EVENT_MAPT宏使事件处理在头文件CMainWnd(); //构造函数~CMainWnd(); //析构函数:释放内存//---------------------------------------------------// Function Des: 消息分发系列函数//---------------------------------------------------BOOL OnInitDialog(HWND wndFocus, LPARAM lInitParam);void OnSize(UINT nType, CSize size);void OnComboxInit(); //初始化Combox: 添加加减乘除四个功能模块//---------------------------------------------------// Function Des: 事件分发系列函数//---------------------------------------------------DMCode OnClose();DMCode OnMaximize();DMCode OnRestore();DMCode OnMinimize();DMCode OnCalculate();public://控件类:DUIEdit* m_pParam1Edit; //输入参数1DUIEdit* m_pParam2Edit; //输入参数2DUIEdit* m_pResultEdit; //求出结果DUIComboBox* m_pCombox; //组合框 用于计算方式+/-/*//等;DUIButton* m_pCalculateButton; //计算求和按钮};

然后是对应的cpp文件

#include "StdAfx.h"
#include "MainWnd.h"//消息机制
BEGIN_MSG_MAP(CMainWnd)MSG_WM_INITDIALOG(OnInitDialog)MSG_WM_SIZE(OnSize)CHAIN_MSG_MAP(DMHWnd)// 将未处理的消息交由DMHWnd处理
END_MSG_MAP()
BEGIN_EVENT_MAP(CMainWnd)EVENT_NAME_COMMAND(L"closebutton",OnClose)EVENT_NAME_COMMAND(L"maxbutton",OnMaximize)EVENT_NAME_COMMAND(L"restorebutton",OnRestore)EVENT_NAME_COMMAND(L"minbutton", OnMinimize)EVENT_NAME_COMMAND(L"btn_Result", OnCalculate) //类似于信号与槽
END_EVENT_MAP()CMainWnd::CMainWnd()
{//初始化相关指针m_pCalculateButton = NULL;m_pCombox = NULL;m_pParam1Edit = NULL;m_pParam2Edit = NULL;m_pResultEdit = NULL;
}//释放内存
CMainWnd::~CMainWnd()
{delete m_pCalculateButton;delete m_pCombox;delete m_pParam1Edit;delete m_pParam2Edit;delete m_pResultEdit;
}BOOL CMainWnd::OnInitDialog(HWND wndFocus, LPARAM lInitParam)
{//得到对应指针地址:原理 根据唯一的Name值m_pParam1Edit = FindChildByNameT<DUIEdit>(L"txt_Param1"); DMASSERT(m_pParam1Edit);m_pParam2Edit = FindChildByNameT<DUIEdit>(L"txt_Param2"); DMASSERT(m_pParam2Edit);m_pCombox = FindChildByNameT<DUIComboBox>(L"combox_Method"); DMASSERT(m_pCombox);m_pResultEdit = FindChildByNameT<DUIEdit>(L"txt_Result"); DMASSERT(m_pResultEdit);m_pCalculateButton = FindChildByNameT<DUIButton>(L"btn_Result"); DMASSERT(m_pCalculateButton);//OnComboxInit();return TRUE;
}void CMainWnd::OnComboxInit()
{
}void CMainWnd::OnSize(UINT nType, CSize size)
{DUIWindow* pMaxBtn = FindChildByName(L"maxbutton");DUIWindow* pRestoreBtn = FindChildByName(L"restorebutton");if (0 != size.cx&&0 != size.cy&&pMaxBtn&&pRestoreBtn){if (SIZE_MAXIMIZED == nType){pMaxBtn->DM_SetVisible(false);pRestoreBtn->DM_SetVisible(true);}else if (SIZE_RESTORED == nType){pMaxBtn->DM_SetVisible(true);pRestoreBtn->DM_SetVisible(false);}}SetMsgHandled(FALSE);  // 由DMHWnd继续处理OnSize消息
}DMCode CMainWnd::OnClose()
{DestroyWindow(); return DM_ECODE_OK;
}DMCode CMainWnd::OnMaximize()
{SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE);return DM_ECODE_OK;
}DMCode CMainWnd::OnRestore()
{SendMessage(WM_SYSCOMMAND,SC_RESTORE);return DM_ECODE_OK;
}DMCode CMainWnd::OnMinimize()
{SendMessage(WM_SYSCOMMAND,SC_MINIMIZE);return DM_ECODE_OK;
}//计算结果
DMCode CMainWnd::OnCalculate()
{CStringW param1, param2, txt_Res;double param1_val, param2_val, result_val;param1 = m_pParam1Edit->GetWindowTextW();param2 = m_pParam2Edit->GetWindowTextW();//判断是否为空if (param1.IsEmpty()|| param2.IsEmpty()){return DM_ECODE_OK; //返回结果}//将其转成Double格式param1_val = _ttof(param1); //将其转成double格式param2_val = _ttof(param2); //将其转成double格式int curItemValue = m_pCombox->GetCurSel();//0:+; 1:-; 2: * ; 3:/;switch (curItemValue){case 0: result_val = param1_val + param2_val; break;case 1:   result_val = param1_val - param2_val; break;case 2:    result_val = param1_val * param2_val; break;case 3:    result_val = param1_val / param2_val; break;default: result_val = param1_val + param2_val; break;//默认情况,使用+法;}txt_Res.Format(_T("%lf"), result_val);m_pResultEdit->SetWindowTextW(txt_Res);
}

里面有相应的注释 供大家学习 应该比较容易看懂,在下也是初学者

接下来演示效果如下 :能够进行简单的加减乘除算法的实现

乘法:

然后想下载源码的小伙伴 下载链接:https://download.csdn.net/download/giser_d/11146604 欢迎下载学习 ,我也赚赚积分,大家也可以学习 共同进步

使用DM框架实现一个小的计算器相关推荐

  1. python flask框架实例_Flask框架的一个小案例

    这个案例简单的实现了Flask框架的原理,运用python中的Flask框架从数据库中提取数据,前端页面运用echarts渲染 后端代码: from flask import Flask,render ...

  2. 本地修改远端 SAP UI5 框架文件的一个小技巧

    这是 Jerry 2021 年的第 64 篇文章,也是汪子熙公众号总共第 341 篇原创文章. Jerry 的前一篇文章 纪念特洛伊英雄 Sinon - SAP UI5 Mock Server 使用步 ...

  3. 使用Bootstrap框架写的一个小实例

    今天学习了一下Bootstrap框架,,写一个小实例练练手,感受一下bootstrap兼容三端的强大. <!doctype html> <html lang="zh-CN& ...

  4. 鸿蒙harmonyOS方舟框架ARK etsUI切圆的一个小问题

    鸿蒙harmonyOS方舟框架ARK etsUI切圆的一个小问题 文章目录 鸿蒙harmonyOS方舟框架ARK etsUI切圆的一个小问题 前言 使用步骤 1.切圆 2.有点偏离原因时切的宽高跟图片 ...

  5. 熬夜写了一个小游戏,向SpaceX聊表敬意

    2019独角兽企业重金招聘Python工程师标准>>> 这是我长久放在桌面上的一张图片. 这张照片的名字叫做 Pale Blue Dot(暗淡蓝点),是旅行者1号在距地球64亿公里回 ...

  6. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  7. 小程序工程化实践(上篇)-- 手把手教你撸一个小程序 webpack 插件,一个例子带你熟悉 webpack 工作流程...

    本文基于 webpack 4 和 babel 7,Mac OS,VS Code 小程序开发现状: 小程序开发者工具不好用,官方对 npm 的支持有限,缺少对 webpack, babel 等前端常用工 ...

  8. 先定一个小目标,自己封装个ajax

    你是否发现项目中有很多页面只用到了框架不到十分之一的内容,还引了压缩后还有70多kb的jquery库 你是否发现项目中就用了两三个underscore提供的方法,其他大部分的你方法你甚至从来没有看过 ...

  9. s2sh乱码一个小处理(新手按流程走)

    s2sh乱码一个小处理(新手按流程走) 解决乱码几小点: 1.配置过滤器,可以选择自己写,既然你用的SSH框架就更简单了,直接用Spring的过滤器,web.xml里配置一下即可. 2.Jsp页面设置 ...

最新文章

  1. Struts2笔记——初次框架配置
  2. 自动化监控--zabbix安装和配置详解
  3. linux下安装python(安装python 3.6稳定版成功亲测)
  4. 26.Silverlight多线程技术ThreadPool的使用
  5. Java数据结构和算法(二):数组
  6. C++之顺序性容器vector、list、deque的push_back、pop_back、push_front、pop_front、插入(insert)和删除(erase)通用操作及其变形
  7. jquery 获取同级元素_如何在jQuery中获取元素的同级
  8. kafka中zookeeper的作用
  9. tikz包 安装_LaTeX安装宏包
  10. 基于51单片机流水灯仿真与程序设计
  11. MYSQL修改编码为utf8无效往表中插入汉字还是失败的解决方法
  12. Python是如何将“中文”转“拼音”的?
  13. 电影院和计算机的英语怎么说,电影院英文,在电影院用英语in还是at!
  14. Image Pyramid
  15. 阿里云招聘 | 遇见offer之就要圆你的大厂梦
  16. c语言float代码,[求助]float
  17. 香港金曲奖分析(1983-2017 by SIRMAN)
  18. 4口极简USB2.0 HUB方案SL2.1A
  19. 重装系统后附加带区卷
  20. 电子烟TPD/烟油TDP检测步骤

热门文章

  1. css border渐变_css边框渐变
  2. 【vue.config.js配置configureWebpack的optimization splitChunks页面空白 - DCloud】
  3. 安装Kubernetes V1.18.2
  4. JSON.parse()、JSON.stringify()和eval()的作用
  5. C语言实现Winsocket网络传输数据时乱码问题
  6. Windows下安装和配置Maven的方法及注意事项
  7. 200个最常见的JAVA面试问题(附答案)
  8. mos 多路模拟电子开关_软开关设计 || 软开关硬件三极管、MOS管典型电路分析
  9. python数据类型可变和不可变_python可变数据类型vs不可变数据类型
  10. java stdout库_Java重写StdOut并将日语写入文件