仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 586|回复: 7
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之用C#完成智能设备上的NotifyIcon类

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:47:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
什么叫数据库怎么样?什么意思?你想单学数据库。(其实变成是我问的)头几天有网友问.NETCF中怎样完成NotifyIcon,我这才晓得本来.NETCF并没有供应NotifyIcon控件。
因而偶想PC上能够用Shell_NotifyIcon和MessageWindow来完成托盘图标,只是不晓得.NETCF撑持不撑持这两个东东了。细心看了一下.NETCF中可疑的定名空间,没想到在Microsoft.WindowsCE.Forms定名空间内里居然有一个MessageWindow类,太好了,只剩下一个Shell_NotifyIcon函数了。接着在WindowCE的SDK的匡助文件里,又发明WindowCEPlatformAPI已包括了Shell_NotifyIcon函数。两年夜“主料”都齐了,只剩下锅了。
先看一下MessageWindow类,这个类供应了WndProc办法,用于处置窗口动静,并公然了大概传送给本机窗口函数的无效窗口句柄。要利用它,派生一个新类,偏重写的WndProc办法,如许才干截获特定的窗口动静。这里次要用来处置click事务。
Shell_NotifyIcon的用法以下:
[DllImport("coredll.dll")]
internalstaticexternintShell_NotifyIcon(intdwMessage,refNOTIFYICONDATApnid);
个中,NOTIFYICONDATA布局以下:
structNOTIFYICONDATA
{
intcbSize;
IntPtrhWnd;
uintuID;
uintuFlags;
uintuCallbackMessage;
IntPtrhIcon;
}
Pnid参数的性命必要注重,是按援用传送的,由于Shell_NotifyIcon必要一个指向NOTIFYICONDATA布局的指针。
hWnd是用来吸收义务栏中图标单击动静的窗口的句柄。
运转示例的时分因为窗体最年夜化,盖住了义务栏,把窗体最小化以后就可以看到托盘图标了。(最终效果片居然贴不下去,改天再贴吧)
该类和示例的下载地点:http://www.ckuyun.com/Files/ttinfo/NotifyIconCf.rar
上面是NotifyIcon类的完成,别忘了援用Microsoft.WindowsCE.Forms。注重Add办法供应了分歧的重载情势,详细请参看正文:

usingSystem;
usingSystem.Runtime.InteropServices;
usingSystem.Windows.Forms;
namespaceNotifyClient
{
/**////<summary>
///智能设备托盘图标类
///</summary>
publicclassNotifyIcon
{
//单击事务
publiceventSystem.EventHandlerClick;
privateMyMessageWindowmessageWindow;
privateintuID=5000;
privateSystem.Drawing.Icon_Icon;

publicNotifyIcon()
{
messageWindow=newMyMessageWindow(this);
messageWindow.uID=uID;
}
publicSystem.Drawing.IconIcon
{
set
{
_Icon=value;
}
}

~NotifyIcon()
{
Remove();
}
/**////<summary>
///增加托盘图标
///</summary>
///<paramname="hIcon">icon文件的无效句柄</param>
publicvoidAdd(IntPtrhIcon)
{
NotifyMessage(messageWindow.Hwnd,NIM_ADD,(uint)uID,hIcon);
}
/**////<summary>
///增加托盘图标
///</summary>
///<paramname="IconRes">编译以后的资本文件中的icon资本称号,如“#201547”</param>
publicvoidAdd(stringIconRes)
{
IntPtrhIcon=LoadIcon(GetModuleHandle(null),IconRes);
NotifyMessage(messageWindow.Hwnd,NIM_ADD,(uint)uID,hIcon);
}
/**////<summary>
///增加托盘图标
///</summary>
///<paramname="icon">icon文件</param>
publicvoidAdd(System.Drawing.Iconicon)
{
NotifyMessage(messageWindow.Hwnd,NIM_ADD,(uint)uID,icon.Handle);
}
/**////<summary>
///增加托盘图标;icon为属性中的icon
///</summary>
publicvoidAdd()
{
if(_Icon!=null)
{
NotifyMessage(messageWindow.Hwnd,NIM_ADD,(uint)uID,_Icon.Handle);
}
}
publicvoidRemove()
{
NotifyMessage(messageWindow.Hwnd,NIM_DELETE,(uint)uID,IntPtr.Zero);
}
publicvoidModify(IntPtrhIcon)
{
NotifyMessage(messageWindow.Hwnd,NIM_MODIFY,(uint)uID,hIcon);
}
privatevoidNotifyMessage(IntPtrhwnd,intdwMessage,uintuID,IntPtrhIcon)
{
NOTIFYICONDATAnotdata=newNOTIFYICONDATA();
notdata.cbSize=152;
notdata.hIcon=hIcon;
notdata.hWnd=hwnd;
notdata.uCallbackMessage=WM_NOTIFY_TRAY;
notdata.uFlags=NIF_MESSAGE|NIF_ICON;
notdata.uID=uID;
intret=Shell_NotifyIcon(dwMessage,refnotdata);
}
API#regionAPI
//界说动静常量
constintNIF_MESSAGE=0x00000001;
constintNIF_ICON=0x00000002;
internalconstintWM_LBUTTONDOWN=0x0201;
internalconstintNIM_ADD=0x00000000;
internalconstintNIM_MODIFY=0x00000001;
internalconstintNIM_DELETE=0x00000002;
//自界说动静
internalconstintWM_NOTIFY_TRAY=0x0400+2001;


internalstructNOTIFYICONDATA
{
internalintcbSize;
internalIntPtrhWnd;
internaluintuID;
internaluintuFlags;
internaluintuCallbackMessage;
internalIntPtrhIcon;
}
[DllImport("coredll.dll")]
internalstaticexternintShell_NotifyIcon(
intdwMessage,refNOTIFYICONDATApnid);
[DllImport("coredll.dll")]
internalstaticexternintSetForegroundWindow(IntPtrhWnd);
[DllImport("coredll.dll")]
internalstaticexternintShowWindow(
IntPtrhWnd,
intnCmdShow);
[DllImport("coredll.dll")]
internalstaticexternIntPtrGetFocus();
[DllImport("coredll.dll")]
internalstaticexternIntPtrLoadIcon(IntPtrhInst,stringIconName);
[DllImport("coredll.dll")]
internalstaticexternIntPtrGetModuleHandle(StringlpModuleName);

#endregion

MessageWindow#regionMessageWindow
internalclassMyMessageWindow:Microsoft.WindowsCE.Forms.MessageWindow
{

privateint_uID=0;
privateNotifyIconnotifyIcon;

publicMyMessageWindow(NotifyIconnotIcon)
{
notifyIcon=notIcon;
}
publicintuID
{
set
{
_uID=value;
}
}
protectedoverridevoidWndProc(refMicrosoft.WindowsCE.Forms.Messagemsg)
{
if(msg.Msg==WM_NOTIFY_TRAY)
{
if((int)msg.LParam==WM_LBUTTONDOWN)
{
if((int)msg.WParam==_uID)
{

if(notifyIcon.Click!=null)
notifyIcon.Click(notifyIcon,null);
}
}
}
}
}
#endregion
}
}
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。
爱飞 该用户已被删除
沙发
发表于 2015-1-19 23:38:47 | 只看该作者
主流网站开发语言之PHPHP的全名非常有趣,它是一个巢状的缩写名称——“PHP:HypertextPreprocessor”,打开缩写还是缩写。PHP是一种HTML内嵌式的语言(就像上面讲的ASP那样)。而PHP独特的语法混合了C,Java,Perl以及PHP式的新语法。它可以比CGI或者Perl更快速地执行动态网页。
飘灵儿 该用户已被删除
板凳
发表于 2015-1-25 22:57:10 | 只看该作者
CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。
小妖女 该用户已被删除
地板
发表于 2015-2-4 11:27:25 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
海妖 该用户已被删除
5#
发表于 2015-2-28 00:54:16 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
山那边是海 该用户已被删除
6#
发表于 2015-3-9 17:44:26 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-17 00:10:10 | 只看该作者
Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。
兰色精灵 该用户已被删除
8#
发表于 2015-3-23 08:43:48 | 只看该作者
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-19 12:30

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表