windows编程中画笔与画刷

转自:http://blog.csdn.net/wangjian8006/article/details/7471686

#include <windows.h>
#include <iostream.h>
//声明窗口函数原型
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
BOOL Initinstance(HINSTANCE hInstance,int nCmdShow);
void MyPaint(HDC hdc);
ATOM MyRegisterClass(HINSTANCE hInstance);

HINSTANCE hInst;
HPEN hPen[7];
HBRUSH hBru[7];
int sPen[7]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,PS_NULL,PS_INSIDEFRAME};
int sBru[7]={HS_VERTICAL,HS_HORIZONTAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_BDIAGONAL};

//--------------------------------------------
//主函数
int WINAPI WinMain(HINSTANCE hInstance,
				   HINSTANCE PreInstance,
				   LPSTR lpCmdLine,
				   int nCmdShow)
{	//定义窗口句柄
	MSG msg;//定义一个用来存储消息的变量

	MyRegisterClass(hInstance);

	if(!Initinstance(hInstance,nCmdShow)) 
		return false;

	while(GetMessage(&msg,NULL,0,0))					//消息循环
	{
		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 = NULL;
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = "canvas";
	wcex.hIconSm = NULL;
	
	return RegisterClassEx(&wcex);
}

BOOL Initinstance(HINSTANCE hInstance,int nCmdShow)
{
	HWND hWnd;
	HDC hdc;
	int i;

	hInst = hInstance;

	hWnd = CreateWindow("canvas","绘图窗口",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

	if(!hWnd) return FALSE;
	MoveWindow(hWnd,10,10,650,350,true);
	ShowWindow(hWnd,nCmdShow);
	UpdateWindow(hWnd);

	for(i=0;i<7;i++)
	{
		hPen[i] = CreatePen(sPen[i],1,RGB(255,0,0));
		if(i==6)
			hBru[i] = CreateSolidBrush(RGB(0,255,0));
		else
			hBru[i] = CreateHatchBrush(sBru[i],RGB(0,255,0));
	}

	hdc = GetDC(hWnd);
	MyPaint(hdc);
	ReleaseDC(hWnd,hdc);

	return TRUE;
}

void MyPaint(HDC hdc)
{
	int i,x1,x2,y;

	for(i=0;i<7;i++)
	{
		y = (i+1) * 30;

		SelectObject(hdc,hPen[i]);
		MoveToEx(hdc,30,y,NULL);
		LineTo(hdc,100,y);
	}
	
	x1 = 120;
	x2 = 180;

	for(i=0;i<7;i++)
	{
		SelectObject(hdc,hBru[i]);
		Rectangle(hdc,x1,30,x2,y);
		x1 += 70;
		x2 += 70;
	}
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	int i;

	switch(message)
	{
		case WM_PAINT:
			{
				hdc = BeginPaint(hWnd,&ps);
				MyPaint(hdc);
				EndPaint(hWnd,&ps);
			}
		break;
		case WM_DESTROY:
			{
				for(i = 0;i < 7 ;i++){
					DeleteObject(hPen[i]);
					DeleteObject(hBru[i]);
				}
				PostQuitMessage(0);
			}
		break;
		default:
			return DefWindowProc(hWnd,message,wParam,lParam);
	}
	return 0;
}


转自:http://blog.csdn.net/wangjian8006/article/details/7471686

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值