上次写了一个简单的绘图窗口
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窗体中使用鼠标和键盘进行交互了。