c语言如何获取鼠标键盘信息

c语言如何获取鼠标键盘信息,第1张

我估计你分数给的在高也没人回答。来个这样的代码太麻烦了。而且百度金币用处也不大。

不过,我可以写几个鼠标函数给你参考一下。

首先了解一下鼠标的中断。

_ax=0x01

表示显示光标

_ax=0x02

停止显示光标

_ax=0x03

读取光标位置与案件

_ax=0x04

设置光标位置

所以啊。根据这四个中断,有以下几个函数

----------------------------------------------------

void

mouseon(void)//鼠标光标显示

{

_ax

=

0x01;

geninterrupt(0x33);

}

----------------------------------------------------

void

mouseoff(void)//鼠标光标隐藏

{

_ax

=

0x02;

geninterrupt(0x33);

}

---------------------------------------------------

void

mousesetxy(int

x,int

y)//设置当前位置

{

_cx

=

x,

_cd

=

y;

_ax

=

0x04;

geninterrupt(0x33);

}

---------------------------------------------------

int

leftpress(void)//鼠标左键按下

{

_ax

=

0x33;

geninterrupt(0x33);

return(_bx&1);

}

-----------------------------------------------------

鼠标右键的应该也会了吧。不过要return(_bx&2);

-----------------------------------------------------

void

mousegetxy(void)//得到当前位置

{

_ax

=

0x33;

geninterrupt(0x33);

mousex

=

_cx;

mousey

=

_dx;

}

---------------------------------------------------------------

最好要复制粘贴,打字打得手疼。

VBA讲的是逻辑,那么从逻辑上来说

单元格的位置可以作为坐标来反馈,故可以使用Cells(SelectionRow, SelectionColumn)来确定当前光标所处的坐标,但这仅仅局限于一个单元格,cells(r,c)分别为行号和列号,通过坐标来判断光标所处位置。同样的,如果用cells(r,c+1)则可以 *** 作光标所处单元格的右数1个单元格的属性,并且在 *** 作右侧单元格时光标依然在当前的单元格上,所以如果下一条命令是cells(r+1,c)则可 *** 作下方相邻单元格,举个例子就是如果cells(r,c)是A1,cells(r,c+1)就是B1,cells(r+1,c)是A2

那么只要让textbox的值 = Cells(SelectionRow, SelectionColumn)Value 即=cells(r,c)的值,就可以让textbox显示出当前光标所处单元格的值。也就是无论你光标移动到哪里,窗体都能显示出光标所处的单元格的值

最后,你提到的“右击”,VBA无法判断左击还是右击,但无论你怎么击都属于“选中 or 激活”这个 *** 作,所以 无论你左击还是右击某个单元格,Cells(SelectionRow, SelectionColumn)都能指出当前激活单元格的坐标。

用API函数GetCursorPos()可以得到鼠标现在的位置:

//---------------------------------------------------------------------------

#include <stdioh>

#include <windowsh>

int main(void)

{

POINT pt;

GetCursorPos(&pt);

printf("%ld %ld\n",ptx,pty);

return 0;

}

//---------------------------------------------------------------------------

VC下:先映射ON_WM_LBUTTONDOWN消息,会产生函数void

OnLButtonDown(UINT

nFlags,

CPoint

point)

,point即是点击位置

GetCursorPos不管鼠标在哪里都可以获取位置的

问题是

只有OnMouseMove的时候才获取鼠标位置

但是OnMouseMove又是你对话框的成员函数

所以说

只有鼠标在对话框内移动才会显示坐标的

但是并不是没办法实现的

首先

你可以在OnInitDialog里设置一个定时器

CDialog::OnInitDialog();

//

Add

"About"

menu

item

to

system

menu

//

IDM_ABOUTBOX

must

be

in

the

system

command

range

ASSERT((IDM_ABOUTBOX

&

0xFFF0)

==

IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX

<

0xF000);

CMenu

pSysMenu

=

GetSystemMenu(FALSE);

if

(pSysMenu

!=

NULL)

{

CString

strAboutMenu;

strAboutMenuLoadString(IDS_ABOUTBOX);

if

(!strAboutMenuIsEmpty())

{

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,

IDM_ABOUTBOX,

strAboutMenu);

}

}

//

Set

the

icon

for

this

dialog

The

framework

does

this

automatically

//

when

the

application's

main

window

is

not

a

dialog

SetIcon(m_hIcon,

TRUE);

//

Set

big

icon

SetIcon(m_hIcon,

FALSE);

//

Set

small

icon

//

TODO:

Add

extra

initialization

here

SetTimer(1,100,NULL);//时间设置短一点

显示的也快点

return

TRUE;

//

return

TRUE

unless

you

set

the

focus

to

a

control

然后为对话框添加WM_TIME消息

void

CAdcDlg::OnTimer(UINT

nIDEvent)

{

//

TODO:

Add

your

message

handler

code

here

and/or

call

default

POINT

pos;

GetCursorPos(&pos);

//取鼠标的坐标

CString

str;

strFormat("%d,%d",posx,posy);

m_dd=str;

UpdateData(FALSE);

CDialog::OnTimer(nIDEvent);

}

m_dd为绑定在一个静态label空间上的CString

试试吧

这样就可以获得鼠标在任何时候的坐标了

首先在视图类(或框架类)中添加一个CPoint m_pt的成员变量,然后在视图类中添加鼠标左击消息处理WM_LBUTTONDOWN即为:

void CMy48View::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

m_pt=point;

CView::OnLButtonDown(nFlags, point);

}这样就将鼠标左键的点保存在m_pt中了

你的类是继承自CScrollView类对吧?那你在OnLButtonDown()函数中最开始加入如下代码:

CClientDC dc(this);

OnPrepareDC(&dc);

dcDPtoLP(&point);

接下来,point中的坐标应该就符合你的意愿了!

以上就是关于c语言如何获取鼠标键盘信息全部的内容,包括:c语言如何获取鼠标键盘信息、VBA中如何获取当前鼠标位置、用C语言怎么判断鼠标在窗口的位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9400919.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存