
我估计你分数给的在高也没人回答。来个这样的代码太麻烦了。而且百度金币用处也不大。
不过,我可以写几个鼠标函数给你参考一下。
首先了解一下鼠标的中断。
_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语言怎么判断鼠标在窗口的位置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)