Windows拖动菜单揭密

Windows拖动菜单揭密 数据挖掘研究院

本文简述编程制作Windows拖动菜单的基本方法,并用Delphi 5.0给出示例代码。 数据挖掘研究院

其实在Windows编程中制作拖动菜单的基本方法比许多人想象的要简单的多(这是本人在Microsort网站上查阅了大量资料编程测试后得出的结论),前段时间本人在网上看到一些另类实现方法,甚觉不妥。

拖动菜单制作主要使用的消息和函数是一个在Win98以后版本才有的Windows消息WM_MENUDRAG和一个菜单类型常量MIM_ MNS_DRAGDROP;一个数据类型TMenuInfo和一个API函数SetMenuInfo()。其它则是一些大家都熟悉的Windows消息和API菜单函数。 数据挖掘工具

以下按Delphi编程方式给出具体的步骤和代码。 数据挖掘研究院

第一步,创建一个项目,不用多说。 数据挖掘论坛

第二步,定义如下二个Windows消息响应过程:
    procedure WMContextMenu(var Msg: TMessage); message WM_CONTEXTMENU;

数据挖掘交友

procedure WMMenuDrag(var Msg: TMessage); message WM_MENUDRAG; 数据挖掘工具

第三步,编写上面二个Windows消息响应过程的实现部份,作为一个示例如下:

数据挖掘交友

procedure TForm1.WMContextMenu(var Msg: TMessage); 数据挖掘实验室

var 数据挖掘论坛

  MenuInfo:TMenuInfo; 数据挖掘交友

  Menu:HMenu; 数据挖掘实验室

  pt:TPoint; 数据挖掘实验室

  cmd:Cardinal; 数据挖掘实验室

begin 数据挖掘研究院

  pt:=Point(LOWORD(Msg.lParam),HIWORD(Msg.lParam)); 数据挖掘工具

  Menu:=CreatePopupMenu; 数据挖掘论坛

  try

数据挖掘研究院

    InsertMenu(Menu,0,MF_BYPOSITION,MF_STRING,"AAAAA");//示例添加几个任意的菜单项

数据挖掘研究院

    InsertMenu(Menu,1,MF_BYPOSITION,MF_STRING,"BBBBB"); 数据挖掘研究院

    InsertMenu(Menu,2,MF_BYPOSITION,MF_STRING,"CCCCC");

    InsertMenu(Menu,3,MF_BYPOSITION,MF_STRING,"DDDDD"); 数据挖掘交友

 

数据挖掘论坛

    MenuInfo.cbSize:=sizeof(TMenuInfo);

    MenuInfo.fMask:=MIM_STYLE;

    MenuInfo.dwStyle:=MNS_DRAGDROP; //关键,指定Menu是拖动菜单,否则将不响应WM_MENUDRAG消息 数据挖掘工具

    SetMenuInfo(Menu,MenuInfo);

    cmd:=Cardinal(TrackPopupMenuEx(Menu, 数据挖掘研究院

                  TPM_RETURNCMD or TPM_LEFTBUTTON or TPM_LEFTALIGN ,

数据挖掘实验室

                  pt.X,pt.Y,Handle,nil)); 数据挖掘工具

    //com=0 时,出错 数据挖掘研究院

    if cmd>0 then 数据挖掘研究院

    begin

数据挖掘实验室

      //运行你指定的命令

数据挖掘论坛

    end; 数据挖掘论坛

  finally

数据挖掘实验室

    DestroyMenu(Menu);

  end;//try 数据挖掘研究院

end; 数据挖掘研究院

  数据挖掘论坛

procedure TForm1.WMMenuDrag(var Msg: TMessage);

数据挖掘实验室

var 数据挖掘工具

  buffer:array [0..255] of Char;

begin

数据挖掘交友

  //响应用户动,制作拖动菜单并不难,难的是这一部份,当拖动发生时,程序员要在此如何完成拖动

数据挖掘实验室

  GetMenuString(Msg.LParam,Msg.wParam, @buffer, sizeof(buffer),MF_BYPOSITION ); 数据挖掘交友

  Caption:=Format("你拖动的菜单项: ID=%d ; 标题是: %s",[Msg.wParam,buffer]); 数据挖掘研究院

//必须返加回 MND_ENDMENUMND_CONTINUE 数据挖掘研究院

//当用MND_ENDMENU时每拖动一下,菜单都将消失,如果你不想它消失,可使用MND_CONTINUE 数据挖掘研究院

  Msg.Result:=MND_ENDMENU;

数据挖掘交友

end;

 

数据挖掘工具

第四步,运行程序,单击鼠标右键,拖动其弹出菜单,主窗口的标题栏将指示出你所进行的拖动。 数据挖掘交友

到此为此一个基本的拖动菜单已经完成,虽然在拖动时你看不到如同Windows开始菜单一样的拖动效果,但它的的确确是一个非常正宗的拖动菜单,只要编程者在WMMenuDrag(var Msg: TMessage)过程中充分发挥其想象,任何拖动样式都可能被制作出来。不过本人用DelphiTMainMenuTPopupMenu类虽经不懈努力均未能实现其菜单项的拖动。 数据挖掘研究院

如果你有什么疑问,可到www.netgocn.com去和我交流。

数据挖掘论坛

  数据挖掘工具

成都 李晓方 数据挖掘工具

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:把图标存储在SHELL32.DLL
下一篇:《Delphi高手突破》节选--脱离VCL的Windows程序
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • GDI+简介
  • COM与DCOM的区别与联系
  • 使用Delphi解析XML 文档
  • 如何设置delphi/cbuilder/BDE/MSSQL
  • BORLAND在“迫害”程序员?
  • 将image的图片保存为JPG格式图片方法
  • InstallShieldExpressfordelphi制作安装程
  • Real Programmers Use Pascal
  • 关于在COM中使用可选参数的研究
  • TStrings的AddObject方法应用
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • BORLAND在“迫害”程序员?
  • 李维:我的回忆和一些有趣的事(精彩绝伦)
  • 李维看.net和DELPHI6(含李维照片)
  • 《代码大全》电子版1.01发布了
  • Real Programmers Use Pascal
  • Kylix安装手记
  • Borland与Microsoft关于Delphi的对话
  • InstallShieldExpressfordelphi制作安装程
  • 关于在COM中使用可选参数的研究
  • msagent经典用法
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静