请问怎么在C#里用API函数SendMessage来显示标题栏的系统菜单??? 如题!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是!我去掉了窗体的标题栏!但是我想在窗体的任意地方点击右键都会显示标题栏的右键菜单用SendMessage怎样显示呢??? [DllImport("User32.dll")] static extern IntPtr FindWindow(string lpClassName,string lpWindowName);[DllImport("User32.dll")] static extern int SendMessage(IntPtr hWnd,int msg,int wParam,ref int lParam);用this.Handle得到当前窗口的Handle,然后传递给SendMessage IntPtr 参数,消息编号根据你需要使用的功能自己查阅 这样试试看:[DllImport("User32.dll")]public static extern IntPtr GetSystemMenu(IntPtr hWnd, int bRevert);[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]public static extern bool TrackPopupMenuEx(IntPtr hmenu, int fuFlags, int x, int y, IntPtr hwnd, TPMPARAMS tpm);private void btnShowSysMenu_Click(object sender, EventArgs e){ IntPtr hMenu; Point location = this.Location; hMenu = GetSystemMenu(this.Handle, 0); TrackPopupMenuEx(hMenu, 0x42, location.X, location.Y, this.Handle, null);} 你可以向系统菜单添加自己的菜单项以方便使用,比如用AppendMenu来添加一个菜单项. 学习下 API 我还不是不大会 TO:hbxtlhx(平民百姓)谢谢!我试试 本来已经是可以显示出来的。可就是响应不了菜单的选项之前有位朋友给了我一段代码。他说可以响应的!可是我不知道怎么用大家请看:http://community.csdn.net/Expert/topic/5305/5305417.xml?temp=.8464319 using System.Runtime.InteropServices;const uint TPM_LEFTBUTTON = 0;const uint TPM_RIGHTBUTTON = 2;const uint TPM_LEFTALIGN = 0;const uint TPM_CENTERALIGN = 4;const uint TPM_RIGHTALIGN = 8;const uint TPM_TOPALIGN = 0;const uint TPM_VCENTERALIGN = 0x10;const uint TPM_BOTTOMALIGN = 0x20;const uint TPM_RETURNCMD = 0x100;const uint WM_SYSCOMMAND = 0x0112;#region DllImport[DllImport("User32.dll")]static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);[DllImport("User32.dll")]static extern bool GetCursorPos(out Point lpPoint);[DllImport("User32.dll")]static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags, int x, int y, int nReserved, IntPtr hWnd, out Rectangle prcRect);[DllImport("User32.DLL")]public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);#endregionprivate void button1_Click(object sender, EventArgs e){ Point vPoint; Rectangle vRect; GetCursorPos(out vPoint); SendMessage(Handle, WM_SYSCOMMAND, TrackPopupMenu( GetSystemMenu(Handle, false), TPM_RETURNCMD | TPM_LEFTBUTTON, vPoint.X, vPoint.Y, 0, Handle, out vRect), 0);} 加入TPM_RETURNCMD就会返回用户点击菜单的Command值然后发送WM_SYSCOMMAND消息模拟 c# 二进制dat和xml文件之间的转换 动态生成的控件,在页面回送时如何传递生成的控件的值?附源码 哪里有ibatis.net与spring.net资料下载啊,高分求啊! 求教String编码格式问题 C#中存在System.Data.SQL这个命名空间么 一个有关自定义按钮的问题 各位高人你们都用什么书学习C#? 字符串的大小比较运算符是什么? 请问 如何引用一个自定义.net组件(From dll )而不需要拷贝到相同的目录 关于Excel的问题 关于Winforms图形绘制 <Graphics>的使用... 请问C#里怎么用API函数SendMessage来显示标题栏的系统菜单???
用SendMessage怎样显示呢???
static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("User32.dll")]
static extern int SendMessage(IntPtr hWnd,int msg,int wParam,ref int lParam);
用this.Handle得到当前窗口的Handle,然后传递给SendMessage IntPtr 参数,消息编号根据你需要使用的功能自己查阅
[DllImport("User32.dll")]
public static extern IntPtr GetSystemMenu(IntPtr hWnd, int bRevert);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool TrackPopupMenuEx(IntPtr hmenu, int fuFlags, int x, int y, IntPtr hwnd, TPMPARAMS tpm);
private void btnShowSysMenu_Click(object sender, EventArgs e)
{
IntPtr hMenu;
Point location = this.Location;
hMenu = GetSystemMenu(this.Handle, 0);
TrackPopupMenuEx(hMenu, 0x42, location.X, location.Y, this.Handle, null);
}
API 我还不是不大会
const uint TPM_RIGHTBUTTON = 2;
const uint TPM_LEFTALIGN = 0;
const uint TPM_CENTERALIGN = 4;
const uint TPM_RIGHTALIGN = 8;
const uint TPM_TOPALIGN = 0;
const uint TPM_VCENTERALIGN = 0x10;
const uint TPM_BOTTOMALIGN = 0x20;
const uint TPM_RETURNCMD = 0x100;
const uint WM_SYSCOMMAND = 0x0112;#region DllImport
[DllImport("User32.dll")]
static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("User32.dll")]
static extern bool GetCursorPos(out Point lpPoint);
[DllImport("User32.dll")]
static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags,
int x, int y, int nReserved, IntPtr hWnd, out Rectangle prcRect);
[DllImport("User32.DLL")]
public static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
#endregionprivate void button1_Click(object sender, EventArgs e)
{
Point vPoint;
Rectangle vRect;
GetCursorPos(out vPoint);
SendMessage(Handle, WM_SYSCOMMAND, TrackPopupMenu(
GetSystemMenu(Handle, false),
TPM_RETURNCMD | TPM_LEFTBUTTON, vPoint.X, vPoint.Y,
0, Handle, out vRect), 0);
}
然后发送WM_SYSCOMMAND消息模拟