本文是,截图: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;
}