相关代码
// 颜色点的绘制和获取
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 500 );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
}
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
--------------------------------------------------------------------------------
直线和弧的绘制
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 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, 100,
60, 240 );
LineTo( hDC, 200, 200 );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
case ID_ARC:
DrawArc( hDC );
break;
}
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
case ID_ARC:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
--------------------------------------------------------------------------------
折线的绘制
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 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, 100,
60, 240 );
LineTo( hDC, 200, 200 );
}
void DrawPolyLine( HDC hDC )
{
POINT ptPolyLine[3] = { 0 };
ptPolyLine[0].x = 100;
ptPolyLine[0].y = 100;
ptPolyLine[1].x = 200;
ptPolyLine[1].y = 100;
ptPolyLine[2].x = 100;
ptPolyLine[2].y = 200;
Polyline( hDC, ptPolyLine, 3 );
PolylineTo( hDC, ptPolyLine, 3 );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
case ID_ARC:
DrawArc( hDC );
break;
case ID_POLYLINE:
DrawPolyLine( hDC );
break;
}
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
case ID_ARC:
case ID_POLYLINE:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
--------------------------------------------------------------------------------
Bizer曲线绘制
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 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, 100,
60, 240 );
LineTo( hDC, 200, 200 );
}
void DrawPolyLine( HDC hDC )
{
POINT ptPolyLine[7] = { 0 };
ptPolyLine[0].x = 100;
ptPolyLine[0].y = 100;
ptPolyLine[1].x = 200;
ptPolyLine[1].y = 100;
ptPolyLine[2].x = 200;
ptPolyLine[2].y = 200;
ptPolyLine[3].x = 300;
ptPolyLine[3].y = 200;
ptPolyLine[4].x = 300;
ptPolyLine[4].y = 300;
ptPolyLine[5].x = 400;
ptPolyLine[5].y = 300;
ptPolyLine[6].x = 400;
ptPolyLine[6].y = 400;
//Polyline( hDC, ptPolyLine, 7 );
//PolylineTo( hDC, ptPolyLine, 3 );
DWORD nGroup[] = { 4, 3 };
PolyPolyline( hDC, ptPolyLine,nGroup, 2 );
}
void DrawBizer( HDC hDC )
{
POINT ptBizer[7] = { 0 };
ptBizer[0].x = 100; //端点
ptBizer[0].y = 100; //
ptBizer[1].x = 100; //控制点
ptBizer[1].y = 50; //
ptBizer[2].x = 300; //控制点
ptBizer[2].y = 150; //
ptBizer[3].x = 300; //端点
ptBizer[3].y = 100; //
ptBizer[4].x = 300; //控制点
ptBizer[4].y = 400;
ptBizer[5].x = 400; //控制点
ptBizer[5].y = 200;
ptBizer[6].x = 500; //端点
ptBizer[6].y = 300;
PolyBezier( hDC, ptBizer, 7 );
MoveToEx( hDC, ptBizer[0].x,
ptBizer[0].y, NULL );
LineTo( hDC, ptBizer[1].x, ptBizer[1].y );
MoveToEx( hDC, ptBizer[3].x,
ptBizer[3].y, NULL );
LineTo( hDC, ptBizer[2].x, ptBizer[2].y );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
case ID_ARC:
DrawArc( hDC );
break;
case ID_POLYLINE:
DrawPolyLine( hDC );
break;
case ID_DRAWBIZER:
DrawBizer( hDC );
break;
}
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
case ID_ARC:
case ID_POLYLINE:
case ID_DRAWBIZER:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
--------------------------------------------------------------------------------
矩形-椭圆-圆-饼绘制
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 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, 100,
60, 240 );
LineTo( hDC, 200, 200 );
}
void DrawPolyLine( HDC hDC )
{
POINT ptPolyLine[7] = { 0 };
ptPolyLine[0].x = 100;
ptPolyLine[0].y = 100;
ptPolyLine[1].x = 200;
ptPolyLine[1].y = 100;
ptPolyLine[2].x = 200;
ptPolyLine[2].y = 200;
ptPolyLine[3].x = 300;
ptPolyLine[3].y = 200;
ptPolyLine[4].x = 300;
ptPolyLine[4].y = 300;
ptPolyLine[5].x = 400;
ptPolyLine[5].y = 300;
ptPolyLine[6].x = 400;
ptPolyLine[6].y = 400;
//Polyline( hDC, ptPolyLine, 7 );
//PolylineTo( hDC, ptPolyLine, 3 );
DWORD nGroup[] = { 4, 3 };
PolyPolyline( hDC, ptPolyLine,nGroup, 2 );
}
void DrawBizer( HDC hDC )
{
POINT ptBizer[7] = { 0 };
ptBizer[0].x = 100; //端点
ptBizer[0].y = 100; //
ptBizer[1].x = 100; //控制点
ptBizer[1].y = 50; //
ptBizer[2].x = 300; //控制点
ptBizer[2].y = 150; //
ptBizer[3].x = 300; //端点
ptBizer[3].y = 100; //
ptBizer[4].x = 300; //控制点
ptBizer[4].y = 400;
ptBizer[5].x = 400; //控制点
ptBizer[5].y = 200;
ptBizer[6].x = 500; //端点
ptBizer[6].y = 300;
PolyBezier( hDC, ptBizer, 7 );
MoveToEx( hDC, ptBizer[0].x,
ptBizer[0].y, NULL );
LineTo( hDC, ptBizer[1].x, ptBizer[1].y );
MoveToEx( hDC, ptBizer[3].x,
ptBizer[3].y, NULL );
LineTo( hDC, ptBizer[2].x, ptBizer[2].y );
}
void DrawPolyDraw( HDC hDC )
{
POINT ptDraw[4] = { 0 };
ptDraw[0].x = 100;
ptDraw[0].y = 100;
ptDraw[1].x = 200;
ptDraw[1].y = 100;
ptDraw[2].x = 200;
ptDraw[2].y = 200;
ptDraw[3].x = 300;
ptDraw[3].y = 200;
BYTE ptType[4] = {0};
ptType[0] = PT_MOVETO;
ptType[1] = PT_LINETO;
ptType[2] = PT_MOVETO;
ptType[3] = PT_LINETO;
PolyDraw( hDC, ptDraw, ptType, 4 );
}
void DrawRect( HDC hDC )
{ //矩形
Rectangle( hDC, 100, 100, 200, 200 );
//带圆角矩形
RoundRect( hDC, 300, 100, 400, 200, 50, 50 );
}
void DrawEllipse( HDC hDC )
{ //圆
Ellipse( hDC, 100, 100, 200, 200 );
//椭圆
Ellipse( hDC, 300, 100, 500, 200 );
}
void DrawPie( HDC hDC )
{
Pie( hDC, 100, 100, 500, 400,
500, 100, 100, 100 );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
case ID_ARC:
DrawArc( hDC );
break;
case ID_POLYLINE:
DrawPolyLine( hDC );
break;
case ID_DRAWBIZER:
DrawBizer( hDC );
break;
case ID_POLYDRAW:
DrawPolyDraw( hDC );
break;
case ID_RECT:
DrawRect( hDC );
break;
case ID_ELLIPSE:
DrawEllipse( hDC );
break;
case ID_PIE:
DrawPie( hDC );
break;
}
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
case ID_ARC:
case ID_POLYLINE:
case ID_DRAWBIZER:
case ID_POLYDRAW:
case ID_RECT:
case ID_ELLIPSE:
case ID_PIE:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
--------------------------------------------------------------------------------
弦和多边形绘制-画笔
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
COLORREF g_nPenColor = RGB( 0, 0, 0 );
int g_nPenStyle = PS_SOLID;
int g_nPenWdith = 1;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 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, 100,
60, 240 );
LineTo( hDC, 200, 200 );
}
void DrawPolyLine( HDC hDC )
{
POINT ptPolyLine[7] = { 0 };
ptPolyLine[0].x = 100;
ptPolyLine[0].y = 100;
ptPolyLine[1].x = 200;
ptPolyLine[1].y = 100;
ptPolyLine[2].x = 200;
ptPolyLine[2].y = 200;
ptPolyLine[3].x = 300;
ptPolyLine[3].y = 200;
ptPolyLine[4].x = 300;
ptPolyLine[4].y = 300;
ptPolyLine[5].x = 400;
ptPolyLine[5].y = 300;
ptPolyLine[6].x = 400;
ptPolyLine[6].y = 400;
//Polyline( hDC, ptPolyLine, 7 );
//PolylineTo( hDC, ptPolyLine, 3 );
DWORD nGroup[] = { 4, 3 };
PolyPolyline( hDC, ptPolyLine,nGroup, 2 );
}
void DrawBizer( HDC hDC )
{
POINT ptBizer[7] = { 0 };
ptBizer[0].x = 100; //端点
ptBizer[0].y = 100; //
ptBizer[1].x = 100; //控制点
ptBizer[1].y = 50; //
ptBizer[2].x = 300; //控制点
ptBizer[2].y = 150; //
ptBizer[3].x = 300; //端点
ptBizer[3].y = 100; //
ptBizer[4].x = 300; //控制点
ptBizer[4].y = 400;
ptBizer[5].x = 400; //控制点
ptBizer[5].y = 200;
ptBizer[6].x = 500; //端点
ptBizer[6].y = 300;
PolyBezier( hDC, ptBizer, 7 );
MoveToEx( hDC, ptBizer[0].x,
ptBizer[0].y, NULL );
LineTo( hDC, ptBizer[1].x, ptBizer[1].y );
MoveToEx( hDC, ptBizer[3].x,
ptBizer[3].y, NULL );
LineTo( hDC, ptBizer[2].x, ptBizer[2].y );
}
void DrawPolyDraw( HDC hDC )
{
POINT ptDraw[4] = { 0 };
ptDraw[0].x = 100;
ptDraw[0].y = 100;
ptDraw[1].x = 200;
ptDraw[1].y = 100;
ptDraw[2].x = 200;
ptDraw[2].y = 200;
ptDraw[3].x = 300;
ptDraw[3].y = 200;
BYTE ptType[4] = {0};
ptType[0] = PT_MOVETO;
ptType[1] = PT_LINETO;
ptType[2] = PT_MOVETO;
ptType[3] = PT_LINETO;
PolyDraw( hDC, ptDraw, ptType, 4 );
}
void DrawRect( HDC hDC )
{ //矩形
Rectangle( hDC, 100, 100, 200, 200 );
//带圆角矩形
RoundRect( hDC, 300, 100, 400, 200, 50, 50 );
}
void DrawEllipse( HDC hDC )
{ //圆
Ellipse( hDC, 100, 100, 200, 200 );
//椭圆
Ellipse( hDC, 300, 100, 500, 200 );
}
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 DrawPloygon( HDC hDC )
{
POINT ptPloygon[4] = { 0 };
ptPloygon[0].x = 100;
ptPloygon[0].y = 100;
ptPloygon[1].x = 200;
ptPloygon[1].y = 100;
ptPloygon[3].x = 600;
ptPloygon[3].y = 300;
ptPloygon[2].x = 500;
ptPloygon[2].y = 300;
Polygon( hDC, ptPloygon, 4 );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
//创建画笔
HPEN hPen = CreatePen( g_nPenStyle,
g_nPenWdith, g_nPenColor );
//设置画笔到当前DC
HPEN hOldPen = (HPEN)
SelectObject( hDC, hPen );
//绘制图形
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
case ID_ARC:
DrawArc( hDC );
break;
case ID_POLYLINE:
DrawPolyLine( hDC );
break;
case ID_DRAWBIZER:
DrawBizer( hDC );
break;
case ID_POLYDRAW:
DrawPolyDraw( hDC );
break;
case ID_RECT:
DrawRect( hDC );
break;
case ID_ELLIPSE:
DrawEllipse( hDC );
break;
case ID_PIE:
DrawPie( hDC );
break;
case ID_CHORD:
DrawChord( hDC );
break;
case ID_POLYGON:
DrawPloygon( hDC );
break;
}
//取出画笔
SelectObject( hDC, hOldPen );
//销毁画笔
DeleteObject( hPen );
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
case ID_ARC:
case ID_POLYLINE:
case ID_DRAWBIZER:
case ID_POLYDRAW:
case ID_RECT:
case ID_ELLIPSE:
case ID_PIE:
case ID_CHORD:
case ID_POLYGON:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_REDPEN:
//保存画笔颜色
g_nPenColor = RGB( 255, 0, 0 );
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_PSDASH:
g_nPenStyle = PS_DASH;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_PEN5:
g_nPenWdith = 5;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_PEN1:
g_nPenWdith = 1;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
--------------------------------------------------------------------------------
画刷
// WinDraw.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include "stdio.h"
#include "resource.h"
HINSTANCE g_hInst = NULL;
int g_nDrawType = 0;
COLORREF g_nPenColor = RGB( 0, 0, 0 );
int g_nPenStyle = PS_SOLID;
int g_nPenWdith = 1;
COLORREF g_nBrushColor = RGB( 255, 255, 255 );
int g_nBrushStyle = 0xFFFFFFFF;
void DrawPixel( HDC hDC )
{
COLORREF nColor = RGB( 0, 0, 0 );
SetPixel( hDC, 100, 100, nColor );
}
void GetPixelColor( HDC hDC )
{ //获取点的颜色
COLORREF nColor =
GetPixel( hDC, 100, 100 );
//获取颜色的三色值
int nRed = GetRValue( nColor );
int nGreen = GetGValue( nColor );
int nBlue = GetBValue( nColor );
CHAR szText[260] = { 0 };
sprintf( szText,
"COLOR=%08X, RED=%d GREEN=%d BLUE=%d",
nColor, nRed, nGreen, nBlue );
MessageBox( NULL, szText, "WinDraw", MB_OK );
}
void DrawLine( HDC hDC )
{
MoveToEx( hDC, 0, 0, NULL );
LineTo( hDC, 500, 500 );
MoveToEx( hDC, 500, 0, NULL );
LineTo( hDC, 0, 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, 100,
60, 240 );
LineTo( hDC, 200, 200 );
}
void DrawPolyLine( HDC hDC )
{
POINT ptPolyLine[7] = { 0 };
ptPolyLine[0].x = 100;
ptPolyLine[0].y = 100;
ptPolyLine[1].x = 200;
ptPolyLine[1].y = 100;
ptPolyLine[2].x = 200;
ptPolyLine[2].y = 200;
ptPolyLine[3].x = 300;
ptPolyLine[3].y = 200;
ptPolyLine[4].x = 300;
ptPolyLine[4].y = 300;
ptPolyLine[5].x = 400;
ptPolyLine[5].y = 300;
ptPolyLine[6].x = 400;
ptPolyLine[6].y = 400;
//Polyline( hDC, ptPolyLine, 7 );
//PolylineTo( hDC, ptPolyLine, 3 );
DWORD nGroup[] = { 4, 3 };
PolyPolyline( hDC, ptPolyLine,nGroup, 2 );
}
void DrawBizer( HDC hDC )
{
POINT ptBizer[7] = { 0 };
ptBizer[0].x = 100; //端点
ptBizer[0].y = 100; //
ptBizer[1].x = 100; //控制点
ptBizer[1].y = 50; //
ptBizer[2].x = 300; //控制点
ptBizer[2].y = 150; //
ptBizer[3].x = 300; //端点
ptBizer[3].y = 100; //
ptBizer[4].x = 300; //控制点
ptBizer[4].y = 400;
ptBizer[5].x = 400; //控制点
ptBizer[5].y = 200;
ptBizer[6].x = 500; //端点
ptBizer[6].y = 300;
PolyBezier( hDC, ptBizer, 7 );
MoveToEx( hDC, ptBizer[0].x,
ptBizer[0].y, NULL );
LineTo( hDC, ptBizer[1].x, ptBizer[1].y );
MoveToEx( hDC, ptBizer[3].x,
ptBizer[3].y, NULL );
LineTo( hDC, ptBizer[2].x, ptBizer[2].y );
}
void DrawPolyDraw( HDC hDC )
{
POINT ptDraw[4] = { 0 };
ptDraw[0].x = 100;
ptDraw[0].y = 100;
ptDraw[1].x = 200;
ptDraw[1].y = 100;
ptDraw[2].x = 200;
ptDraw[2].y = 200;
ptDraw[3].x = 300;
ptDraw[3].y = 200;
BYTE ptType[4] = {0};
ptType[0] = PT_MOVETO;
ptType[1] = PT_LINETO;
ptType[2] = PT_MOVETO;
ptType[3] = PT_LINETO;
PolyDraw( hDC, ptDraw, ptType, 4 );
}
void DrawRect( HDC hDC )
{ //矩形
Rectangle( hDC, 100, 100, 200, 200 );
//带圆角矩形
RoundRect( hDC, 300, 100, 400, 200, 50, 50 );
}
void DrawEllipse( HDC hDC )
{ //圆
Ellipse( hDC, 100, 100, 200, 200 );
//椭圆
Ellipse( hDC, 300, 100, 500, 200 );
}
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 DrawPloygon( HDC hDC )
{
POINT ptPloygon[4] = { 0 };
ptPloygon[0].x = 100;
ptPloygon[0].y = 100;
ptPloygon[1].x = 200;
ptPloygon[1].y = 100;
ptPloygon[3].x = 600;
ptPloygon[3].y = 300;
ptPloygon[2].x = 500;
ptPloygon[2].y = 300;
Polygon( hDC, ptPloygon, 4 );
}
void OnPaint( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
PAINTSTRUCT ps = { 0 };
HDC hDC = BeginPaint( hWnd, &ps );
//创建画笔
HPEN hPen = CreatePen( g_nPenStyle,
g_nPenWdith, g_nPenColor );
//设置画笔到当前DC
HPEN hOldPen = (HPEN)
SelectObject( hDC, hPen );
//创建画刷
HBRUSH hBrush = NULL;
if( g_nBrushStyle == 0xFFFFFFFF )
{
hBrush = CreateSolidBrush( g_nBrushColor );
}
else
{
hBrush = CreateHatchBrush(
g_nBrushStyle, g_nBrushColor );
}
//设置画刷到当前DC
HBRUSH hOldBrush = (HBRUSH)
SelectObject( hDC, hBrush );
//绘制图形
switch( g_nDrawType )
{
case ID_SETPIXEL:
DrawPixel( hDC );
break;
case ID_GETPIXEL:
GetPixelColor( hDC );
break;
case ID_LINE:
DrawLine( hDC );
break;
case ID_ARC:
DrawArc( hDC );
break;
case ID_POLYLINE:
DrawPolyLine( hDC );
break;
case ID_DRAWBIZER:
DrawBizer( hDC );
break;
case ID_POLYDRAW:
DrawPolyDraw( hDC );
break;
case ID_RECT:
DrawRect( hDC );
break;
case ID_ELLIPSE:
DrawEllipse( hDC );
break;
case ID_PIE:
DrawPie( hDC );
break;
case ID_CHORD:
DrawChord( hDC );
break;
case ID_POLYGON:
DrawPloygon( hDC );
break;
}
//取出画刷
SelectObject( hDC, hOldBrush );
//删除画刷
DeleteObject( hBrush );
//取出画笔
SelectObject( hDC, hOldPen );
//销毁画笔
DeleteObject( hPen );
EndPaint( hWnd, &ps );
}
void OnCommand( HWND hWnd, UINT nMsg,
WPARAM wParam, LPARAM lParam )
{
int nCmdID = LOWORD( wParam );
switch( nCmdID )
{
case ID_SETPIXEL:
case ID_GETPIXEL:
case ID_LINE:
case ID_ARC:
case ID_POLYLINE:
case ID_DRAWBIZER:
case ID_POLYDRAW:
case ID_RECT:
case ID_ELLIPSE:
case ID_PIE:
case ID_CHORD:
case ID_POLYGON:
//保存绘制图形类型
g_nDrawType = nCmdID;
//刷新窗口
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_REDPEN:
//保存画笔颜色
g_nPenColor = RGB( 255, 0, 0 );
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_PSDASH:
g_nPenStyle = PS_DASH;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_PEN5:
g_nPenWdith = 5;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_PEN1:
g_nPenWdith = 1;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_REDBRUSH:
g_nBrushColor = RGB( 255, 0, 0 );
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_SOLIDBRUSH:
g_nBrushStyle = 0xFFFFFFFF;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_HSDIAGCROSS:
g_nBrushStyle = HS_DIAGCROSS;
InvalidateRect( hWnd, NULL, TRUE );
break;
case ID_EXIT:
PostQuitMessage( 0 );
break;
}
}
LRESULT CALLBACK WndProc( HWND hWnd,
UINT nMsg,
WPARAM wParam,
LPARAM lParam )
{
switch( nMsg )
{
case WM_PAINT:
OnPaint( hWnd, nMsg, wParam, lParam );
break;
case WM_COMMAND:
OnCommand( hWnd, nMsg, wParam, lParam );
break;
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
}
return DefWindowProc( hWnd, nMsg,
wParam, lParam );
}
BOOL RegisterWnd( LPSTR pszClassName )
{
WNDCLASSEX wce = { 0 };
wce.cbSize = sizeof( wce );
wce.cbClsExtra = 0;
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;
ATOM nAtom = RegisterClassEx( &wce );
if( 0 == nAtom )
{
return FALSE;
}
return TRUE;
}
HWND CreateWnd( LPSTR pszClassName )
{
HMENU hMenu = LoadMenu( g_hInst,
MAKEINTRESOURCE(IDR_MAIN) );
HWND hWnd = CreateWindowEx( 0,
pszClassName, "MyWnd",
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, hMenu, g_hInst,
NULL );
return hWnd;
}
void DisplayWnd( HWND hWnd )
{
ShowWindow( hWnd, SW_SHOW );
UpdateWindow( hWnd );
}
void Message( )
{
MSG msg = { 0 };
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
g_hInst = hInstance;
RegisterWnd( "MYWND" );
HWND hWnd = CreateWnd( "MYWND" );
DisplayWnd( hWnd );
Message( );
return 0;
}
效果展示