在Windows Mobile的控制台应用中使用Notification

    今天在论坛上看到有朋友问如何在Windows Mobile的控制台应用中使用Microsoft.WindowsCE.Forms.Notification这个类。恰好自己也没有研究过这个类的使用,所以就打算试试。

      Google了一把,排在前面的就是MSDN上的帮助,居然还是中文的,真是太难得了。这篇技术资源文章《Notification类》讲解如何实现用于显示和响应用户通知的 Windows CE 功能。需要主意的是,在备注中有这么一段话,“此类提供 Windows CE 通知功能的托管实现。只有 Pocket PC 上支持此类。”显然,我们要在WM6上调试的话,要选择professional的版本才行。下面就一步步来进行讲解吧。

      1. 在Visual Studio 2005中,在C#的smart device下,选择Windows Mobile 6 Professional,在右边选中console application,即控制台应用程序。选定好工程的名称和路径等之后,点击确定。如下图1所示:

图1:新建工程页面

      2. 将《Notification类》中C#下的代码全部复制,拷贝到工程的program.cs中,进行编译。

      3. 发现编译出错,提示是“没有找到System.Windows.Forms、System.Drawing和Microsoft.WindowsCE.Forms”之类的引用。解决方法:在工程的Refence中点击右键,添加相关的引用,然后编译,就可以通过了,如下图2所示:

图2:添加引用界面

      4. 选择Windows Mobile 6 Professional Emulator进行调试,如下图3所示:

图3:选择模拟器进行调试

      5. 程序下载以后运行,发现程序立即抛出一个异常,“value does not fall within the expected range”,如下图4所示:

图4:程序异常界面

      6. 这个时候,就得单步调试来寻找问题了,觉得是初始化的时候出了问题。果然,在ConfigNotification函数中,执行到获取notification的Icon时,程序抛出了异常,该函数的代码如下:

1        private void ConfigNotification()
 2        {
 3            // Create a Notification.
 4            notification1 = new Microsoft.WindowsCE.Forms.Notification();
 5
 6            try
 7            {
 8                // Provide an icon for the notification to appear in the title bar when dismissed.
 9                // Assumes an icon file is compiled with the assembly as an embedded resource.
10                Assembly asm = Assembly.GetExecutingAssembly();
11                //notification1.Icon = new Icon(asm.GetManifestResourceStream("notify.ico"), 16, 16);
12
13                notification1.Caption = "Notification scenario - data download";
14
15                // If notification is urgent, set to true.
16                notification1.Critical = false;
17
18                // Create the text for the notification.
19                // Use a StringBuilder for better performance.
20                StringBuilder HTMLString = new StringBuilder();
21
22                HTMLString.Append("<html><body>");
23                HTMLString.Append("<font color=\"#0000FF\"><b>Data ready to download</b></font>");
24                HTMLString.Append("&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"settings\">Settings</a>");
25                HTMLString.Append("<br><form method=\"GET\" action=notify>");
26                HTMLString.Append("<SELECT NAME=\"lstbx\">");
27                HTMLString.Append("<OPTION VALUE=\"0\">Start now</OPTION><OPTION VALUE=\"1\">In 1 hr</OPTION>");
28                HTMLString.Append("<OPTION VALUE=\"2\">In 2 hrs</OPTION><OPTION VALUE=\"3\">In 3 hrs</OPTION>");
29                HTMLString.Append("<OPTION VALUE=\"4\">In 4 hrs</OPTION></SELECT>");
30                HTMLString.Append("<input type=checkbox name=chkbx>Notify completion");
31                HTMLString.Append("<br><input type='submit'>");
32                HTMLString.Append("<input type=button name='cmd:2' value='Postpone'>");
33                HTMLString.Append("</body></html>");
34
35                // Set the Text property to the HTML string.
36                notification1.Text = HTMLString.ToString();
37
38                // Add event handlers.
39
40                notification1.BalloonChanged += new BalloonChangedEventHandler(OnBalloonChanged);
41                notification1.ResponseSubmitted += new ResponseSubmittedEventHandler(OnResponseSubmitted);
42
43            }
44
45            catch (Exception ex)
46            {
47                MessageBox.Show(ex.Message);
48            }
49
50
51        }
52

    其实程序中已经有注释了,提醒用户说,假设该icon已经作为嵌入的资源被编译。

    找到问题了,最简单的处理方法,不就是icon嘛,我不看也行,直接屏蔽掉这句吧,先看程序运行的效果如何。单击界面的Notify按钮,弹出来用户设置界面,如下图5所示:

图5:Notify程序运行界面

参考链接:

MSDN:Notification类

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第9章 RL-TCPnet网络协议栈移植(uCOS-III)

本章教程为大家讲解RL-TCPnet网络协议栈的uCOS-III操作系统移植方式,学习了第6章讲解的底层驱动接口函数之后,移植就比较容易了,主要是添加库文件、配...

663
来自专栏FreeBuf

没想到你是这样的Linux | 终端下有趣的命令合集

前言 刚开始接触Linux的我们,肯定认为Linux系统就是那种枯燥的终端界面。然而实际上Linux下的终端还是有很多种有趣的玩法~~ toilet 简介 to...

3745
来自专栏青枫的专栏

通过数据库中的表,使用 MyEclipse2017的反向生成工具-->hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件

1、在MyEclipse中,Java视图下,新建一个普通的java project,新建该项目的目的是:用来接收反转引擎生成的实体类和对应的映射文件。

682
来自专栏郭霖

Android安全攻防战,反编译与混淆技术完全解析(上)

之前一直有犹豫过要不要写这篇文章,毕竟去反编译人家的程序并不是什么值得骄傲的事情。不过单纯从技术角度上来讲,掌握反编译功能确实是一项非常有用的技能,可能平常不太...

2458
来自专栏用户2442861的专栏

基于Qt的类QQ气泡聊天的界面开发(二)

http://blog.csdn.net/esonpo/article/details/25974999

762
来自专栏云瓣

vscode奇淫记(上)

每次换editor都是一种煎熬,从最早的eclipse,sublime,webstorm到现在在用的atom,换编辑器的驱动是寻找更酷炫和轻量的平衡点,其实我真...

58510
来自专栏分享达人秀

Android Studio配置优化,打造开发利器

是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装运行程序都要等待很长时间,如果是在开发后期需要不...

2659
来自专栏跟着阿笨一起玩NET

多台电脑共享一套鼠标键盘的免费方法

本文转载:http://www.cnblogs.com/fangpage/archive/2011/07/22/inputdirector.html

1781
来自专栏杨建荣的学习笔记

MySQL和Oracle中的半连接测试总结(一)(r10笔记第31天)

SQL中的半连接在MySQL和Oracle还是存在一些差距,从测试的情况来看,Oracle的处理要更加全面。 首先我们来看看在MySQL中怎么测试,对于MySQ...

3124
来自专栏数据小魔方

excel中的超链接函数

今天跟大家分享在excel中超链接函数的用法! ▼ 其实excel中想要达到超链接效果有很多种方法:直接手工设置、超链接函数、开发工具、VBA等都可以实现。但是...

3639

扫码关注云+社区