1.介绍

    设计出一个有友好界面的计算器。

2.API函数的介绍

           //1.当前对话框窗口句柄

           //2.处理的ID号

           //3.表示成功或失败(TRUE表示成功,FALSE表示失败)。

           //如果此参数为NULL,则该函数不返回有关成功或失败的信息

           //4.找到对应的int,进行返回

           int nleft = GetDlgItemInt(hwnd, IDC_EDIT4, NULL, TRUE);

 

 

           //1.当前对话框窗口句柄

           //2.处理的ID号

           //3.进行信息的处理。

           //4.找到对应的int,进行返回

           SetDlgItemInt(hwnd, IDC_EDIT5, nleft + nright, TRUE);

 

 

           //第一个参数为当前正在运行的对话框的句柄

           //第二个参数为你点击了什么来进行事件的运行,一般为你要关闭的ID号

           EndDialog(hwnd, IDOK);

 

 

//参数一为句柄,用来标识某些东西,在这标识这个程序

//参数二为句柄,一般为NULL

//参数三为字符指针,用来运行程序的命令行

//参数四为程序如何显示

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hpre, PSTR pstr, int icmdshow) {}

 

 

    //返回类型为 HWND,且必须是在任务栏上的已经打开的窗口。

    /*lpszClassName (第一个参数)

    指向指定窗口的类名的一个Null终止的字符串(WNDCLASS 结构,窗口的类型名)。 如果 lpClassName 是 NULL,所有类名匹配。

    lpszWindowName(第二个参数)

    指向指定窗口名称为Null终止的字符串(窗口的标题)。 如果 lpWindowName 是 NULL,所有windows命名匹配。*/

    //通过窗口标题进行查找

    HWND hwnd1 = FindWindow(NULL, TEXT("翻译.txt - 记事本"));

    //通过窗口的类名进行查找

    HWND hwnd = FindWindow(TEXT("Notepad"), NULL);

 

 

    //第一个参数为当前窗口的句柄,如果没有,可以为0或者NULL.

    //第二个参数为当前窗口的ID号,为一个整数

    //第三个参数为父窗口,若无则为空

    //第四个参数为指向一个消息回调函数

    DialogBox(hinstance, (LPCSTR)IDD_DIALOG1, NULL, DialogPro);

 

3.实现代码

//一个简单的计算器
//需要知道一个MFC的基础知识,掌握必要的常见的几个API,才能进行程序的书写。

#include<Windows.h>
#include"resource.h"

INT_PTR CALLBACK subPro(HWND hwnd, UINT nID, WPARAM wpa, LPARAM lpa) {
	switch (nID) {
	case WM_COMMAND:
		if (LOWORD(wpa) == IDOK) {
			int nleft = GetDlgItemInt(hwnd, IDC_EDIT1, NULL, TRUE);
			int nright = GetDlgItemInt(hwnd, IDC_EDIT2, NULL, TRUE);
			SetDlgItemInt(hwnd, IDC_EDIT5, nleft - nright, TRUE);
		}
		if (LOWORD(wpa) == IDCANCEL) {
			EndDialog(hwnd, IDCANCEL);
		}
	}
	return 0;
}

INT_PTR CALLBACK mulPro(HWND hwnd, UINT nID, WPARAM wpa, LPARAM lpa) {
	switch (nID) {
	case WM_COMMAND:
		if (LOWORD(wpa) == IDOK) {
			int nleft = GetDlgItemInt(hwnd, IDC_EDIT1, NULL, TRUE);
			int nright = GetDlgItemInt(hwnd, IDC_EDIT6, NULL, TRUE);
			SetDlgItemInt(hwnd, IDC_EDIT7, nleft * nright, TRUE);
		}
		if (LOWORD(wpa) == IDCANCEL) {
			EndDialog(hwnd, IDCANCEL);
		}
	}
	return 0;
}

INT_PTR CALLBACK didPro(HWND hwnd, UINT nID, WPARAM wpa, LPARAM lpa) {
	switch (nID) {
	case WM_COMMAND:
		if (LOWORD(wpa) == IDOK) {
			int nleft = GetDlgItemInt(hwnd, IDC_EDIT1, NULL, TRUE);
			int nright = GetDlgItemInt(hwnd, IDC_EDIT6, NULL, TRUE);
			SetDlgItemInt(hwnd, IDC_EDIT7, nleft / nright, TRUE);
		}
		if (LOWORD(wpa) == IDCANCEL) {
			EndDialog(hwnd, IDCANCEL);
		}
	}
	return 0;
}

INT_PTR CALLBACK addPro(HWND hwnd, UINT nID, WPARAM wpa, LPARAM lpa) {
	switch (nID) {
	case WM_COMMAND:
		if (LOWORD(wpa) == IDOK) {
			int nleft = GetDlgItemInt(hwnd, IDC_EDIT1, NULL, TRUE);
			int nright = GetDlgItemInt(hwnd, IDC_EDIT4, NULL, TRUE);
			SetDlgItemInt(hwnd, IDC_EDIT3, nleft + nright, TRUE);
		}
		if (LOWORD(wpa) == IDCANCEL) {
			EndDialog(hwnd, IDCANCEL);
		}
	}
	return 0;
}

INT_PTR CALLBACK intPro(HWND hwnd, UINT nID, WPARAM wParam, LPARAM lParam) {
	switch (nID) {
	case WM_COMMAND:
		if (LOWORD(wParam) == IDC_ADD1) {
			DialogBox(NULL, (LPCSTR)IDD_ADD_DLG, NULL, addPro);
		}
		if (LOWORD(wParam) == IDC_SUBTRA1) {
			DialogBox(NULL, (LPCSTR)IDD_SUBSTR_DLG, NULL, subPro);
		}		
		if (LOWORD(wParam) == IDC_MULTI1) {
			DialogBox(NULL, (LPCSTR)IDD_MULTI_DLG, NULL, mulPro);
		}		
		if (LOWORD(wParam) == IDC_DIVIDE1) {
			DialogBox(NULL, (LPCSTR)IDD_DIDIVE_DLG, NULL, didPro);
		}
		if (LOWORD(wParam) == IDCANCEL) {
			EndDialog(hwnd, IDCANCEL);
		}
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hin, PSTR patr, int icmdshow) {
	DialogBox(hinstance, (LPCSTR)IDD_MAN_DLG1, NULL, intPro);
	return 0;
}

界面和图标都需要自己在资源视图里进行设置,设置之后的配置会保存在resource.h中,其中resource.h头文件的内容为:

//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ 生成的包含文件。
// 供 math_operater.rc 使用
//
#define IDI_ICON1                       101
#define IDD_MAN_DLG1                    102
#define IDD_ADD_DLG                     104
#define IDD_SUBSTR_DLG                  106
#define IDD_MULTI_DLG                   108
#define IDD_DIALOG1                     110
#define IDD_DIDIVE_DLG                  110
#define IDC_ADD1                        1001
#define IDC_SUBTRA1                     1002
#define IDC_EDIT1                       1002
#define IDC_MULTI1                      1003
#define IDC_EDIT6                       1003
#define IDC_DIVIDE1                     1004
#define IDC_EDIT3                       1004
#define IDC_EDIT7                       1004
#define IDC_EDIT4                       1005
#define IDC_EDIT2                       1005
#define IDC_EDIT5                       1006

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        112
#define _APS_NEXT_COMMAND_VALUE         40001
#define _APS_NEXT_CONTROL_VALUE         1003
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif

4.运行结果为:
 

【MFC之一】简单计算器

【MFC之一】简单计算器

减法、乘法和除法都是产不多的界面,个人感觉界面做的比较差劲,要再次改进。

 

相关文章: