,C#   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,C#
您的位置:软件 > 开发者网络 > 微软开发专栏 > Visual Studio.net专栏 > C# > 正文
用C#和本地Windows API操纵系统菜单
[文章信息]
作者:朱先中
时间:2005-04-22
出处:天极网
责任编辑:方舟
[文章导读]
.NET框架是Windows应用领域中一个非常新的技术,可以肯定在未来的一段时间内,.NET应用必须与现存的Windows技术交互作用
advertisement
热点推荐
· VB实现SQL Server 2000存储过程调用
· Java解析网络数据流的三种特殊方法
· 多媒体教程:网页表单文本域类型
· 体验V5E地形编辑:整体控制
· 打造完美可随意安装的WinXP镜像
[正文]

上一页  1 2 3  

  六、检测自定义的菜单项是否被点击

  这是较难实现的部分。因为你必须重载你的从Form或Control继承类的WndProc成员函数。你可以这样实现:

protected override void WndProc ( ref Message msg )
{
 base.WndProc(ref msg);
}

  注意,必须调用基类的WndProc实现;否则,不能正常工作。

  现在,我们来分析一下如何重载WndProc。首先应该截获WM_SYSCOMMAND消息。当用户点击系统菜单的某一项或者选择“最大化”按钮,“最小化”按钮或者“关闭”按钮时,我们要检索该消息。特别注意,消息对象的WParam参数正好包含了被点击菜单项的ID。于是我们可以实现如下重载:

protected override void WndProc ( ref Message msg )
{
 // 通过截取WM_SYSCOMMAND消息并进行处理
 // 注意,消息WM_SYSCOMMAND被定义在WindowMessages枚举类中
 // 消息的WParam参数包含点击的项的ID
 // 该值与通过上面类的InsertMenu()或AppendMenu()成员函数传递的一样

 if ( msg.Msg == (int)WindowMessages.wmSysCommand )
 {
  switch ( msg.WParam.ToInt32() )
  {
   case m_ResetID: // reset菜单项的ID
   {
    if ( MessageBox.Show(this, "\tAre you sure?","Question", MessageBoxButtons.YesNo) ==
DialogResult.Yes )
    { // 复位系统菜单
     SystemMenu.ResetSystemMenu(this);
    }
   } break;
   case m_AboutID:
   { // “关于”菜单项
    MessageBox.Show(this, "作者: 朱先中 \n\n "+"e-mail: sdmyzxz@163.com", "关于");
   } break;
  // 这里可以针对另外的菜单项设计处理过程
  }
 }
 // 调用基类函数

 base.WndProc(ref msg);
}

  七、总结

  实现上述目标的另一个可能的方法是,通过创建一个事件OnSysCommand并当消息WM_SYSCOMMAND传来时激活它,然后把属性WParam传递给该事件的句柄。读者可以自行编程验证。

  总之,本文通过一个简单的系统菜单修改例子,分析了用C#使用.NET平台调用机制来调用DLL中的非托管函数的基本步骤及注意事项。另,所附源程在Windows2000 Server/ VS .NET2003下调试通过。

上一页  1 2 3  

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
,C#相关内容,C#焦点新闻
  • Visual C#编写3D游戏框架示例
  • 利用Visual C#实现Window管道技术
  • ADO.NET的开发场景及传统ADO的处理
  • 在Visual C#中使用XML指南之读取XML
  • 用C#把文件转换为XML
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,C#Advertisement