首页 > 编程知识 正文

怎么用键盘控制鼠标(键盘没反应怎么办)

时间:2023-05-04 14:41:43 阅读:91096 作者:4829

上次写了一个简单的绘图窗口

359 www.toutiao.com/I 6711113293437600263 /

我只是画了简单的画。

Windows窗口专注于用户交互,而鼠标和键盘是交互的媒介。 也就是说,窗口捕捉鼠标和键盘的操作对于窗口的交互很有用。

所以今天的任务是研究MFC窗口如果利用鼠标和键盘的交流。

参照微软的开发文件,鼠标输入中有很多信息; 对我们来说经常使用的是

WM _蓝牙

WM _蓝牙

WM_LBUTTONDBLCLK

WM _兆字节下载

WM_MBUTTONUP

WM_MBUTTONDBLCLK

WM _机器人下载

WM _机器人

WM_RBUTTONDBLCLK

WM _移动器

在CWnd类中,上述鼠标消息的保护方法如下:

当用户双击鼠标左键时,将调用CWnd:OnLButtonDblClk。

CWnd:OnLButtonDown是在用户按下鼠标左键时调用的。

当用户释放鼠标左键时,将调用CWnd:OnLButtonUp。

当用户双击鼠标中键时,将调用CWnd:OnMButtonDblClk。

CWnd:OnMButtonDown是在用户按鼠标中键时调用的。

用户释放鼠标中键时,将调用CWnd:OnMButtonUp。

当用户双击鼠标右键时,将调用CWnd:OnRButtonDblClk。

当用户按下鼠标右键时,将调用CWnd:OnRButtonDown。

用户释放鼠标右键时,将调用CWnd:OnRButtonUp。

CWnd:OnMouseMove是在鼠标光标移动时调用的。

同样,对于键盘:

在cwnd获得输入焦点之后调用WM _ setfocus cwnd :3360 on setfocus

WM _ killfocuscwnd :3360 onkillfocus在cwnd失去输入焦点之前被调用。

WM_KEYUP CWnd:OnKeyUp是在释放非系统密钥时调用的。

WM _ keydown cwnd :3360 onkeydown是在按下非系统键时调用的。

在击键被转换为非系统字符时调用WM_CHAR CWnd:OnChar。

当用户在按住ALT键的同时释放所按的键时,将调用WM _ syskeyupcwnd :3360 onsyskeyup。

当用户按ALT键后按另一个键时,将调用WM _ syskeydowncwnd :3360 onsyskeydown。

鼠标和键盘最大的区别在于键盘每次输入的键不同。 因此,在处理键盘消息时,通常通过焦点获取。

因此,这次要实现鼠标和键盘的交互,为了简化代码而加深理解。 用前两次记住的代码写这次的代码:

如果点击鼠标左键,则显示“点击了鼠标左键”的字符串

如果单击鼠标右键,将显示单击了鼠标右键

按下键盘后,显示按下的案件内容。

开始吧。 。 。 。

增加窗口的左键按下方法,将贴图afx_msg void OnLButtonDown (

uintn标志,

点点点;

代码编写如下。

void mywnd :3360 onlbuttondown (设备标志(点) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

{

客户端直流(this;

字串;

s.format(nFlags的值为%d位于点的位置为) d,%d ) )、nflags,point.x,point.y );

文本(10,10,s );

}

编译并运行,点击鼠标获取鼠标位置。

用上述方法添加代码。 最后的代码如下。

# #包括传真win.h

:公共框架wnd类

{

公共:

MyWnd () )

{

创建(空,“窗口”);

}

受保护的:

afx _ msg语音助手(

{

}

afx _ msg语音合成器(

uintn标志,

点点点;

afx _ msgvoidonsetfocus (cwnd *波尔德wnd );

afx _ msgvoidonkillfocus (cwnd *新闻网);

afx _ msg语音键盘(

UINT nChar,

内部pcnt、

untn标志;

afx _ msg语音键盘(

UINT nChar,

内部pcnt、

untn标志;

DECLARE_MESSAGE_MAP (

(;

:类公共消费应用程序

{

公共:

布尔启动器() )

{

m _ pmainwnd=新的mywnd (;

m _主窗口-显示窗口(m _ ncmdshow );

m _ pmainwnd -更新窗口(;

返回真;

}

(;

begin_message_map(mywnd,帧宽度) )。

on _ WM _绘制()

ON_WM_LBUTTONDOWN ()

ON_WM_SETFOCUS ()

on _ WM _ kill福克斯()

on _ WM _键()

开_ WM _键()

使用END_MESSAGE_MAP (

mapp APP;

void mywnd :3360 onlbuttondown (设备标志(点) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。

{

客户端直流(this;

字串;

s.format(nFlags的值为%d位于点的位置为) d,%d ) )、nflags,point.x,point.y );

文本(10,30,s );

}

void mywnd :3360 on setfocus (cwnd *坡尔德wnd ) ) )。

{

客户端直流(this;

字串;

s.Format ('我得到了焦点!' );

文本(10,10,s );

}

void mywnd :3360 onkillfocus (cwnd *新闻网) ) )。

{

客户端直流(this;

字串;

s.Format ('我失去了焦点!' );

文本(10,10,s );

}

void mywnd :海贼王(

UINT nChar,

内部pcnt、

untn标志)

{

客户端直流(this;

字串;

s.Format ('您释放了%c键。 nRepCnt为%d,n标志为%d ',nChar,nRepCnt,n标志);

文本(10,70,s );

}

void MyWnd:OnKeyDown (

UINT nChar,

内部pcnt、

untn标志)

{

客户端直流(this;

字串;

s.Format ('你按了%c键。 nRepCnt为%d,n标志为%d ',nChar,nRepCnt,n标志);

文本(10,50,s );

}

编译并运行!

现在,您可以在Windows窗体中使用鼠标和键盘进行交互了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。