Visual C++——《可视化编程技术》课程考核
问题描述
工程文件的名字取” 学号_姓名_课内考查”,工程文件中所有文件名均为“学号_姓名_课内考查”(包括.cpp,.rc,.h等文件),否则按照“未完成任务”处理(10分)
显示一个WINDOWS窗口,窗口的标题为“学号_姓名_课内考查”,例如“2018620101_张三_课内考查”,演示录屏时该窗口不能遮挡VC6.0窗口的左上侧的文件列表,否则按未完成任务处理。(20分)
将光标设定为自己名字中的姓氏的第一个字,要求蓝色字体,红色背景。(10分)。
将图标设定为自己名字中的最后一个字,要求绿色字体白色背景(10分)
在窗口的左半侧显示一组图形并填充网格,如下图(10分)
在窗口右半侧显示红色正方形如下图(10分)
创建一个菜单,其中有一个菜单项“文件”,“文件” 菜单项包含“创建”、 “删除”、“退出”等项。选择“创建”选项时则动态创建一个菜单“编辑”,该“编辑”菜单项包含“绘图”选项,同时“创建”选项变为不可用状态。选择“删除”选项时,则删除菜单项“编辑”,同时“删除”选项变为不可用状态。选择 “退出”选项时,退出程序(20分)
选择“绘图”选项时,则在窗口中间显示下方图形(在下一页),要求第5,第6题的显示图不能消失,否则该题不得分。(10分)
附加题(不计入总分,课内做完正题的同学必须努力做该附加题,不能做其他事情,如果发现作弊行为,一同严肃处理):
在第7题的菜单最后添加弹出式菜单“变化”,包括菜单项“颜色变化”和“大小变化”,要求点击“颜色变化”菜单项时,第7题中的圆的颜色从黑色依次逐渐为红色,绿色,蓝色,最后到黑色,依次循环。当点击“大小变化”菜单项时,第7题图中圆及其外切圆角矩形的尺寸同比例逐渐变大直至变为原来的尺寸的2倍后逐渐减小为原始大小然后做周期变化;当点击鼠标左键时,颜色变化暂停,再次点击鼠标左键时颜色变化继续变化。当点击鼠标右键时,圆和外切圆尺寸变化暂停,再次点击鼠标右键时,圆和外切圆尺寸接着变化;当双击鼠标右键时,圆及其外切圆角矩形恢复原始状态,鼠标左键单击,右键单击无效,直到从新进行菜单操作后恢复有效。
源代码
// 2018329621200_申屠志刚_课内考查.cpp : 定义应用程序的入口点。
//#include "framework.h"
#include "2018329621200_申屠志刚_课内考查.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, hmenut,hmenuw;
int flag = 0;
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_MY2018329621200, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2018329621200));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_ICON));wcex.hCursor = LoadCursorFromFile(_T("POINTER.cur"));wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_MY2018329621200);wcex.lpszClassName = szWindowClass;wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_ICON));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);DeleteMenu(hmenu, 0, MF_POPUP | MF_BYPOSITION);hmenut = CreateMenu();hmenuw=CreateMenu();AppendMenu(hmenuw, MF_ENABLED, ID_CREATE, _T("创建"));AppendMenu(hmenuw, MF_GRAYED, ID_DELETE, _T("删除"));AppendMenu(hmenuw, MF_ENABLED, IDM_EXIT, _T("退出"));InsertMenu(hmenu, 0, MF_POPUP | MF_BYPOSITION, (UINT)hmenuw, _T("文件(&F)"));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)
{PAINTSTRUCT ps;HDC hDC;HBRUSH hBrush;HPEN hPen;switch (message){case WM_COMMAND:{int wmId = LOWORD(wParam);// 分析菜单选择:switch (wmId){case IDM_PAINT:flag = 1;InvalidateRect(hWnd, NULL, 1);break;case ID_CREATE:EnableMenuItem(hmenuw, ID_CREATE, MF_GRAYED);EnableMenuItem(hmenuw, ID_DELETE, MF_ENABLED);hmenut = CreateMenu();AppendMenu(hmenut, MF_ENABLED, IDM_PAINT, _T("绘图"));InsertMenu(hmenu, 1, MF_POPUP | MF_BYPOSITION, (UINT)hmenut, _T("编辑(&E)"));DrawMenuBar(hWnd);break;case ID_DELETE: EnableMenuItem(hmenuw, ID_CREATE, MF_ENABLED);EnableMenuItem(hmenuw, ID_DELETE, MF_GRAYED);DeleteMenu(hmenu, 1,MF_BYPOSITION);DrawMenuBar(hWnd);break;case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}}break;case WM_PAINT:{hDC = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...hBrush = CreateHatchBrush(HS_CROSS, RGB(255, 0, 0));//红色网状SelectObject(hDC, hBrush); //选择画刷hPen = CreatePen(PS_SOLID, 1, RGB(0, 0, 255)); //创建画笔SelectObject(hDC, hPen); //选择画笔Pie(hDC, 213, 137, 288, 212, 240, 137, 260, 137); //画一个圆饼Rectangle(hDC, 213, 212, 287, 250); //画一个长方形RoundRect(hDC, 213, 100, 287, 137, 20, 20); //画一个圆角长方形DeleteObject(hPen); //删除画笔DeleteObject(hBrush); //删除画刷hPen = (HPEN)GetStockObject(BLACK_PEN); //获取系统定义的空画笔SelectObject(hDC, hPen); //选择画笔hBrush = CreateSolidBrush( RGB(255, 0, 0));SelectObject(hDC, hBrush); //选择画刷Rectangle(hDC, 400, 100, 600, 300); //画一个长方形if (flag == 1) {DeleteObject(hBrush); //删除画刷hBrush = (HBRUSH)GetStockObject(NULL_BRUSH);SelectObject(hDC, hBrush); //选择画刷DeleteObject(hPen); //删除画笔hPen = (HPEN)GetStockObject(BLACK_PEN); //创建画笔SelectObject(hDC, hPen); //选择画笔RoundRect(hDC, 700, 100, 800, 200, 20, 20); //画一个圆角长方形DeleteObject(hBrush); //删除画刷hBrush = (HBRUSH)GetStockObject(BLACK_BRUSH);SelectObject(hDC, hBrush); //选择画刷Pie(hDC, 700, 110, 800, 190, 0, 0, 0, 0); //画一个圆饼//Arc(hDC, 700, 110, 800, 190, 0, 0, 0, 0);}DeleteObject(hPen); //删除画笔DeleteObject(hBrush); //删除画刷EndPaint(hWnd, &ps);}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;
}
运行结果
Visual C++——《可视化编程技术》课程考核相关推荐
- Visual C++——《可视化编程技术》实验报告——MFC编程
一.实验目的和要求 使用MFC类库编制应用程序:按钮控件.静态控件及编辑框的应用. 二.实验内容 主窗口标题为实验三: MFC编程 学号 姓名; 完成例9_5; 完成例9_3; 用菜单实现9_5中 ...
- Visual C++——《可视化编程技术》实验报告——资源的应用—反弹的球
一.实验目的和要求 熟悉资源在windows编程中的运用 二.实验内容 在窗口中显示一个球,该球以与水平成45度夹角作直线运动,当遇到边界时,反弹回来,仍与水平成45度角继续运动.(课本p173 7 ...
- Visual C++——《可视化编程技术》实验报告——资源的应用
一.实验目的和要求 1. 使用API函数编制包含各种资源的Windows应用程序: 2. 实现Windows应用程序对键盘与鼠标的响应. 二.实验内容 1.问题描述: 创建一个菜单,其中有三个菜单项, ...
- Visual C++——《可视化编程技术》实验报告——绘图与文本操作
一.实验目的和要求 1.掌握Windows应用程序的基本结构: 2.使用API函数建立窗口.消息循环,编制窗口函数: 3.使用API函数在用户区绘图.输出文本,理解Windows的图形设备接口. 二. ...
- 三维重建 阈值分割 3D可视化 医学图像分割 CT图像分割及重建系统 可视化编程技术及应用
一. 概述 此系统实现了常见的VTK四视图,实现了很好的CT图像分割,可以用于骨骼,头部,肺部,脂肪等分割,,并且通过三维重建实现可视化.使用了第三方库 VTK,ITK 实现分割和生不重建. 窗口分为 ...
- DICOM 医学图像阅读器 CT MRI 超声 医疗软件 三维重建 可视化编程技术及应用
一. 概述 此系统实现了常见 VTK 四视图,实现了很好的 DICOM 图像显示,可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素,距离测量,角度测量,提供源码: 并 ...
- python扫雷游戏实验分析_高级编程技术课程实验报告-扫雷游戏
班级 通 信 一 班 姓名 陈远春 学号 201100120084 课程实验内容 扫雷游戏,是 Windows 操作系统自带的一款经典游戏.其规则简单,上手 容易, 不论男女老少皆可娱乐. 扫雷的目的 ...
- C#可视化编程技术第三章:DBHelper类(内含思路、代码、注释)
DBHelper类: DBHelper类,就是用类将ADO.NET用方法封装起来.减少程序员的工作量. 代码思路: 将已经学会的ADO.qNET用代码分开封装,比如说: 一个SqlConnection ...
- 计算机应用电子技术课程,中专计算机应用有什么课程
中专计算机应用有什么课程2020-10-29 16:40:11文/董玉莹 计算机应用学习研究计算机应用于各个领域的理论.方法.技术和系统等,是计算机学科与其他学科相结合的边缘学科,是计算机学科的组成部 ...
最新文章
- pyqt5讲解10:布局管理讲解大全
- 今天的考核题目: 你知道React和Vue的区别吗? skr,skr
- 小白教你用Java生成验证码
- splite和map的结合使用
- Bootstrap 工具提示插件Tooltip 的选项
- win10+jdk8重启后失效
- UVa1587 - Box
- SQL Server之旅:(二)Could not load the DLL xpstar90.dll
- 汇编语言典型例子详解_单片机汇编语言经典一百例
- “没有存在感”是一种什么感受?
- 拼多多API接口介绍
- [SystemVerilog] 基于 FPGA 的数字钟设计
- C# 切换中英文输入法
- javascript 区号与城市的对应信息
- 走入Mongodb v3.2+-姜威-专题视频课程
- MySQL枚举类型的“八宗罪”
- ANDROID SDK体系介绍
- 最新推荐 | 清华NLP图神经网络GNN论文分门别类,16大应用200+篇论文
- Maven 虐我千百遍,我待 Maven 如初恋
- 【多线程笔记02】多线程之CyclicBarrier的介绍和使用
热门文章
- [IE技巧] 如何禁止用户关闭IE浏览器
- oracle数据库查询代码,ORACLE数据库查询表实例代码
- list赋值给另一个list_Python小知识: List的赋值方法,不能直接等于
- html遇到英文单词整体换行,CSS单词换行and断词,你真的完全了解吗_html/css_WEB-ITnose...
- 如何用python实现自动化_如何使用Python实现自动化水军评论
- 打地鼠c语言代码_女白领在家玩打地鼠游戏,无意间学会python编程,还有教程有源码...
- android studio gradle配置_Unity打包Android最全攻略(含完整流程及常见问题)
- mybatis 时间_开发工具:Mybatis.Plus.插件三种方式的逆向工程
- 我为什么重新做起了公众号?
- 6.29 Vue 第二天 学习笔记