在 vc++win32 Application 中区分鼠标的单双击事件
土豆丫 2010-10-29 07:39:38 下面是我自己写的一个程序代码框架
// 头文件包含 文件中包含应用程序中所需的数据类型和数据结构定义
#include<windows.h>
// 窗口过程函数声明
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|CS_DBLCLKS;
// 注册窗口类,如果注册失败则发出警告声音
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 DLine=FALSE,DArc=FALSE,DRectangle=FALSE;
switch(uMsg)
{
case WM_LBUTTONDOWN:
if(!DLine)
{
DLine=TRUE;
}
InvalidateRect(hwnd,NULL,TRUE);
break;
case WM_LBUTTONUP:
if(DLine)
{
DLine=FALSE;
}
InvalidateRect(hwnd,NULL,TRUE);
break;
case WM_RBUTTONDOWN:
DArc=~DArc;
InvalidateRect(hwnd,NULL,TRUE);
break;
case WM_RBUTTONUP:
break;
case WM_LBUTTONDBLCLK:
if(!DRectangle)
{
DLine=FALSE;
DRectangle=TRUE;
InvalidateRect(hwnd,NULL,TRUE);
}
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
if(DLine)
{
LineTo(hdc,500,500);
}
else if(DArc)
{
Arc(hdc,63,137,138,212,100,137,100,137);
}
else if(DRectangle)
{
Rectangle(hdc,213,212,287,250);
}
EndPaint(hwnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;
}
哪位帮我用改下,用Settimer区分鼠标的单双击