重要的经典的贴子:关于M8程序时运行中一些意外事件的处理
来源:互联网 发布:网络安全产品对比 编辑:程序博客网 时间:2024/05/15 23:49
程序运行时,有时候会碰到一些意外的事件,比如来电、短信、低电量提示、USB模式接入等,因此程序需要对这些事件进行及时处理,否则会影响手机的正常使用,以下是我一般处理这些事件的简单做法,也不一定最好的,大家可以讨论一下。
1、USB的接入:
一些程序运行中需要对文件进行读写,如果这时候以U盘模式接入了计算机,那么会导致程序无法正常读写文件甚至出出错。
解决办法一:
注册一个USB事件,当USB的状态发生变化时,系统会向应用程序的主窗口广播一个通知消息。
- INT g_iUsbNotifyMsg = 0;
- BOOL CTestWin::OnInitDialog()
- {
- g_iUsbNotifyMsg = RegisterUsbNotifyMsg();
- ......
- }
- ......
- LRESULT CTestWin::MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
- if(message == g_iUsbNotifyMsg)
- {
- INT iEvenType = (INT)wParam;
- if(USB_MASSSTORAGE_ATTACH==iEvenType)
- {
- MzMessageBoxEx(NULL,L"程序无法工作在U盘模式,请断开USB连接再运行本程序!",NULL,MB_OK,false);
- PostQuitMessage(0);
- }
- ......
- }
- // 其他消息处理
- ......
- }
解决办法二:
在需要读写文件等操作的地方调用GetUsbConnectType()来查询USB的状态,这样可以避免读写错误而又无需退出程序。
例如如果需要切换皮肤,在切换前可以先做个判断:
- if (GetUsbConnectType()==USB_MASSSTORAGE_ATTACH)//U盘模式
- {
- MzMessageBoxEx(m_hWnd,L"U盘模式无法切换皮肤!",NULL,MB_OK,false);
- }
- else
- {
- ChangeSkin();
- }
2、来电与短信等弹出窗口的处理
有的软件需要旋屏、隐藏工具栏、设置顶层窗口等操作,在来电或短信时需要恢复正常的操作界面,否则会造成错屏或无法操作。那么就需要用到以下消息:
- DWORD m_dwCallMsg;
- DWORD m_dwSmsMsg;
- BOOL CTestWin::OnInitDialog()
- {
- m_dwCallMsg = GetCallRegisterMessage();
- m_dwSmsMsg = GetSmsRegisterMessage();
- }
- LRESULT CTestWin::MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
- {
- if (message == m_dwCallMsg || message == m_dwSmsMsg)
- {
- if (wParam == CALL_BEGIN)
- {//检测到有电话或短信入,这时需要恢复正常屏幕,显示状态栏,并让出顶层窗口
- }
- else if (wParam == CALL_END)
- {//电话或短信窗口关闭,恢复程序的运行状态
- }
- }
- }
还可以结合WM_ACTIVATE消息进行处理:
- LRESULT CTestWin::MzDefWndProc(UINT message, WPARAM wParam, LPARAM lParam)
- {//假设本程序需要隐藏状态栏
- switch(message)
- {
- case WM_ACTIVATE:
- {
- switch (wParam)
- {
- case WA_INACTIVE:
- {
- ShowMzTopBar();//恢复状态栏显示
- }
- break;
- case WA_ACTIVE:
- {
- HideMzTopBar();//隐藏状态栏
- }
- break;
- }
- }
- break;
- }
- return CMzWndEx::MzDefWndProc(message,wParam,lParam);
- }
- 重要的经典的贴子:关于M8程序时运行中一些意外事件的处理
- Windows处理重要事件的一些操作
- android 中java编程的意外事件处理
- android 中java编程的意外事件处理
- 关于 M8的出厂日期
- 收藏CSDN发的贴子中有的一些代码
- M8中DDraw关键色的处理方法
- 一些有意思的网站和贴子
- 一些有意思的网站和贴子
- 关于程序中时间的一些操作处理
- arm板子启动时运行自己的QT程序
- 配置监听(系统启动和关闭时运行的程序)
- jquery delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数
- 一些经典的程序
- 关于AJAX的N篇贴子整理
- 关于栈帧的几个贴子。
- 意外解决js动态生成的html代码中一些事件失效问题
- javascript中一些简单事件的处理
- windows下给Qt配置环境变量
- 为你详细讲解PHP重定向代码的具体实现功能
- SDK网络连接/多线程示例代码
- POJ_2394_最短路径---SPFA算法
- M8软件开发经验总结:移植黄金岛斗地主的经验分享
- 重要的经典的贴子:关于M8程序时运行中一些意外事件的处理
- C#中如何获取服务器IP,名称,操作系统,客户端IP,名称!
- 种瓜得豆(6)
- CString 与其他数据类型的转换
- MeeGo Moorestown支持的tablet预览
- 配置 SQL Server 2005 远程调试存储过程II
- IIS的各种身份验证详细测试
- 绘图
- Eclipse 反编译插件