Visual C++——《可视化编程技术》实验报告——绘图与文本操作
生活随笔
收集整理的這篇文章主要介紹了
Visual C++——《可视化编程技术》实验报告——绘图与文本操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、實驗目的和要求
1、掌握Windows應用程序的基本結構;
2、使用API函數建立窗口、消息循環,編制窗口函數;
3、使用API函數在用戶區繪圖、輸出文本,理解Windows的圖形設備接口。
二、實驗內容
實現下圖給定的繪圖與文本操作。
?
三、程序代碼
// 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);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 = LoadCursor(nullptr, IDC_ARROW);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;}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);// 分析菜單選擇: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_PAINT:{PAINTSTRUCT ps;HDC hDC = BeginPaint(hWnd, &ps);// TODO: 在此處添加使用 hdc 的任何繪圖代碼...HPEN hPen = (HPEN)GetStockObject(NULL_PEN); //獲取系統定義的空畫筆SelectObject(hDC, hPen); //選擇畫筆HBRUSH hBrush = (HBRUSH)GetStockObject(BLACK_BRUSH); //獲取系統定義的畫刷SelectObject(hDC, hBrush); //選擇畫刷LineTo(hDC, 50, 50); //畫線DeleteObject(hPen); //刪除畫筆hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); //創建畫筆SelectObject(hDC, hPen); //選擇畫筆//畫一個三角形LineTo(hDC, 150, 50);LineTo(hDC, 100, 137);LineTo(hDC, 50, 50);//定義一個POINT數組,包括6個點POINT points[6] = { {100,212},{70,227},{70,250},{130,250},{130,227},{100,212} };Polyline(hDC, points, 6); //畫一個五邊形Arc(hDC, 63, 137, 138, 212, 100, 137, 100, 137); //畫一個圓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); //刪除畫刷static long nXChar, nCaps, nYChar;int pointx, pointy;int i, j;static LPCWSTR textbuf[4] = { {_T("故人西辭黃鶴樓")},{_T("煙花三月下揚州")},{_T("孤帆遠影碧空盡")}, {_T("唯見長江天際流")} };TEXTMETRIC tm;GetTextMetrics(hDC, &tm); //獲取字體信息nXChar = tm.tmAveCharWidth; //獲取字符寬度nYChar = tm.tmHeight + tm.tmExternalLeading; //字符高度nCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * nXChar / 2; //字間距for (i = 4; i > 0; i--){ for (j = 0; j < 7; j++) //輸出文本{ pointx = 300 + i * nXChar * 5; pointy = 50 + j * (nYChar + nCaps);TextOut(hDC, pointx, pointy, textbuf[4 - i] + j * 1, 1); } }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; }四、運行結果及分析
?
五、實驗心得
1、掌握Windows應用程序的基本結構;
2、使用API函數建立窗口、消息循環,編制窗口函數;
3、使用API函數在用戶區繪圖、輸出文本;
4、理解Windows的圖形設備接口;
5、Windows應用程序的程序調試。
總結
以上是生活随笔為你收集整理的Visual C++——《可视化编程技术》实验报告——绘图与文本操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无线路由器——多路由器无线桥联解决方案
- 下一篇: Visual C++——《可视化编程技术