Visual C++——《可视化编程技术》实验报告——资源的应用
生活随笔
收集整理的這篇文章主要介紹了
Visual C++——《可视化编程技术》实验报告——资源的应用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、實驗?zāi)康暮鸵?/span>
1、?使用API函數(shù)編制包含各種資源的Windows應(yīng)用程序;
2、 實現(xiàn)Windows應(yīng)用程序?qū)︽I盤與鼠標的響應(yīng)。
二、實驗內(nèi)容
1、問題描述:
- 創(chuàng)建一個菜單,其中有三個菜單項,分別為“文件”、“計算”和“幫助”,其中,“文件”菜單項包含“打開”、“保存”、“畫圖”、“退出”等菜單選項;“計算”菜單包含“總和”、“方差”、“均方根”等菜單選項;“幫助”菜單項包含“計算總和幫助”、“計算方差幫助”和“計算均方根幫助”以及“關(guān)于”等項 。
- 若單擊“畫圖”菜單項,則繪出P103圖形。
- 若在用戶區(qū)內(nèi)按下鼠標左鍵,則動態(tài)創(chuàng)建一個包括“刪除計算總和”、“添加計算平均值”和“修改計算均方差”三個菜單項的彈出式菜單,由此菜單控制“計算”菜單中菜單項刪除、添加與修改。(要求新的彈出式菜單開始時不可用,按下右鍵后變?yōu)榭捎谩?#xff09; 單擊“修改計算均方差”菜單項后,“計算”菜單下的“計算均方差”項改為“線性擬合”,單擊“添加計算平均值”菜單項后,“計算”菜單中添加上了“計算平均值”菜單項 。
- 將光標設(shè)定為自己名字中的某個字、圖標設(shè)定為自己名字中的另一個字。
2、應(yīng)用程序中所用到的資源、消息,簡介主要函數(shù)的功能;
3、程序?qū)崿F(xiàn)??????
4、操作結(jié)果
三、程序代碼
// 2018329621200_申屠志剛_可視化編程技術(shù)B_實驗二.cpp : 定義應(yīng)用程序的入口點。 //#include "framework.h" #include "2018329621200_申屠志剛_可視化編程技術(shù)B_實驗二.h"#define MAX_LOADSTRING 100// 全局變量: HINSTANCE hInst; // 當前實例 WCHAR szTitle[MAX_LOADSTRING]; // 標題欄文本 WCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口類名// 此代碼模塊中包含的函數(shù)的前向聲明: 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);// 執(zhí)行應(yīng)用程序初始化:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2018329621200B));MSG msg;// 主消息循環(huán):while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam; }// // 函數(shù): 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); }// // 函數(shù): InitInstance(HINSTANCE, int) // // 目標: 保存實例句柄并創(chuàng)建主窗口 // // 注釋: // // 在此函數(shù)中,我們在全局變量中保存實例句柄并 // 創(chuàng)建和顯示主程序窗口。 // 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; }// // 函數(shù): WndProc(HWND, UINT, WPARAM, LPARAM) // // 目標: 處理主窗口的消息。 // // WM_COMMAND - 處理應(yīng)用程序菜單 // WM_PAINT - 繪制主窗口 // WM_DESTROY - 發(fā)送退出消息并返回 // // 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));//紅色網(wǎng)狀SetMapMode(hDC, MM_TEXT); //設(shè)置映射模式,用缺省模式//使用當前缺省畫筆、畫刷進行繪圖Rectangle(hDC, 130, 60, 270, 200); //繪制矩形,并填充SelectObject(hDC, hBrush); //更新畫刷,用“紅色網(wǎng)狀”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; }// “關(guān)于”框的消息處理程序。 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; }?
四、運行結(jié)果及分析
?
五、實驗心得
1、 使用API函數(shù)編制包含各種資源的Windows應(yīng)用程序;
2、 實現(xiàn)Windows應(yīng)用程序?qū)︽I盤與鼠標的響應(yīng)。
3、 掌握菜單操作
4、 理解Windows的圖形設(shè)備接口;
5、 Windows應(yīng)用程序的程序調(diào)試。
?
總結(jié)
以上是生活随笔為你收集整理的Visual C++——《可视化编程技术》实验报告——资源的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intellij IDEA + Mave
- 下一篇: JAVA——json序列化错误[hibe