一、实验目的和要求

1、 使用API函数编制包含各种资源的Windows应用程序;

2、 实现Windows应用程序对键盘与鼠标的响应。

二、实验内容

1、问题描述:

  • 创建一个菜单,其中有三个菜单项,分别为“文件”、“计算”和“帮助”,其中,“文件”菜单项包含“打开”、“保存”、“画图”、“退出”等菜单选项;“计算”菜单包含“总和”、“方差”、“均方根”等菜单选项;“帮助”菜单项包含“计算总和帮助”、“计算方差帮助”和“计算均方根帮助”以及“关于”等项 。
  • 若单击“画图”菜单项,则绘出P103图形。
  • 若在用户区内按下鼠标左键,则动态创建一个包括“删除计算总和”、“添加计算平均值”和“修改计算均方差”三个菜单项的弹出式菜单,由此菜单控制“计算”菜单中菜单项删除、添加与修改。(要求新的弹出式菜单开始时不可用,按下右键后变为可用。) 单击“修改计算均方差”菜单项后,“计算”菜单下的“计算均方差”项改为“线性拟合”,单击“添加计算平均值”菜单项后,“计算”菜单中添加上了“计算平均值”菜单项 。
  • 将光标设定为自己名字中的某个字、图标设定为自己名字中的另一个字。

2、应用程序中所用到的资源、消息,简介主要函数的功能;

3、程序实现

4、操作结果

三、程序代码

// 2018329621200_申屠志刚_可视化编程技术B_实验二.cpp : 定义应用程序的入口点。
//#include "framework.h"
#include "2018329621200_申屠志刚_可视化编程技术B_实验二.h"#define MAX_LOADSTRING 100// 全局变量:
HINSTANCE hInst;                                // 当前实例
WCHAR szTitle[MAX_LOADSTRING];                  // 标题栏文本
WCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名// 此代码模块中包含的函数的前向声明:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
HMENU hmenu, haddmenu,hmenut;
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,_In_opt_ HINSTANCE hPrevInstance,_In_ LPWSTR    lpCmdLine,_In_ int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: 在此处放置代码。// 初始化全局字符串LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadStringW(hInstance, IDC_MY2018329621200B, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2018329621200B));MSG msg;// 主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;
}//
//  函数: MyRegisterClass()
//
//  目标: 注册窗口类。
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{WNDCLASSEXW wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style          = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc    = WndProc;wcex.cbClsExtra     = 0;wcex.cbWndExtra     = 0;wcex.hInstance      = hInstance;wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY2018329621200B));wcex.hCursor        = LoadCursorFromFile(_T("POINTER.cur"));wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_MY2018329621200B);wcex.lpszClassName  = szWindowClass;wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassExW(&wcex);
}//
//   函数: InitInstance(HINSTANCE, int)
//
//   目标: 保存实例句柄并创建主窗口
//
//   注释:
//
//        在此函数中,我们在全局变量中保存实例句柄并
//        创建和显示主程序窗口。
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{hInst = hInstance; // 将实例句柄存储在全局变量中HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);if (!hWnd){return FALSE;}hmenu = GetMenu(hWnd);haddmenu = CreateMenu();hmenut = CreateMenu();// hmenut = LoadMenu(hInstance, _T("IDR_MENUCAL"));AppendMenu(hmenut, MF_ENABLED, ID_32774, _T("求和"));AppendMenu(hmenut, MF_ENABLED, ID_32776, _T("方差"));AppendMenu(hmenut, MF_ENABLED, ID_32776, _T("均方根"));InsertMenu(hmenu, 1, MF_POPUP | MF_BYPOSITION, (UINT)hmenut, _T("计算(&C)"));DrawMenuBar(hWnd);ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;
}//
//  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  目标: 处理主窗口的消息。
//
//  WM_COMMAND  - 处理应用程序菜单
//  WM_PAINT    - 绘制主窗口
//  WM_DESTROY  - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{switch (message){case WM_COMMAND:{int wmId = LOWORD(wParam);PAINTSTRUCT ps;HDC hDC = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...HPEN hPen;HBRUSH hBrush;// 分析菜单选择:switch (wmId){case IDM_PAINT:hPen = CreatePen(PS_DASHDOT, 1, RGB(0, 255, 0));//自定义绿笔//所画线条为点划线,宽度为1hBrush = CreateHatchBrush(HS_CROSS, RGB(255, 0, 0));//红色网状SetMapMode(hDC, MM_TEXT);  //设置映射模式,用缺省模式//使用当前缺省画笔、画刷进行绘图Rectangle(hDC, 130, 60, 270, 200);    //绘制矩形,并填充SelectObject(hDC, hBrush); //更新画刷,用“红色网状”Ellipse(hDC, 130, 70, 270, 190);//绘制椭圆,并填充    SelectObject(hDC, hPen);  //更新画笔,选“自定义绿笔”MoveToEx(hDC, 100, 130, NULL); //使用当前画笔绘制轴线LineTo(hDC, 300, 130);MoveToEx(hDC, 200, 30, NULL);LineTo(hDC, 200, 230);EndPaint(hWnd, &ps);break;case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case ID_DELCAL:break;            case ID_ADDCAL:AppendMenu(hmenut, MF_ENABLED, ID_AGE, _T("计算平均值"));DrawMenuBar(hWnd);break;           case ID_MOVECAL:ModifyMenu(hmenut, 2, MF_BYPOSITION, ID_32776, _T("线性拟合"));DrawMenuBar(hWnd);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;case WM_LBUTTONDOWN:AppendMenu(haddmenu, MF_GRAYED, ID_DELCAL, _T("删除计算总和"));AppendMenu(haddmenu, MF_GRAYED, ID_ADDCAL, _T("添加计算平均值"));AppendMenu(haddmenu, MF_GRAYED, ID_MOVECAL, _T("修改计算均方差"));InsertMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,(UINT)haddmenu,_T("编辑(&E)"));DrawMenuBar(hWnd);break;case WM_RBUTTONDOWN:EnableMenuItem(haddmenu, ID_DELCAL, MF_ENABLED);EnableMenuItem(haddmenu, ID_ADDCAL, MF_ENABLED);EnableMenuItem(haddmenu, ID_MOVECAL, MF_ENABLED);break;case WM_PAINT:{}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}// “关于”框的消息处理程序。
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;
}

四、运行结果及分析

五、实验心得

1、 使用API函数编制包含各种资源的Windows应用程序;

2、 实现Windows应用程序对键盘与鼠标的响应。

3、 掌握菜单操作

4、 理解Windows的图形设备接口;

5、 Windows应用程序的程序调试。

Visual C++——《可视化编程技术》实验报告——资源的应用相关推荐

  1. JavaScript编程技术实验报告3

    一.实验目的 熟悉JavaScript中数组的概念 掌握数组的创建,赋值,遍历等数组操作 掌握数组中常用的属性和方法 二.预习内容及要求(要求写出预习内容) 数组的创建: 使用Array对象创建数组, ...

  2. Visual C++——《可视化编程技术》实验报告——资源的应用—反弹的球

    一.实验目的和要求 熟悉资源在windows编程中的运用 二.实验内容 在窗口中显示一个球,该球以与水平成45度夹角作直线运动,当遇到边界时,反弹回来,仍与水平成45度角继续运动.(课本p173  7 ...

  3. Visual C++——《可视化编程技术》实验报告——MFC编程

    一.实验目的和要求 使用MFC类库编制应用程序:按钮控件.静态控件及编辑框的应用. 二.实验内容 主窗口标题为实验三: MFC编程  学号  姓名; 完成例9_5; 完成例9_3; 用菜单实现9_5中 ...

  4. Visual C++——《可视化编程技术》实验报告——绘图与文本操作

    一.实验目的和要求 1.掌握Windows应用程序的基本结构: 2.使用API函数建立窗口.消息循环,编制窗口函数: 3.使用API函数在用户区绘图.输出文本,理解Windows的图形设备接口. 二. ...

  5. 网络对抗技术-实验报告一

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 蒋建辉 年级 2015 ...

  6. 网络对抗技术 实验报告 三

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验三 密码破解技术     学生姓名 吴宜杰 年级 2014 区队 ...

  7. 单片机c语言数码显示实验报告,单片机动态显示技术实验报告.doc

    桂林电子科技大学 实验报告 开 课 单 位 适用年级.专业 机械 课 程 序 号 课 程 代 码 实 验 名 称 <动态显示技术> 动态显示技术实验报告 一.实验目的 1.掌握动态显示技术 ...

  8. java web编程技术解题与实验指导_javaweb编程技术实验指导书

    javaweb编程技术实验指导书 <Java Web编程技术> 实 验 指 导 书 沈泽刚 编写2010 年 3 月目 录 实验一 简单的 Servlet 与 JSP .1 实验二 HTT ...

  9. 网络对抗技术—实验报告一

    中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告   实验一 网络侦查与网络扫描     学生姓名 李家伟 年级 2014 ...

最新文章

  1. Cacti Nagios Squid三个工具的一些区别
  2. 从茶叶蛋到互联网思维
  3. 继承关系中的拷贝构造函数和赋值操作重载函数分析
  4. android 之使用多线程中的AsyncTask实现下载网络图片资源
  5. tableau应用实战案例(四十八)-以可视化的形式打开目标跟踪
  6. python 拆分excel openpyxl_openpyxl(python操作Excel)
  7. Maven虐我千百遍,我待Maven如初恋
  8. mysql模糊查询(详细的解析与例句)-建议收藏
  9. 更新json文件_忽略packagelock.json?
  10. 前端学习(2531):Vuex中getter
  11. linux一切皆是文件_Linux 的虚拟文件系统(真正理解“一切皆文件”)
  12. gson 生成json有\u003d异常字符处理
  13. XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复
  14. 域控下更改服务器密码策略,修改windows-2008-域控服务器密码策略
  15. python unpack 到数列_842. 将数组拆分成斐波那契数列(Python)
  16. nero4j导入关系数据以及节点操作
  17. 汉字转换为拼音 第一篇
  18. 正确去掉Win7快捷方式小箭头
  19. There is no index in the referenced table where the referenced columns appear as the first columns.
  20. x264去方块滤波函数解析(二)

热门文章

  1. iis php配置内部错误,iis 500 内部服务器错误 php
  2. 单机启动nacos_dockercompose部署nacos单机版(简洁优化版)
  3. 英文 电气与计算机工程学报,ei来源刊分为哪三大类?如何区别compendex和ei page one的文章?...
  4. pandas删除满足条件的行_入门Pandas练习
  5. 爬虫模拟登陆手机验证码_网络爬虫干货总结,这次比较全面!
  6. java 动态拼接sql_动态SQL拼接工具类
  7. linux界面添加地址,Linux系统下图形界面更改IP地址
  8. 外部中断器1C语言程序,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  9. matlab 腐蚀 结构元素,图像的腐蚀
  10. async js 返回值_JS异步编程 | Async / Await / Generator 实现原理解析