#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
//声明全局数据:类名
static TCHAR szClassName[] = TEXT("MyWindows");
HWND hwnd;
MSG msg;
//注册窗口类
WNDCLASS wndclass;
wndclass.hInstance = hInstance;
wndclass.lpszClassName = szClassName;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.lpfnWndProc = WndProc;
wndclass.lpszMenuName = NULL;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wndclass.style = CS_HREDRAW;
if (!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("this program must run in Windows NT!"), szClassName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow(
szClassName,
TEXT("MyFirstPractice"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, nShowCmd);
UpdateWindow(hwnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
static int cxClient, cyClient;
static int cxClick, cyClick;
static POINT apt[4];
static int flag = 0;
switch (message)
{
case WM_SIZE:
cxClient = LOWORD(lParam);
cyClient = HIWORD(lParam);
//贝塞尔曲线需要四个点
apt[0].x = cxClient / 4;
apt[0].y = cyClient / 2;
apt[1].x = cxClient / 2;
apt[1].y = cyClient / 4;
apt[2].x = cxClient / 2;
apt[2].y = cyClient *3/4;
apt[3].x = cxClient *3/ 4;
apt[3].y = cyClient / 2;
break;
case WM_PAINT:
hdc = BeginPaint(hwnd,&ps);
SelectObject(hdc, GetStockObject(BLACK_PEN));
//画贝塞尔曲线
PolyBezier(hdc, apt,4);
//边框绘制函数:内部可以填充
//画矩形
SelectObject(hdc, GetStockObject(BLACK_BRUSH));//会填充
Rectangle(hdc, 100, 100, 300, 300);
//画椭圆
SelectObject(hdc, GetStockObject(WHITE_BRUSH));
Ellipse(hdc, 100, 100, 300, 300);
//画矩形,带圆角
SelectObject(hdc, GetStockObject(BLACK_BRUSH));
RoundRect(hdc, 500, 100, 600, 200, 10, 10);
//画弧线
Arc(hdc, 700, 100, 900, 200, 800, 50, 600, 150);
//封闭弧线两点 和下面一样都是第一点开始,第二点结束,默认逆时针
Chord(hdc, 700, 100, 900, 200, 800, 50, 600, 150);
//画扇形,默认逆时针(中点到第一个点的连线逆时针扫描到第二条线)
Pie(hdc, 700, 100, 900, 200 , 800, 250, 1000, 50);
EndPaint(hwnd, hdc);
break;
case WM_LBUTTONDOWN:
//左键修改第一和第二点位置
cxClick = LOWORD(lParam);
cyClick = HIWORD(lParam);
if (flag == 0)
{
apt[0].x = cxClick;
apt[0].y = cyClick;
flag = 1;
}
else
{
apt[1].x = cxClick;
apt[1].y = cyClick;
flag = 0;
}
InvalidateRect(hwnd, NULL, TRUE);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}