中对鼠标的确定及简单控制呢
前几天看一友关于 按键精灵 的讨论。 其实质是控制鼠标进行模仿动作。现给出主要实现代码及工作结构。但仅适合Win32编程初学者,高手就不用进了。
LRESULT APIENTRY WndProc(HWND, UINT, WPARAM, LPARAM); //窗口函数
BOOL ckzc(HINSTANCE); //注册窗口类函数
BOOL ckcj(HINSTANCE, int); //创建窗口函数
HINSTANCE hInst; //当前句柄
HWND hWndMain; //窗口句柄
上面首先是window窗口函数声明。然后依照惯例注册窗口类函数和创建窗口函数。通过关键字HINSTANCE、HWND分别获得当前句柄、窗口句柄。
BOOL ckzc(HINSTANCE hInstance)
{
WNDCLASSEX wcexMouse;
Size = sizeof(WNDCLASSEX);
yle = CS_DBLCLKS; //支持鼠标双击
fnWndProc = (WNDPROC)MainWndProc;
ClsExtra = 0;
WndExtra = 0;
nstance = hInstance;
con = LoadIcon(NULL,IDI_WINLOGO);
ursor = LoadCursor(NULL,IDC_ARROW);
rBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
szMenuName = NULL;
szClassName = \"MouseWClass\";
conSm = LoadIcon(NULL,IDI_WINLOGO);
//为了保证程序WIN98/NT的兼容性和可移植性,用以下对窗口进行注册
if (!RegisterClassEx (wcexMouse))
{
if (!RegisterClass((LPWNDCLASS)yle))
MessageBox (NULL, TEXT (\"注册窗口类失败!\"), \"wcexMouse\", MB_ICONERROR);
return (FALSE);
}
return (TRUE);
}
进行window类注册。
BOOL ckcj(HINSTANCE hInstance,int nCmdShow)
{
hInst = hInstance;
hWndMain = CreateWindow(\"MouseWClass\",
\"我的鼠标---cnscom\",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
他们还向受灾较重的宝兴县紧急筹措帐篷、大米、矿泉水等急需物资 NULL,NULL,hInstance,NULL);
if(!hWndMain)
return (FALSE);
ShowWindow(hWndMain,nCmdShow); //显示窗口
UpdateWindow(hWndMain); //刷新窗口
return (TRUE);
}
窗口创建工作。
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if(!ckzc(hInstance)) //注册窗口类
return (FALSE);
if(!ckcj(hInstance,nCmdShow)) //创建窗口
return (FALSE);
InvalidateRect(hWndMain, NULL, TRUE); //按指定区域更新区域
while(GetMessage(msg,NULL,0,0))
{
TranslateMessage(msg);
DispatchMessage(msg);
}
return (aram);
}
一个窗口程序最重要的环节了。WinMain对以上我们建立的函数进行了总汇。
LRESULT APIENTRY WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hDc, hMemDc;
PAINTSTRUCT ps;
DWORD fwKeys;
POINT ptMouse;
char szTitle[100];
static RECT rect1, rect2;
static HCURSOR hCursorPen;
switch(message)
{
case WM_CREATE:
ft = 90;
ght = 170;
p = 8;
ttom = 68;
ft = 90;
ght = 170;
p = 78;
ttom = 138;
hCursorPen = LoadCursor(hInst, \"RCCURSOR\");
break;
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_MOUSEMOVE:
ptMouse.x = LOWORD(lParam); //取lParam低字节为横坐标x
ptMouse.y = HIWORD(lParam); //取lParam高字节为横坐标y
fwKeys = wParam; //将鼠标按钮和键盘组合赋给32位无符号整数fwKeys
//很喜欢各个游戏中很有特色的鼠标吧。下面的代码就可以帮助你实现
//判断是否位于窗口之中否则,采用普通的箭头鼠标。
if (PtInRect(rect1, ptMouse) || PtInRect(rect2, ptMouse)) //判断指定点是否在指定窗口内
SetCursor(hCursorPen);
//在标题栏上显示鼠标的当前位置和按键和按键信息
//把输出格式和输出变量送到szTitle数组
wsprintf(szTitle, \"鼠标测试程序 ---- 鼠标位置:[%d,%d]\", ptMouse.x, ptMouse.y);
if (fwKeys!=0)
{
//把指定的内容输出到szTitle数组中
lstrcat(szTitle, \" ---- 您按下了\");
if(fwKeys MK_CONTROL)
lstrcat(szTitle, \"Ctrl \");
if(fwKeys MK_SHIFT)
lstrcat(szTitle, \"Shift \");
if(fwKeys MK_LBUTTON)
lstrcat(szTitle, \"鼠标左按钮\");
if(fwKeys MK_RBUTTON)
lstrcat(szTitle, \"鼠标右按钮\");
lstrcat(szTitle, \"键\");
}
SetWindowText(hWnd, szTitle);
break;
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
//如果鼠标双击了窗口客户区,那么就显示坐标信息
hDc = GetDC(hWnd);
//设置输出字体颜色
SetTextColor(hDc, (message == WM_LBUTTONDBLCLK) ? RGB(255, 0, 0) : RGB(0, 0, 255));
wsprintf(szTitle, \"(%d,%d)\", LOWORD(lParam), HIWORD(lParam));
TextOut(hDc, LOWORD(lParam), HIWORD(lParam), szTitle, lstrlen(szTitle)); //在指定位置输出文本
ReleaseDC(hWnd, hDc);
break;
case WM_PAINT:
hDc = BeginPaint(hWnd, ps);
hMemDc = CreateCompatibleDC(hDc);
SelectObject(hMemDc, hSun);
BitBlt(hDc, 90, 8, 80, 60, hMemDc, 0, 0, SRCCOPY);
DeleteDC(hMemDc);
hMemDc = CreateCompatibleDC(hDc);
SelectObject(hMemDc, hMoon);
BitBlt(hDc, 90, 78, 80, 60, hMemDc, 0, 0, SRCCOPY);
DeleteDC(hMemDc);
EndPaint(hWnd, ps);
break;
case WM_DESTROY:
DeleteObject(hSun);
DeleteObject(hMoon);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd, message, wParam, lParam));
}
return (0);
}
以上是我们全文之重点。。主要的对鼠标的操作。注释很完全,不多罗嗦了。查看本文来源
兰州好白癜风医院扬州白癜风哪里治疗好
成都哪妇科医院好
- 富豪纳一美妾,新婚之夜全家惨死!知州摸下她肚子:好歹毒的凶手
- 这三种小人,最擅长挑拨离间,遇到他们一定要认真,否则吃大亏!
- “算法歧视”“大数据杀熟”……破除算法暗箱需形成奋力
- 碧桂园成功发售5亿元公司债 票面利率4.5%
- 杨幂、林心如、林心如、赵丽颖、李沁、朱茵,戴黄金头饰谁最美?
- 来自韩国!库里师弟宣布参选!他比曾凡博更有望被选上
- 沪指重挫!半导体强势拉升,短线反弹还是发展趋势向上?这一板块多股狂拉20CM涨停,发生了什么?
- 菜市场“最不干净”的3种菜,便宜也别买,小贩从不吃,买了沮丧
- 吕梁政协书画院举办刘明宗先生书法作品展
- 【醉仁包容】心脏手术患者是否应在手术室内拔管
- 从黎巴嫩难民到大藏家,他砸过不少名车和百达翡丽
- 物业公司两名员工向业主索要“茶水费”,法官判了