Visual C++——《可视化编程技术》实验报告——资源的应用
一、实验目的和要求
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++——《可视化编程技术》实验报告——资源的应用相关推荐
- JavaScript编程技术实验报告3
一.实验目的 熟悉JavaScript中数组的概念 掌握数组的创建,赋值,遍历等数组操作 掌握数组中常用的属性和方法 二.预习内容及要求(要求写出预习内容) 数组的创建: 使用Array对象创建数组, ...
- Visual C++——《可视化编程技术》实验报告——资源的应用—反弹的球
一.实验目的和要求 熟悉资源在windows编程中的运用 二.实验内容 在窗口中显示一个球,该球以与水平成45度夹角作直线运动,当遇到边界时,反弹回来,仍与水平成45度角继续运动.(课本p173 7 ...
- Visual C++——《可视化编程技术》实验报告——MFC编程
一.实验目的和要求 使用MFC类库编制应用程序:按钮控件.静态控件及编辑框的应用. 二.实验内容 主窗口标题为实验三: MFC编程 学号 姓名; 完成例9_5; 完成例9_3; 用菜单实现9_5中 ...
- Visual C++——《可视化编程技术》实验报告——绘图与文本操作
一.实验目的和要求 1.掌握Windows应用程序的基本结构: 2.使用API函数建立窗口.消息循环,编制窗口函数: 3.使用API函数在用户区绘图.输出文本,理解Windows的图形设备接口. 二. ...
- 网络对抗技术-实验报告一
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验一 网络侦查与网络扫描 学生姓名 蒋建辉 年级 2015 ...
- 网络对抗技术 实验报告 三
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验三 密码破解技术 学生姓名 吴宜杰 年级 2014 区队 ...
- 单片机c语言数码显示实验报告,单片机动态显示技术实验报告.doc
桂林电子科技大学 实验报告 开 课 单 位 适用年级.专业 机械 课 程 序 号 课 程 代 码 实 验 名 称 <动态显示技术> 动态显示技术实验报告 一.实验目的 1.掌握动态显示技术 ...
- java web编程技术解题与实验指导_javaweb编程技术实验指导书
javaweb编程技术实验指导书 <Java Web编程技术> 实 验 指 导 书 沈泽刚 编写2010 年 3 月目 录 实验一 简单的 Servlet 与 JSP .1 实验二 HTT ...
- 网络对抗技术—实验报告一
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验一 网络侦查与网络扫描 学生姓名 李家伟 年级 2014 ...
最新文章
- Cacti Nagios Squid三个工具的一些区别
- 从茶叶蛋到互联网思维
- 继承关系中的拷贝构造函数和赋值操作重载函数分析
- android 之使用多线程中的AsyncTask实现下载网络图片资源
- tableau应用实战案例(四十八)-以可视化的形式打开目标跟踪
- python 拆分excel openpyxl_openpyxl(python操作Excel)
- Maven虐我千百遍,我待Maven如初恋
- mysql模糊查询(详细的解析与例句)-建议收藏
- 更新json文件_忽略packagelock.json?
- 前端学习(2531):Vuex中getter
- linux一切皆是文件_Linux 的虚拟文件系统(真正理解“一切皆文件”)
- gson 生成json有\u003d异常字符处理
- XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复
- 域控下更改服务器密码策略,修改windows-2008-域控服务器密码策略
- python unpack 到数列_842. 将数组拆分成斐波那契数列(Python)
- nero4j导入关系数据以及节点操作
- 汉字转换为拼音 第一篇
- 正确去掉Win7快捷方式小箭头
- There is no index in the referenced table where the referenced columns appear as the first columns.
- x264去方块滤波函数解析(二)
热门文章
- iis php配置内部错误,iis 500 内部服务器错误 php
- 单机启动nacos_dockercompose部署nacos单机版(简洁优化版)
- 英文 电气与计算机工程学报,ei来源刊分为哪三大类?如何区别compendex和ei page one的文章?...
- pandas删除满足条件的行_入门Pandas练习
- 爬虫模拟登陆手机验证码_网络爬虫干货总结,这次比较全面!
- java 动态拼接sql_动态SQL拼接工具类
- linux界面添加地址,Linux系统下图形界面更改IP地址
- 外部中断器1C语言程序,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
- matlab 腐蚀 结构元素,图像的腐蚀
- async js 返回值_JS异步编程 | Async / Await / Generator 实现原理解析