请问怎么将菜单标题栏的右键菜单变换成为任务栏里的右键菜单?(88分)

  • 主题发起人 主题发起人 sunnyfairy
  • 开始时间 开始时间
S

sunnyfairy

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎么将菜单标题栏的右键菜单变换成为任务栏里的右键菜单?
不知道怎么得到标题栏右键菜单句柄。
如果直接在任务栏里添加的话,不好处理各菜单之间的逻辑关系?
还有怎么样的菜单的前面加上图标呢?比如那个最大化,最小化等等。
 
一般都是砍掉windows的标题栏再画自己的吧
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
// 我的消息过滤器
procedure OnAppMessage(var Msg: TMsg; var Handled: Boolean);
public
{ Public declarations }
end;

var
Form1: TForm1;

const
My_SimpleCMD1 = WM_USER + 1; // 定义三个用户消息,用来处理菜单项被点击
// 时相应的动作
My_SimpleCMD2 = WM_USER + 2;
My_SimpleCMD3 = WM_USER + 3;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := OnAppMessage; //定义自己的消息处理过程
//定义了提交、反馈、处理三个菜单项
AppendMenu(GetSystemMenu(Application.Handle, FALSE),MF_STRING,
My_SimpleCMD1,'提交');
AppendMenu(GetSystemMenu(Application.Handle, FALSE),MF_STRING,
My_SimpleCMD2,'反馈');
AppendMenu(GetSystemMenu(Application.Handle, FALSE),MF_SEPARATOR, 0, '-'); // 定义一分割线
AppendMenu(GetSystemMenu(Application.Handle, FALSE),MF_STRING,My_SimpleCMD3,'处理');
end;

procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean);
begin
// 定制自己的消息处理过程
if (Msg.message = WM_SYSCOMMAND) and (Msg.wParam = My_SimpleCMD1) then
begin
ShowMessage('正在提交...');
Handled := True;
//...
end;
if (Msg.message = WM_SYSCOMMAND) and (Msg.wParam = My_SimpleCMD2) then
begin
ShowMessage('正在反馈...');
Handled := True;
end;


if (Msg.message = WM_SYSCOMMAND) and (Msg.wParam = My_SimpleCMD3) then
begin
ShowMessage('正在处理...');
Handled := True;
end;
end;
end.
 
楼上的这个是添加自己的菜单
这样处理的话不大好处理各菜单的逻辑关系,而不是将标题栏的右键菜单换成任务栏的右键菜单啊。

另:添加自己菜单时,怎么在菜单项前面添加图标呢?就像最大化,最小化前面的小图标?
 
是否可以将你的右键菜单加到一个PopupMenu中,然后作为子菜单项添加系统菜单中:
AppendMenu(SysMenu_Hwnd, MF_POPUP, PopupMenu1.Handle, 'Test');

不过好象有点问题,PopupMenu中如果有图标的话,菜单文字就无法显示,楼主可以试试,或者换个别的菜单控件

或者看看这几个API吧:AppendMenu、InsertMenu、ModifyMenu、InsertMenuItem
 
明明我只有一个待答问题,共提出了6个问题
大富翁非显示我有7个问题,2个问题待答。。。[^][^]
 
还有非技术问题!
 
哦,谢谢各位,只是问题没有解决。
 
多人接受答案了。
 
后退
顶部