// 头文件包含 文件中包含应用程序中所需的数据类型和数据结构定义
#include<windows.h>
#define ID_LDBCLK 1001
#define ID_RDBCLK 1002
#define WM_LDBCLK WM_USER +101
#define WM_RDBCLK WM_USER +102
// 窗口过程函数声明
LRESULT CALLBACK WinProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam );
// 程序的入口处:WinMain函数
int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance 由于windows95以及以后的
// windows版本都是独立的进程空间,因此它的值总是NULL
LPSTR lpCmdLine, // command line
int nCmdShow // show state
)
{
char lpszClassname[]="窗口"; // 窗口类名
char lpszTitle[]="My_Windows"; // 窗口标题名
// 窗口类的定义
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WinProc;
wc.lpszClassName=lpszClassname;
wc.lpszMenuName=NULL; // 窗口中无菜单
wc.style=CS_HREDRAW|CS_VREDRAW;
// 注册窗口类,如果注册失败则发出警告声音
if(!RegisterClass(&wc))
{
MessageBeep(0);
return FALSE;
}
// 创建窗口
HWND hwnd;
hwnd=CreateWindow(lpszClassname,lpszTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL); // 显示窗口
UpdateWindow(hwnd); // 更新窗口 绘制用户区
// 消息循环
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
// 窗口过程函数(回调函数 callback),该函数处理窗口上的各种输入事件,在此添加代码
LRESULT CALLBACK WinProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
static BOOL FLAG1,FLAG2;
static BOOL DArc,DRetangl,DPie,DLine;
switch(uMsg)
{
case WM_LBUTTONDOWN:
if(!FLAG1)
{
FLAG1=TRUE;
SetTimer(hwnd,ID_LDBCLK ,GetDoubleClickTime(),NULL);
}
else
{
KillTimer(hwnd,ID_LDBCLK);
FLAG1=FALSE;
PostMessage(hwnd,WM_LDBCLK,0,0);
}
break;
case WM_RBUTTONDOWN:
if(!FLAG2)
{
FLAG2=TRUE;
SetTimer(hwnd,ID_RDBCLK ,GetDoubleClickTime(),NULL);
}
else
{
KillTimer(hwnd,ID_RDBCLK);
FLAG2=FALSE;
PostMessage(hwnd,WM_RDBCLK,0,0);
}
break;
case WM_TIMER:
switch(wParam)
{
case ID_LDBCLK:
KillTimer(hwnd,ID_LDBCLK);
FLAG1=FALSE;
DArc=~DArc;
InvalidateRect(hwnd,NULL,1);
break;
case ID_RDBCLK:
KillTimer(hwnd,ID_RDBCLK);
FLAG2=FALSE;
DPie=~DPie;
InvalidateRect(hwnd,NULL,1);
break;
}
break;
case WM_LDBCLK:
KillTimer(hwnd,ID_LDBCLK);
DRetangl=~DRetangl;
InvalidateRect(hwnd,NULL,1);
break;
case WM_RDBCLK:
KillTimer(hwnd,ID_RDBCLK);
DLine=~DLine;
InvalidateRect(hwnd,NULL,1);
break;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
if(DArc)
{
Arc(hdc,63,137,138,212,100,137,100,137);
break;
}
if(DRetangl)
{
Rectangle(hdc,213,212,287,250);
break;
}
if(DPie)
{
Pie(hdc,213,137,288,212,240,137,260,137);
break;
}
if(DLine)
{
LineTo(hdc,50,50);
break;
}
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}