快速业务通道

C++Builder定制系统菜单

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

通常在应用程序的主窗体中,利用鼠标左键点击左上角的图标,会弹出一个菜单,称之为“系统菜单”。

在窗体中并没有系统菜单对应的组件,所以有时我们需要定制系统菜单时就比较麻烦。具体可以能过下面的步骤实现:

.在系统菜单上添加所需的菜单项。

.为新添加的菜单项定义OnClick事件的处理过程。

下面的例程中,在系统菜单中添加了一个“前端显示(A)”菜单项,通过该菜单项,可以使窗体始终显示在最前端或为普通窗体模式。具体实现过程如下:

1)通过菜单File|New Application创建一个新的工程。

2)添加窗体Form1的OnClick事件的处理过程如下:

void _fastcall TForm1::FormCreate(Tobject *Sender)
{
  //设置系统菜单
  AppendMenu(GetSystemMenu(Handle,false),MF_SEPARATOR,0,"");
  AppendMenu(GetSystemMenu(Handle,false),MF_STRING,200,"前端显示(&A)");
}

3)在文件Unit1.h头文件中增加如下语句:

...
#include<Menus.hpp>
...

4)在TForm1的类型定义中,添加系统菜单中新建菜单项的OnClick事件的处理过程的声明:

...
public:    //User declarations
   __fastcall TForm1(TComponent *Owner);
   MESSAGE void __fastcall SystemMenuCommand(TWMMenuSelect &Msg);
BEGIN_MESSAGE_MAP
   MESSAGE_HANDLER(WM_SYSCOMMAND,TWMMenuSelect,SysteMenuCommand);
END_MESSAGE_MAP(TForm);
};

5)手工添加系统菜单中新建菜单项的OnClick事件的处理过程如下:

void __fastcall TForm1::SystemMenuCommand(TWMMenuSelect &Msg)
{
  TForm::Dispatch(&Msg);
  if(Msg.IDItem==200)
  {
   if(Form1->FormStyle==fsNormal)
   {
    //将窗体设置为总在前端显示
    Form1->FormStyle=fsStayOnTop;
    //重新设置系统菜单
    AppendMenu(GetSystemMenu(Handle,false),MF_SEPARATOR,0,"");
    AppendMenu(GetSystemMenu(Handle,false),MF_STRING,200,"前端显示(&A)");
    //在新添加的菜单项前增加一个选中标志
    ModifyMenu(GetSystemMenu(Handle,false),200,MF_CHECKED,200,"前端显示(&A)");
   }
  }
  else
  {
   //将窗体设置为普通模式
   Form1->FormStyle=fsNormal;
   重新设置系统菜单
   AppendMenu(GetSystemMenu(Handle,false),MF_SEPARATOR,0,"");
   AppendMenu(GetSystemMenu(Handle,false),MF_STRING,200,"前端显示(&A)");
  {
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号