您的位置:首页 > 编程语言 > C语言/C++

MOOC清华《VC++面向对象与可视化程序设计》第2章:Windows绘图-例(1)静态图形的绘制

2017-09-26 08:06 344 查看
#include <windows.h>
#include <stdlib.h>
#include <string.h>

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);

//主函数
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{	MSG Message;
if(!InitWindowsClass(hInstance))		return FALSE;
if(!InitWindows(hInstance,nCmdShow))	return FALSE;
while(GetMessage(&Message,0,0,0))		//消息循环
{	TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}

long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam)
{	HDC hDC;   					//定义设备环境句柄
HBRUSH hBrush;  			//定义画刷的句柄
HPEN hPen;					//定义画笔的句柄
PAINTSTRUCT PtStr; 			//定义指向包含绘图信息的结构体变量

//定义一个POINT数组,包括6个点
POINT points[6]={{100,212},{70,227},{70,250},{130,250},{130,227},{100,212}};
switch(iMessage)  			//处理消息
{case WM_PAINT:    			//处理绘图消息
hDC=BeginPaint(hWnd,&PtStr);
hPen=(HPEN)GetStockObject(NULL_PEN); //获取系统定义的空画笔
SelectObject(hDC,hPen);    	//选择画笔
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);

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);  //删除画刷
EndPaint(hWnd,&PtStr);  //结束绘图
return 0;

case WM_DESTROY: //结束应用程序
PostQuitMessage(0);
return 0;

default://其他消息处理程序
return(DefWindowProc(hWnd,iMessage,wParam,lParam)) ;
}
}

BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) //初始化窗口
{	HWND hWnd;
hWnd=CreateWindow("WinFill",  		 	  //生成窗口
"填充示例程序",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
0,
CW_USEDEFAULT,
0,
NULL,
NULL,
hInstance,
NULL);
if(!hWnd)
return FALSE;
ShowWindow(hWnd,nCmdShow);			//显示窗口
UpdateWindow(hWnd);
return TRUE;
}

BOOL InitWindowsClass(HINSTANCE hInstance) 		//定义窗口类
{	WNDCLASS WndClass;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,"END");
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=WndProc;
WndClass.lpszClassName="WinFill";
WndClass.lpszMenuName=NULL;
WndClass.style=CS_HREDRAW|CS_VREDRAW;
return RegisterClass(&WndClass);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: