最底层的鼠标双击代码

 

//   头文件包含      文件中包含应用程序中所需的数据类型和数据结构定义
#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值