windows可视化编程(二)

这节总结下笔刷的使用,首先看程序

#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; 	//定义指向包含绘图信息的结构体变量
	switch(iMessage)  	//处理消息
	{
	case WM_PAINT:    							//处理绘图消息
		hDC=BeginPaint(hWnd,&PtStr);
		SetMapMode(hDC,MM_ANISOTROPIC);  		//设置映射模式
		hPen=(HPEN)GetStockObject(BLACK_PEN);//设置画笔为系统预定定义的黑色画笔
		hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH); //采用系统预定义的深灰色画刷
		SelectObject(hDC,hBrush);  			//选择画刷
		SelectObject(hDC,hPen);    			//选择画笔
		RoundRect(hDC,50,120,100,200,15,15); //圆角矩形
		hBrush=(HBRUSH)GetStockObject(LTGRAY_BRUSH); //采用系统预定义的淡灰色画刷
		SelectObject(hDC,hBrush);  			//选择画刷
		Ellipse(hDC,150,50,200,150); 		//椭圆
		hBrush=(HBRUSH)GetStockObject(HOLLOW_BRUSH); //采用系统预定义的虚画刷
		SelectObject(hDC,hBrush);  			//选择画刷
		Pie(hDC,250,50,300,100,250,50,300,50);  	//饼形
		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);
}

首先这个程序在架构上比上一篇程序更加清晰,把注册类,创建窗口写到了两个函数里面。框架搭好了我们就只要处理winproc就行了。

在展示窗口的时候会有一个WM_PAINT消息产生,我们就是要处理这个消息,画刷画笔画图分为以下几步:

① 创建句柄,hdc,hbrush,hpen和定义指向包含绘图信息的结构体变量PtStr;

②获取句柄实例,hdc 通过BeginPaint(hWnd,&PtStr)函数,brush hpen通过GetStockObject

③设置 映射 SetMapMode(hDC,MM_ANISOTROPIC) 不同映射模式效果坐标有所不同

④利用SelectObject选择画笔花刷

⑤利用函数画图:movetoex linetoex polyline arc等等

⑥EndPaint(hWnd,&PtStr)结束画图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值