Windows编程基础 第七章 windows绘图 windows绘图设备

本文是,截图:Windows编程基础  第七章    windows绘图    windows绘图设备

本文的下载地址是:http://yunpan.cn/cd59vpmjJ5pPj  访问密码 3abc















// windows09.cpp : 定义应用程序的入口点。
//
#include "windows09.h"
#include "stdafx.h"
#include "resource.h"
#include "stdio.h"
#include "windows.h"

HINSTANCE g_hInst=NULL;
INT   g_hDrawType=0;
INT  g_PenwWidth=4;
INT  g_style=PS_SOLID;
COLORREF  g_PenColor=RGB(255,0,0);
COLORREF g_BrushColor=RGB(0,155,255);
INT g_BrushStyle=0XFFFFFFFF;



VOID DrawPoint(HDC hDC)
{
	COLORREF  nColor=RGB(255,0,0);
	SetPixel(hDC,100,100,nColor);
	SetPixel(hDC,100,101,nColor);
	SetPixel(hDC,100,102,nColor);
	SetPixel(hDC,100,103,nColor);
	SetPixel(hDC,100,104,nColor);
	SetPixel(hDC,100,105,nColor);
	SetPixel(hDC,100,106,nColor);
	SetPixel(hDC,100,107,nColor);
	SetPixel(hDC,100,108,nColor);
	SetPixel(hDC,100,109,nColor);
}
VOID GetPoint(HDC hDC)
{
	COLORREF nColor=GetPixel(hDC,100,100);
	int nRed=GetRValue(nColor);
	int nGreen=GetGValue(nColor);
	int nBlue=GetBValue(nColor);
	TCHAR  szText[200]=TEXT("");
	_stprintf(szText,TEXT("这个点的颜色的数值:%08X,这个点的红色的数值是:%d,这个点的绿色的数值是:%d,这个点的蓝色的数值是:%d"),nColor,nRed,nGreen,nBlue);
	MessageBox(NULL,szText,TEXT("获取的点的颜色信息的数值是:"),MB_OKCANCEL);
}
VOID DrawLine(HDC hDC)
{//注意当前点在某些位置是改变的在某些位置是不改变的。
	MoveToEx(hDC,0,0,NULL);//移动点的初始点位置
	LineTo(hDC,500,500);//这个画线函数会改变起始点的位置
	MoveToEx(hDC,0,500,NULL);
	LineTo(hDC,500,500);
}

VOID DrawArc(HDC hDC)
{
	SetArcDirection(hDC,AD_COUNTERCLOCKWISE);
	Arc(hDC,400,200,500,300,500,200,400,200);
	SetArcDirection(hDC,AD_CLOCKWISE);
	Arc(hDC,500,200,600,300,600,200,500,200);
	MoveToEx(hDC,200,200,NULL);
	AngleArc(hDC,200,200,200,50,270);
	LineTo(hDC,200,200);
}

VOID DrawPloyLine(HDC hDC)
{
	POINT pt[3]={0};
	pt[0].x=100;
	pt[0].y=100;
	pt[1].x=200;
	pt[1].y=100;
	pt[2].x=100;
	pt[2].y=200;
	//Polyline(hDC,pt,3);
	PolylineTo(hDC,pt,3);
}

VOID MyPloyPloyLine(HDC hDC)
{
	POINT pt[7]={0};
	pt[0].x=100;
	pt[0].y=100;
	pt[1].x=200;
	pt[1].y=100;
	pt[2].x=100;
	pt[2].y=200;
	pt[3].x=300;
	pt[3].y=200;
	pt[4].x=300;
	pt[4].y=300;
	pt[5].x=400;
	pt[5].y=300;
	pt[6].x=400;
	pt[6].y=400;
	DWORD nGroup[2]={3,4};
	/*
	 PolyPolyline(hDC,&pt,nGroup,2);
	“PolyPolyline”: 不能将参数 2 从“POINT (*)[7]”转换为“const POINT *”
	*/
	PolyPolyline(hDC,pt,nGroup,2);
}

VOID DrawBizer(HDC hDC)
{
	POINT pt[4]={0};
	pt[0].x=100;
	pt[0].y=100;
	pt[1].x=200;//控制点
	pt[1].y=100;
	pt[2].x=100;//控制点
	pt[2].y=200;
	pt[3].x=300;
	pt[3].y=200;
	PolyBezier(hDC,pt,4);
	//画出两条切线
	MoveToEx(hDC,pt[0].x,pt[0].y,NULL);
	LineTo(hDC,pt[1].x,pt[1].y);
	MoveToEx(hDC,pt[2].x,pt[2].y,NULL);
	LineTo(hDC,pt[3].x,pt[3].y);
}


VOID DrawRect(HDC hDC)
{
	Rectangle(hDC,100,100,300,300);
}

VOID DrawROUNDRect(HDC hDC)
{
	RoundRect(hDC,100,100,300,300,200,200);
}

VOID DrawROUND(HDC hDC)
{
	Ellipse(hDC,100,100,300,300);
}

VOID DrawEllipse(HDC hDC)
{
	Ellipse(hDC,500,200,200,300);
}

VOID DrawPie(HDC hDC)
{
	Pie(hDC,100,100,500,400,500,100,100,100);
}
VOID DrawChord(HDC hDC)
{
	Chord(hDC,100,100,500,400,500,100,100,100);
}

VOID DrawPloyDraw(HDC hDC)
{
	POINT pt[7]={0};
	pt[0].x=100;
	pt[0].y=100;
	pt[1].x=200;
	pt[1].y=100;
	pt[2].x=100;
	pt[2].y=200;
	pt[3].x=300;
	pt[3].y=400;
	pt[4].x=500;
	pt[4].y=500;
	pt[5].x=500;
	pt[5].y=200;
	pt[6].x=400;
	pt[6].y=600;
	
	BYTE PTTO[7]={0};
	PTTO[0]=PT_MOVETO;
	PTTO[1]=PT_LINETO;
	PTTO[2]=PT_MOVETO;
	PTTO[3]=PT_LINETO;
	PTTO[4]=PT_BEZIERTO;
	PTTO[5]=PT_BEZIERTO;
	PTTO[6]=PT_BEZIERTO;
	PolyDraw(hDC,pt,PTTO,7);
}

VOID DrawPloyGon(HDC hDC)
{
	POINT pt[5]={0};
	pt[0].x=100;
	pt[0].y=100;
	pt[1].x=200;
	pt[1].y=100;
	pt[2].x=100;
	pt[2].y=200;
	pt[3].x=300;
	pt[3].y=400;
	pt[4].x=500;
	pt[4].y=500;
	Polygon(hDC,pt,5);
}
VOID OnCommand(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	int nCmd=LOWORD(wParam);//取得菜单项ID
	InvalidateRect(hWnd,NULL,TRUE);
	switch(nCmd)
	{
	case IDM_DRAWPOINT:
	case ID_GETPOINT: 
	case ID_DRAWLINE:
	case ID_DRAWARC:
	case ID_DrawPloyLine:
	case ID_PloyPloyLine:
	case ID_BIZER:
	case ID_RECT:
	case ID_ROUNDRECT:
	case ID_ROUND:
	case ID_ECLIPSE:
	case ID_PIE:
	case ID_CHORD:
	case ID_PLOYDRAW:
	case ID_POLYGON:
		g_hDrawType=nCmd;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32804:
		g_PenColor=RGB(255,0,0);
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32805:
		g_style=PS_SOLID;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32817:
		g_PenwWidth=5;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32827:
		g_PenwWidth=1;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32808:
		g_BrushColor=RGB(25,0,0);
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32809:
		g_BrushStyle=0XFFFFFFFF;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case ID_32810:
		g_BrushStyle=HS_DIAGCROSS;
		InvalidateRect(hWnd,NULL,TRUE);
		break;
	case IDM_EXIT:
		PostQuitMessage(0);
		break;
	}
	//InvalidateRect(hWnd,NULL,TRUE);
}

VOID OnPaint(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	PAINTSTRUCT ps={0};
	HDC hDC=BeginPaint(hWnd,&ps);
	HPEN hPen=CreatePen(g_style,g_PenwWidth,g_PenColor);
	HPEN hPenOld=(HPEN)SelectObject(hDC,hPen);
	HBRUSH hBrush=NULL;
	if (g_BrushStyle==0XFFFFFFFF)
	{
		CreateSolidBrush(g_BrushColor);
	}
	else
	{
		CreateHatchBrush(g_BrushStyle,g_BrushColor);
	}
	HBRUSH hBrushOld=(HBRUSH)SelectObject(hDC,hBrush);
	switch(g_hDrawType)
	{
	case IDM_DRAWPOINT:
		 DrawPoint(hDC);
		break;
	case ID_GETPOINT: 
		GetPoint(hDC);
		break;
	case ID_DRAWLINE:
		DrawLine(hDC);
		break;
	case ID_DRAWARC:
		DrawArc( hDC);
		break;
	case ID_DrawPloyLine:
		DrawPloyLine(hDC);
		break;
	case ID_PloyPloyLine:
		MyPloyPloyLine(hDC);
		break;
	case ID_BIZER:
		DrawBizer(hDC);
		break;
	case ID_RECT:
		DrawRect(hDC);
		break;
	case ID_ROUNDRECT:
		DrawROUNDRect(hDC);
		break;
	case ID_ROUND:
		DrawROUND(hDC);
		break;
	case ID_ECLIPSE:
		DrawEllipse(hDC);
		break;
	case ID_PIE:
		DrawPie(hDC);
		break;
	case ID_CHORD:
		DrawChord(hDC);
		break;
	case ID_PLOYDRAW:
		DrawPloyDraw(hDC);
		break;
	case ID_POLYGON:
		DrawPloyGon(hDC);
		break;
	}
	SelectObject(hDC,hBrushOld);
	DeleteObject(hBrushOld);
	SelectObject(hDC,hPenOld);
	DeleteObject(hPen);
	EndPaint(hWnd,&ps);
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{

	switch(uMsg)
	{
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_COMMAND://用来处理菜单消息
		OnCommand(hWnd,uMsg,wParam,lParam);
		break;
	case WM_PAINT:
		OnPaint(hWnd,uMsg,wParam,lParam);
		break;

	}
	return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

BOOL   RegisterWnd(TCHAR * pszClassName	)
{
	WNDCLASSEX  wce={0};
	wce.cbClsExtra=0;
	wce.cbSize=sizeof(wce);
	wce.cbWndExtra=0;
	wce.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
	wce.hCursor=NULL;
	wce.hIcon=NULL;
	wce.hIconSm=NULL;
	wce.hInstance=g_hInst;
	wce.lpfnWndProc=WndProc;
	wce.lpszClassName=pszClassName;
	wce.lpszMenuName=NULL;
	wce.style=CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS;

	ATOM   result=RegisterClassEx(&wce);
	if (result==0)
	{
		MessageBox(NULL,TEXT("窗口类注册失败!"),TEXT("窗口类注册失败!"),MB_OK);
		return FALSE;
	}
	return TRUE;
}

VOID  DisplayWindow(HWND hWnd)    
{
	ShowWindow(hWnd,SW_SHOW);
	UpdateWindow(hWnd);
}

VOID Message(HWND hWnd)
{
	HACCEL hAccel=LoadAccelerators(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS09));
	MSG  msg={0};
	while(GetMessage(&msg,NULL,0,0))
	{
		TranslateAccelerator(hWnd,hAccel,&msg);
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
}

HWND  CreateMyWindow(TCHAR *  pszClassName)
{
	//加载字符串资源
	TCHAR szText[100]=TEXT("");
	LoadString(g_hInst,IDS_STRINGMain,szText,100);
	//加载菜单资源
	HMENU hMenu=LoadMenu(g_hInst,MAKEINTRESOURCE(IDC_WINDOWS09));
	HWND hWndNew=CreateWindowEx(0,pszClassName,szText,WS_OVERLAPPEDWINDOW|WS_THICKFRAME,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hMenu,g_hInst,NULL);
	return hWndNew;
}


INT WINAPI  WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd )
{

	RegisterWnd(TEXT("MyWnd"));
	HWND hWnd=CreateMyWindow(TEXT("MyWnd"));
	DisplayWindow(hWnd);
	Message(hWnd);
	return TRUE;
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值