C#模拟窗体系统菜单

本文介绍了一个使用C#实现的上下文菜单显示方法。通过调用.NET Framework提供的PInvoke来调用Windows API函数,实现了获取系统菜单、获取鼠标位置、发送消息以及跟踪弹出菜单等功能。这些功能对于开发桌面应用程序时提供上下文敏感的操作非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

usingSystem.Runtime.InteropServices;

constuintTPM_LEFTBUTTON=0;
constuintTPM_RIGHTBUTTON=2;
constuintTPM_LEFTALIGN=0;
constuintTPM_CENTERALIGN=4;
constuintTPM_RIGHTALIGN=8;
constuintTPM_TOPALIGN=0;
constuintTPM_VCENTERALIGN=0x10;
constuintTPM_BOTTOMALIGN=0x20;
constuintTPM_RETURNCMD=0x100;
constuintWM_SYSCOMMAND=0x0112;

DllImport#regionDllImport
[DllImport(
"User32.dll")]
staticexternIntPtrGetSystemMenu(IntPtrhWnd,boolbRevert);
[DllImport(
"User32.dll")]
staticexternboolGetCursorPos(outPointlpPoint);
[DllImport(
"User32.dll")]
staticexternintTrackPopupMenu(IntPtrhMenu,uintuFlags,
intx,inty,intnReserved,IntPtrhWnd,outRectangleprcRect);
[DllImport(
"User32.DLL")]
publicstaticexternintSendMessage(IntPtrhWnd,uintMsg,intwParam,intlParam);
#endregion


privatevoidbutton1_Click(objectsender,EventArgse)
...{
PointvPoint;
RectanglevRect;
GetCursorPos(
outvPoint);
SendMessage(Handle,WM_SYSCOMMAND,TrackPopupMenu(
GetSystemMenu(Handle,
false),
TPM_RETURNCMD
|TPM_LEFTBUTTON,vPoint.X,vPoint.Y,
0,Handle,outvRect),0);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值