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

#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);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值