Windows图形绘制编程试验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows图形绘制编程试验一、实验目的
(1)熟悉VisualC++6.0的开发环境
(2)掌握Windows图形输出的方法
(3)理解设备环境、画笔、画刷的概念,掌握常用的绘制函数。

二、实验内容
编写程序,要求如下:
(1)定义一支红色画笔,绘制一个正方形;
(2)用不同颜色的线条连接互不相临的两个顶点;
(3)用不同颜色的画刷填充用上述方法所形成的图形的每一个区域。

三、实验程序和运行结果
1、程序:
#include "stdafx.h"
#include "resource.h"
#define MAX_LOADSTRING 100
HINSTANCE hInst;
TCHAR szTitle[MAX_LOADSTRING];
TCHAR szWindowClass[MAX_LOADSTRING];
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
MSG msg;
HACCEL hAccelTable;
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_FA, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_FA);
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return msg.wParam;
}
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, (LPCTSTR)IDI_FA);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = (LPCSTR)IDC_FA;
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
return RegisterClassEx(&wcex);
}
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance;
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
return TRUE;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, UINT wParam, LONG lParam)
{
PAINTSTRUCT PtStr;
HDC hDC;
HBRUSH hBrush;
HPEN hPen;
switch (message)
{
case WM_PAINT:
hDC = BeginPaint(hWnd, &PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);
hPen=(HPEN)CreatePen(PS_INSIDEFRAME,1,RGB(255,0,0));
SelectObject(hDC,hPen);
Rectangle(hDC,40,40,200,200);
DeleteObject(hPen);
hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH);
SelectObject(hDC,hBrush);
POINT p[3];
p[0].x=40;p[0].y=40;p[1].x=120;p[1].y=120;p[2].x=200;p[2].y=40;
Polygon(hDC,p,3);
DeleteObject(hBrush);
hBrush=(HBRUSH)GetStockObject(BLACK_BRUSH);
SelectObject(hDC,hBrush);
p[0].x=40;p[0].y=40;p[1].x=120;p[1].y=120;p[2].x=40;p[2].y=200;
Polygon(hDC,p,3);
hBrush=CreateSolidBrush(RGB(255,0,255));
SelectObject(hDC,hBrush);
p[0].x=200;p[0].y=200;p[1].x=120;p[1].y=120;p[2].x=200;p[2].y=40;
Polygon(hDC,p,3);
hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH);
SelectObject(hDC,hBrush);
p[0].x=200;p[0].y=200;p[1].x=120;p[1].y=120;p[2].x=40;p[2].y=200;
Polygon(hDC,p,3);
hPen=(HPEN)CreatePen(PS_INSIDEFRAME,1,RGB(0,0,255));
SelectObject(hDC,hPen);
MoveToEx(hDC,40,40,NULL);
LineTo(hDC,200,200);
DeleteObject(hPen);
hPen=(HPEN)CreatePen(PS_INSIDEFRAME,1,RGB(0,255,0));
SelectObject(hDC,hPen);
MoveToEx(hDC,40,200,NULL);
LineTo(hDC,200,40);
EndPaint(hWnd, &PtStr);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}。

相关文档
最新文档