300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Visual C++——《可视化编程技术》实验报告——资源的应用—反弹的球

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

时间:2023-04-29 10:18:03

相关推荐

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

一、实验目的和要求

熟悉资源在windows编程中的运用

二、实验内容

在窗口中显示一个球,该球以与水平成45度夹角作直线运动,当遇到边界时,反弹回来,仍与水平成45度角继续运动。(课本p173 7-12)

三、程序代码

// 329621200_申屠志刚_可视化编程技术B_实验三.cpp : 定义应用程序的入口点。//#include "framework.h"#include "329621200_申屠志刚_可视化编程技术B_实验三.h"#define MAX_LOADSTRING 100#define ID_TIMER 1 // 全局变量:HINSTANCE hInst; // 当前实例WCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名// 此代码模块中包含的函数的前向声明:ATOMMyRegisterClass(HINSTANCE hInstance);BOOLInitInstance(HINSTANCE, int);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);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_MY329621200B, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// 执行应用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY329621200B));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_MY329621200B));wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName = MAKEINTRESOURCEW(IDC_MY329621200B);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;}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){static int x = 0;static int y = 0;static int dx = 1;static int dy = 1;HBRUSH hBrush;HPEN hPen;switch (message){case WM_CREATE:{SetTimer(hWnd, ID_TIMER, 1, NULL);return(0);}case WM_COMMAND:{int wmId = LOWORD(wParam);// 分析菜单选择:switch (wmId){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_TIMER:{switch (wParam){case ID_TIMER://每秒一次的处理 //UpdateWindow(hWnd);InvalidateRect(hWnd, NULL, 1);break;}break;}case WM_PAINT:{PAINTSTRUCT ps;HDC hdc = BeginPaint(hWnd, &ps);// TODO: 在此处添加使用 hdc 的任何绘图代码...SetMapMode(hdc, MM_ANISOTROPIC);//SetWindowExtEx(hdc, 15, 15, NULL); //设置窗口区域//SetViewportExtEx(hdc, 15, 10, NULL); //设置视口区域//SetViewportOrgEx(hdc, 120, 120, NULL); //设置视口原点RECT rect;//SetTimer(hWnd, ID_TIMER, 1000, NULL);GetClientRect(hWnd,&rect);if (x+20 >= rect.bottom) {dx = -1;}if (y+20 >= rect.right) {dy = -1;}if (x <= rect.top) {dx = 1;}if (y <= rect.left) {dy = 1;}x += dx;y += dy;hPen = (HPEN)GetStockObject(BLACK_PEN);//黑色画笔hBrush = (HBRUSH)CreateSolidBrush(RGB(255, 255, 255)); //画刷Ellipse(hdc, y, x, y + 20, x + 20); //绘制椭圆SelectObject(hdc, hBrush); //选择画刷SelectObject(hdc, hPen); //选择画笔EndPaint(hWnd, &ps);//UpdateWindow(hWnd);//Invalidate();}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应用程序的程序调试;

6、 熟悉资源在windows编程中的运用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。