win32绘图1_绘图基础知识

WINDOWS 绘图流程

1.1 创建设备描述表(DC),创建画笔,(如果要填充,创建画刷),将画笔画刷加到设备中(DC);

使用API绘图(画圆,矩形,sin曲线等);

绘制完毕后,删除画笔画刷,释放画图环境。

1.2 画笔

画笔的作用:

设置线条的样式,宽度,颜色;

画笔的定义:两种方式

方法1:获取系统画笔。

		HPEN = hpen;
		hpen = (HPEN)GetStockObject(NULL_PEN);		

		系统画笔只有四种颜色:
		WHITE_PEN    BLACK_PEN    DC_PEN    NULL_PEN
 
	方法2:自定义画笔,使用CreatePen函数。		
		HPEN = hpen;
		hpen = CreatePen
			(
			int penstyle,	//画笔样式
			int width,	//画笔宽度
			COLORREF rgbcolor	//画笔颜色
				)
	画笔在定义完之后,要使用SeleteObject函数加到设备中;
	在使用完画笔之后,要使用DeleteObject函数删除画笔。
1.3画刷
	画刷的作用:
		填充封闭图形。
	创建画刷:
		HBRUSH hBrush;
		hBrush =(HBRUSH)GetStockObject(BLACK_BRUSH);
		还有两个函数:
		    CreateSolidBrush	创建实心画刷
		    CreateHatchBrush	创建阴影线画刷
	使用画刷:
		使用SelectObject函数将画刷加到设备中。
删除画刷: 使用完之后要删除画刷,DelectObject函数将画刷删除
1.4绘图信息的结构体变量
	在使用绘图前,要定义绘图绘图环境结构体。
	PAINTSTRUCT ptstr;
1.5 窗口工作区
	windows为窗口的工作区提供了坐标系,始终以工作区的左上角为原点,
	x轴的正方向从左往右,y轴正方向从上到下。
1.6一个画圆的例子:
	椭圆圆的API函数:
	BOOL Arc(
  	_In_ HDC hdc,		//设备环境句柄
  	_In_ int nLeftRect,	//正方形左上角x坐标
  	_In_ int nTopRect,	//正方形左上角y坐标
  	_In_ int nRightRect,	//正方形右下角x坐标
 	 _In_ int nBottomRect,	//正方形右下角y坐标
  	_In_ int nXStartArc,	//圆弧起点x坐标
  	_In_ int nYStartArc,	//圆弧起点y坐标
  	_In_ int nXEndArc,	//圆弧终点x坐标
  	_In_ int nYEndArc	//原话终点y坐标
	);
//代码区
#include <windows.h>
#include <stdio.h>
#include "resource.h"

//窗口消息处理
INT_PTR CALLBACK TheProc(HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hDC;		//环境设备句柄
	HBRUSH hBrush;	//画刷句柄
	HPEN hPen;		//画笔句柄
	PAINTSTRUCT ptstr;		//绘图信息的结构体变量

	switch(message)
	{		
		case WM_COMMAND:
				if ( LOWORD(wParam) == IDCANCEL) EndDialog(hWnd,IDD_DIALOG1);
				break;

		case WM_PAINT:
			{
				hDC = BeginPaint(hWnd,&ptstr);				//设置设备
				hPen = CreatePen(PS_DASH,5,RGB(100,100,100));		//创建画笔
				hBrush =(HBRUSH)CreateSolidBrush(RGB(100,100,0));	//创建实心画刷
				SelectObject(hDC,hPen);			//画笔加到设备中
				SelectObject(hDC,hBrush);		//画刷加到设备中

				//画
				Arc(hDC, 200, 200, 500, 300, 500,250, 500,250); 

				//完毕删除画笔,画刷,释放画图环境
				DeleteObject(hPen);				//删除画笔
				DeleteObject(hBrush);
				EndPaint(hWnd,&ptstr);		//结束画图
			
			}
			return 0;

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

		default:				//其他消息
			return DefWindowProc(hWnd,message,wParam,lParam);
	}

	return (0);
}

//主窗口
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
	//资源总管,对话框id,父窗口,回调函数
	DialogBox(hInstance,(LPCTSTR) IDD_DIALOG1,NULL,TheProc);
	return 0;
}






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值