题目:写一个基于MFC对话框的程序,界面输入整型a和b,点击计算,开启线程计算a+b,并把结果返回给对话框。(1)不能用结构体和类(2)用到自定义消息(3)鼠标移到【计算】按钮上变为收尸图标。参考界面如下。

题目非常基础了,我下面直接贴代码了,算是做一个总结。

 // 计算器Dlg.h : 头文件
// #pragma once
#include "afxwin.h"
#include "MyButton.h"
#define WM_UPDATEDATA WM_USER + 5 // C计算器Dlg 对话框
class C计算器Dlg : public CDialogEx
{
// 构造
public:
C计算器Dlg(CWnd* pParent = NULL); // 标准构造函数 // 对话框数据
enum { IDD = IDD_MY_DIALOG }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现
protected:
HICON m_hIcon; // 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CString m_EditA;
CString m_EditB;
CEdit m_EditC;
afx_msg void OnBnClickedButton1();
CString m_Result;
HANDLE m_hThread;
static DWORD WINAPI ThreadProc(LPVOID lpThreadParameter);
LRESULT OnUpdateData(WPARAM wParam, LPARAM lParam);
CMyButton m_button;
};
 // 计算器Dlg.cpp : 实现文件
// #include "stdafx.h"
#include "计算器.h"
#include "计算器Dlg.h"
#include "afxdialogex.h" #ifdef _DEBUG
#define new DEBUG_NEW
#endif // C计算器Dlg 对话框 C计算器Dlg::C计算器Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(C计算器Dlg::IDD, pParent)
, m_EditA(_T(""))
, m_EditB(_T(""))
, m_Result(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
} void C计算器Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_EditA);
DDX_Text(pDX, IDC_EDIT2, m_EditB);
DDX_Control(pDX, IDC_EDIT3, m_EditC);
DDX_Text(pDX, IDC_EDIT3, m_Result);
DDX_Control(pDX, IDC_BUTTON1, m_button);
} BEGIN_MESSAGE_MAP(C计算器Dlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &C计算器Dlg::OnBnClickedButton1)
ON_MESSAGE(WM_UPDATEDATA, OnUpdateData)
END_MESSAGE_MAP() // C计算器Dlg 消息处理程序 BOOL C计算器Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
} // 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。 void C计算器Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), ); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + ) / ;
int y = (rect.Height() - cyIcon + ) / ; // 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
} LRESULT C计算器Dlg::OnUpdateData(WPARAM wParam, LPARAM lParam)
{
UpdateData(wParam);
return ;
} //当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR C计算器Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
} DWORD WINAPI C计算器Dlg::ThreadProc(LPVOID lpThreadParameter)
{
C计算器Dlg* pThis = (C计算器Dlg*)lpThreadParameter;
int Numa, Numb;
pThis->SendMessage(WM_UPDATEDATA, TRUE);
swscanf_s(pThis->m_EditA, L"%d", &Numa);
swscanf_s(pThis->m_EditB, L"%d", &Numb);
pThis->m_Result.Format(L"%d", Numa + Numb);
pThis->SendMessage(WM_UPDATEDATA, FALSE);
return TRUE;
} void C计算器Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// 创建线程函数,注意参数穿this指针
m_hThread = CreateThread(NULL, , ThreadProc, this, , );
}
 // 创建一个MFC类,继承CButton类,当鼠标悬停在按钮上时,用于改变鼠标图标  
1 #pragma once // CMyButton.h 头文件 class CMyButton : public CButton
{
DECLARE_DYNAMIC(CMyButton) public:
CMyButton();
virtual ~CMyButton(); protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); // 处理WM_SETCURSOR消息
};
 // MyButton.cpp : 实现文件
// #include "stdafx.h"
#include "MyButton.h"
#include "resource.h" // CMyButton IMPLEMENT_DYNAMIC(CMyButton, CButton) CMyButton::CMyButton()
{ } CMyButton::~CMyButton()
{
} BEGIN_MESSAGE_MAP(CMyButton, CButton)
ON_WM_SETCURSOR()
END_MESSAGE_MAP() // CMyButton 消息处理程序 BOOL CMyButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值 ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND)));
return TRUE;

一道C++、MFC上机面试题的更多相关文章

  1. 一道关于String的面试题,新鲜出炉,刚被坑过,趁热!!

    很多人都会答错的一道关于String的题目,究竟有什么难度? 我们一起来看一道关于String的面试题,准确说是改编的面试题! 准备好啦?在放大招之前先来一个小招式 String s1 = new S ...

  2. 那晚征服的一道js经典的面试题

    今天朋友共享了一道js中经典的面试题,需求是这样的 给定你任意一个字符串,让你写出一个算法,求算出该字符串中出现次数最多的一个字符,并将其结果输出 刚拿到这道题的第一感觉便是定义一个count计时器, ...

  3. C++学习笔记(9)----关于变量和数组大小的一道容易出错的面试题

    一道容易出错的C++笔试题 求下面代码的输出内容: int main(int argc,char* argv[]) { char str1[]="Hello"; char* str ...

  4. 一道简单的JavaScript面试题

    好久没更新博客了,随便写点东西吧. 自从工作之后就特别忙,忙的过程中有时候挺迷茫的,可能是大多数时候写的都是简单的业务代码,很久没好好充电了.最近一直在零碎的上班路上等电梯时间里面学习<图解HT ...

  5. 一道js的前端面试题,主要弄清楚逗号表达式的作用

    群里看到的一道前端JS面试题.我以为我会,其实我错了.找了很多资料,写下来. var i,j,k; for( i = 0 , j = 0; i < 10 , j < 6; i++ , j+ ...

  6. 一道简单的 Java 笔试题,但值得很多人反思!

    前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...

  7. OpenJDK源码研究笔记(五)-缓存Integer等类型的频繁使用的数据和对象,大幅度提升性能(一道经典的Java笔试题)

    摘要 本文先给出一个看似很简单实则有深意的Java笔试面试题,引出JDK内部的缓存. JDK内部的缓存,主要是为了提高Java程序的性能. 你能答对这道"看似简单,实则有深意"的J ...

  8. 一道经典的js面试题

    # 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...

  9. 从一道看似简单的面试题重新理解JS执行机制与定时器

     壹 ❀ 引 最近在看前端进阶的系列专栏,碰巧看到了几篇关于JS事件执行机制的面试文章,因为我在之前一篇 JS执行机制详解,定时器时间间隔的真正含义 博文中也有记录JS执行机制,所以正好用于作为测试自 ...

随机推荐

  1. mongo 根据对象中的某个条件来查询

    假如A表有如下数据 { "id" : 1, "users_info" : [{"uid" : 10001}, {"uid" ...

  2. SpringCloud(9)---mysql实现配置中心

    mysql实现配置中心 本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程.有关项目源码后期会补上github地址 微服务要实现集中管理微服务配 ...

  3. Vuex的模块化、优点

    前言:如果说我们的vuex的仓库代码量巨大,我们要不要采用就像后端与一样的分层,要不然一吨的代码放在main里,呵呵.所以我们要采用模块化! 看这篇文章的时候,一定要看看上一篇的vuex入门精讲:Vu ...

  4. curl zip上传并且解压

     上传文件: /** * 上传文件 * @param string $file 文件路径 */ function FileUpload($file){ $data = array('file'=> ...

  5. Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  6. 命令行分析组件IKende.CLI

    IKende.CLI是一款开源的命令行分解组件,它可以简地把命令行字符转换成命令对象.在编写CLI应用的时候经常要对命令字符进行繁锁的分解和转换工作,而IKende.CLI的存也是为了解决以上问题而产 ...

  7. 使用mpvue开发小程序教程(一)

    前段时间,美团开源了mpvue这个项目,使得我们又多了一种用来开发小程序的框架选项.由于mpvue框架是完全基于Vue框架的(重写了其runtime和compiler),因此在用法上面是高度和Vue一 ...

  8. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  9. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(6)- 打包发布(PyInstaller3.3.1)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之打包发布. 经过上一篇软件优化之后,Jays-PyCOM已经初长成,该到了出去历练的时候了,只有经 ...

  10. Mysql语句中当前时间不能直接使用C#中的Date.Now传输

    MySql中处理字符串时间,会默认把第一个数字当成年份处理. 在C#服务器中,使用Date.Now.ToString()生成的字符串时间,如果不指定字符串格式,C#会按照系统语言输出不同的字符串格式, ...