实现一个简单的计算器,类似于Windows自带的计算器。从中学习一下内容:
1、设计一个基于对话框的应用程序的基本步骤:
    首先,创建一个给予对话框的工程文件;其次,编辑对话框并添加所需要的控件等资源,实现完成大致的界面出来;再次,对各个部分的功能,如菜单,控件等的相关操作分别进行编程实现预定的要求;然后,在各个程序块之间建立联系,比如互相调用或引用其成员变量或成员函数等;最后,进行整体调试,测试并实现最终功能。
2、学会制作高级控件按钮,该按钮具有不规则的形状,可以识别用户鼠标的位置及单击状态,并以此来显示不同的颜色。创建一个高级按钮类CAdvButton,其父类为CButton。大致程序如下:
高级按钮常用的成员变量:
   CRect m_ClientRect;   //用来保存按钮的客户的矩形区域
   CRgn  m_ClientRgn;    //用来保存按钮的客户区域,非矩形
   UINT  m_State;        //按钮所处状态,识别鼠标的移动及单击
   CPoint m_Point;       //当前鼠标的位置
在CAdvButton类的构造函数中对成员变量进行初始化:
   m_ClientRect.left=0;
   m_ClientRect.top=0;
   m_ClientRect.right=0;
   m_ClientRect.bottom=0;
m_ClientRgn.DeleteObject();          //删除区域对象
   m_ClientRgn.CreateEllipticRgnIndirect(&m_ClientRect);   //创建椭圆区域
m_State=0;
   m_Point.x=m_Point.y=0
CAdvButtonl类属于用户自绘制按钮,所以要在PreSubclassWindow函数里面将按钮的风格设置为BS_OWNERDRAW(PreSubclassWindow函数是在窗口被创建前被调用的),这样在当前按钮可见部分被重绘时会自动调用DrawItem函数,否则不会调用。
   ModifyStyle(0,BS_OWNERDRAW|BS_PUSHBUTTON);
添加OnLButtonDown、OnLButtonUp及OnMouseMove等事件,执行相应的操作.
   CRect rect;
   GetWindowRect(&rect);        //得到按钮客户区域的屏幕坐标位置
   GetCursorPos(&m_Point);      //得到鼠标的屏幕坐标位置
   if(rect.PtInRect(m_Point));  //判断当前鼠标是否在按钮客户区域内
  
为了能够对一些成员变量或参数进行获得其当前值或修改,故启用定时器消息响应函数
OnTimer(UINT nIDEvent);在OnMouseMove事件中,启动定时器SetTimer(1,100,NULL);来触发定时器消息响应。在OnTimer函数处理完之后,关闭定时器KillTimer(nIDEvent)。
按钮客户区的绘制是通过虚函数DrawItem来实现的,首先得到窗口的有效矩形区域,在此区域创建所需的形状,调用SetWindowRgn()函数来设置窗口的有效区域为所需形状。
   GetClientRect(&m_ClientRect);      //得到窗口的有效矩形区域
   m_ClientRgn.DeleteObject();
   m_ClientRgn.CreateEllipticRgnIndirect(&m_ClientRect);   //在矩形区域创建椭圆
   SetWindowRgn(m_ClientRgn,FALSE);      //设置窗口的有效区域为椭圆
   CDC* pDC=CDC::FromHandle(lpDrawItemStruct->hDC);  
                                         //得到按钮控件客户区域的设备环境变量指针
   CPen* pPen=NULL;          //创建画笔
   switch(m_State)
   { case 0: pPen=new CPen(PS_SOLID,RGB(225,225,255);break;)
     case 1: ....}              //根据按钮的不同状态来创建不同的画笔
   pDC->SetBkMode(TRANSPARENT);     //设置背景模式为透明
   pPen=pDC->SelectObject(pPen);
   pDC->Ellipse(&m_ClientRect);
   pPen=pDC->SelectObject(pPen);
   if(pPen)  delete pPen;
   LPTSTR pCaption=new char[MAXCAPTIONLEN];
   int iLen=GetWindowText(pCaption,MAXCAPTIONLEN);
   pDC->SetTextColor(RGB(128,128,128));     //指定文本颜色
   pDC->DrawText(pCaption,iLen,&m_ClientRect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);                                                                                                             //绘制文本,作为按钮标题        

转载于:https://blog.51cto.com/jazka/162796

VC++设计简易计算器笔记(一)相关推荐

  1. 基于MATLAB的GUI设计简易计算器

    MATLAB语言基于GUI设计简易计算器 GUI界面的设置 主页----新建----应用程序----GUIDE 进入下图所示界面 点击确定,即可生成GUI设计界面. 设计计算器界面,放置按键和显示屏, ...

  2. android studio线性布局做计算器,Android studio设计简易计算器

    本文实例为大家分享了Android studio设计简易计算器的具体代码,供大家参考,具体内容如下 效果显示: 第一步,简单的界面布局 xmlns:tools="http://schemas ...

  3. javaweb设计简易计算器

    javaweb设计简易计算器 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  4. C语言--使用循环语句设计简易计算器

    文章目录 前言 一.for语句 1.for语句的一般形式: 2.for语句的执行步骤 3.for语句的表达式省略: 二.Switch语句 三.函数的声明与调用 四.使用循环语句设计简易计算器 总结 前 ...

  5. 单片机编程简易计算机的设计,简易计算器设计

    <简易计算器设计>由会员分享,可在线阅读,更多相关<简易计算器设计(25页珍藏版)>请在人人文库网上搜索. 1.广东海洋大学寸金学院单片机课程设计论文题目: 简易计算器设计系 ...

  6. Andriod设计简易计算器

    1.设计任务及要求 (1)设计一款基于Android系统下的计算器,实现加减乘除算法,以及清零.撤销操作.界面设计应该就尽量简洁而美观,具有良好的交互性,程序应具有较好的稳健性:      (2)另起 ...

  7. 基于python:利用pyqt5设计简易计算器

    实训内容: 跟随学习,用python写一个能进行简易运算的计算器,并自己设计计算器的UI界面,并根据实际对外观做出一定的美化. 准备过程 本次使用的是Windows11,python环境3.9.15 ...

  8. java课程设计简单计算器_JAVA课程设计--简易计算器(201521123022 黄俊麟)

    1.团队课程设计博客链接 2.个人负责模板或任务说明 1.初始化业务逻辑. 2.开方.正负.清零.退格.数字内容输入拼接,输出结果的实现. 3.四则运算算法的实现. 4.每个按钮返回对应的业务(每个按 ...

  9. 微型计算机原理课程设计计算器,微机原理课程设计简易计算器的设计.docx

    目录 一前言 ?????????????????????????????? 1 二总体设计 ??????????????????????????? 2 三硬件设计 ?????????????????? ...

最新文章

  1. 推荐8个超实用的神级工具,值得收藏起来!
  2. 深度强化学习入门到精通--资料综述
  3. softAP配网:用Android手机为linux无屏设备输入wifi密码
  4. Linux 进程间通信
  5. C++大师Lippman:我对中国程序员的忠告
  6. Windows下安装MySQL(解压版本)
  7. 「第三篇」全国电子设计竞赛,这些你必须知道的比赛细节,文末附上近十年电赛题目下载...
  8. android url 快捷方式,Android向桌面添加快捷方式,使其指向特定的(URL)网页
  9. PS图片无损放大插件 Alien Skin Blow Up 3 for Mac
  10. 不同种类的ICP算法
  11. 跋山涉水 —— 深入 Redis 字典遍历
  12. 单片机p2.0引脚c语言,单片机p2.0?
  13. python效率numpy_Python数据处理性能对比,原生,Pandas,Numpy哪个更优秀
  14. 硬笔行书字帖3500常用字_2018年【成年人实用硬笔行书】一对一直播培训简介
  15. 移动端开发框架mui介绍
  16. python批量发送邮件_EDM营销算法:python自动批量发邮件
  17. Windows兼容性设置图文教程,Windows兼容模式怎么设置?
  18. Openstack 高可用部署(Ocata版)
  19. 共享三年嵌入式项目资料(源码+实物图+原创)(申精帖)
  20. 最新zotero与obsidian笔记联动教程(可代替citations和mdnotes)

热门文章

  1. python笛卡尔_用Python 3来模拟笛卡尔积
  2. lr分析器的设计与实现实验_GBDT+LR:Practical Lessons from Predicting Clicks on Ads
  3. eclipse查看git地址_在 IntelliJ IDEA 中使用 Git,太方便了
  4. mysql connector api_mysql8 参考手册-Connector/J使用X DevAPI进行连接压缩
  5. JAVA操作属性文件,可进行读 写 更改
  6. PCL学习笔记02:在ROS下建立编译链接PCL模块
  7. 安卓讲课笔记(9):列表视图
  8. 【BZOJ2744】【codevs2366】朋友圈,二分图最大匹配
  9. C ++ 指针 | this指针_2
  10. python调用pyd文件_如何将.pyd文件作为python模块导入?