MFC制作程序界面锁定 .
来源:互联网 发布:ws软件 编辑:程序博客网 时间:2024/05/21 06:46
我们需要锁住程序界面,效果是,当锁住界面后,点击界面的任何一处都没有反应,或者弹出解锁对话框.
第二步,我们思考一下,如何完成这样一个需求?
我们可以这样做,我们需要捕获用户的鼠标或者键盘消息,然后让其按照我们的需求来做事情,对不对?比如,当用户点击界面时,捕获住鼠标左键的动作,然后弹出解锁对话框,当用户成功解锁后,不再捕获鼠标消息,当用户解锁失败后,我们仍然继续捕获鼠标消息.
当然,我们可做的更完善一些,当界面锁定时,我们可以改变鼠标的样式,将其变成我们自定义的鼠标锁定样式.
大致思路,我们已经想好了,接下来,我们可以动手开始做了.
1。在你的锁定按钮事件里添加如下代码:
m_bLockSys = TRUE; //类中定义的BOOL型变量,判断界面是否锁定 PostMessage(WM_SETCURSOR); //发消息改变鼠标样式,需要添加消息函数,接下来会介绍,见2 PeekAndPump(); //用于捕获鼠标消息,见3
2。在你的类中添加如下消息函数,用于改变鼠标样式:
头文件中:
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
实现文件中:
BEGIN_MESSAGE_MAP(..., ....)
...
ON_WM_SETCURSOR() //添加消息循环
...
END_MESSAGE_MAP()
OnSetCursor函数实现:
//当程序会被锁住时,改变鼠标的图标 BOOL yourClass::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if(m_bLockSys) { ::SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR_LOCKSYS)); return TRUE; } return CUIDialog::OnSetCursor(pWnd, nHitTest, message); }
3。PeekAndPump()函数的实现:
//当加锁时,过滤鼠标消息 BOOL yourClass::PeekAndPump() { static MSG msg; while(m_bLockSys) { if (::PeekMessage(&msg,NULL,0,0, PM_REMOVE))
//PeekMessage该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的msg结构中。
{ if (msg.message >= WM_MOUSEMOVE && msg.message <= WM_MBUTTONDBLCLK) { if (msg.message == WM_LBUTTONDOWN) { SendMessage(WM_SYS_UNLOCK,NULL,NULL); //发送自定义消息,我在自定义消息函数中弹出解锁对话框 } } else { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } } Sleep(1); } return TRUE; }
4。解锁的实现:
在弹出对话框后,根据对话框的返回值,决定是改变鼠标样式为正常并结束捕获鼠标消息还是继续捕获
以下是自定义消息WM_SYS_UNLOCK中的代码:
m_bLockSys = FALSE; CLockDialog dlgLockSys; if(IDOK == dlgLockSys.DoModal()) { PostMessage(WM_SETCURSOR); //返回值为IDOK时则结束捕获,并复原鼠标样式 } else { m_bLockSys = TRUE; PeekAndPump(); //继续捕获鼠标消息 }
- MFC制作程序界面锁定
- MFC制作程序界面锁定 .
- MFC-->制作程序启动界面
- VC2010 MFC程序制作Flash动画欢迎界面
- MFC界面制作
- MFC简单界面程序
- MFC 程序隐藏界面
- 制作带MFC界面的MFC DLL
- mfc制作字符串统计程序
- 用flash制作MFC界面的方法
- MFC中混合使用Duilib制作界面
- MFC连接access制作登录界面
- MFC制作截图软件中的半透明界面
- [原创]使用MFC界面库LibUIDK制作超酷界面
- 使用MFC界面库LibUIDK制作超酷界面
- 如何制作带MFC界面的MFC DLL
- pb 制作程序运行报错界面
- 用Qt制作mdl程序启动界面
- Basa
- 泰泽最新更新
- 2012年移动互联网小心倒春寒
- php mysql扩展使用mysqli扩展查询结果的问题
- Sharepoint 2010 利用designer显示 个人页面数据
- MFC制作程序界面锁定 .
- ABAP字符串操作
- ZFS 介绍
- 判断鼠标是否落在界面中某一个区域内 .
- 单元素数组的技巧性用法
- 使用ArcSDE SQL操作怎么获得新对象的objectid、GUID
- VC:简单聊天室程序1 --- 多线程编写网络聊天室程序
- VC:简单聊天室程序2 --- 基于消息的异步套接字
- VC 树控件的拖拽实现 MFC .