这个方法是用来处理消息的,包括鼠标的各种消息。前一种方法中讲到了非客户区的鼠标消息,但我在msdn里找了半天,没找到相关的非客户区的鼠标事件。但WndProc里可以处理。原理:将鼠标在客户区按下的消息更改为在非客户区的标题栏按下。 protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0201://鼠标左键按下的消息
m.Msg = 0x00A1;//更改消息为非客户区按下鼠标
m.LParam = IntPtr.Zero;//默认值
m.WParam = new IntPtr(2);//鼠标放在标题栏内
break;
}
base.WndProc(ref m);
}这个重写一下就行了
{
switch (m.Msg)
{
case 0x0201://鼠标左键按下的消息
m.Msg = 0x00A1;//更改消息为非客户区按下鼠标
m.LParam = IntPtr.Zero;//默认值
m.WParam = new IntPtr(2);//鼠标放在标题栏内
break;
}
base.WndProc(ref m);
}这个重写一下就行了
解决方案 »
- 如何读取ini文件的key
- C#轻松打造vista透明窗口(xp系统无任何vista主题-第二版毛玻璃效果)
- 怎样在Form1中的LISTBOX中显示Form2中的ComboBox的选项呢??
- 事件处理函数为何偶然会失效?
- 怎样通过数据绑定的方法,让TextBox实时的输出一系列字符串??(类似Visual Studio中的输出窗口)
- 再问REMOTING问题:REMOTING中不能用反射调用远程对象的方法?
- 请教:怎样判断TreeNode.Parent是否存在
- 十行小程序,有关多线程,高手来看看
- dataView中的RowFilter怎么写SQL语句的Group by
- 前进,后退,上移,下移,又该如何???左DataGrid中……
- 发布程序出错,请大侠帮助,谢谢非常感谢!!
- 钣金现有折弯机刀口配置程序;如何取得数据
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern bool RemoveMenu(IntPtr hMenu, int uPosition, int uFlags);
IntPtr hMenu;
hMenu = GetSystemMenu(this.Handle, false);
RemoveMenu(hMenu, SC_MOVE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); //移动菜单
public const int MF_BYCOMMAND = 0x00000000;
public const int MF_DISABLED = 0x00000002;
public const int MF_GRAYED = 0x00000001;
public const int SC_MOVE = 0xf010;
private void Pop()
{
Form frm2 = new Form();
frm2.Text = ".....";
//其他初始化操作
frm2.ShowDialog();
}
frm2就始终再上面了~模式窗体
当然可能还需要检查一下 DialogResult。
...
if (DialogResult.OK == frm1.ShowDialog())
{
...
frm2.ShowDialog();
用这种方式显示,其它窗体就不能动了,模式对话框与非模式对话框的问题
我的form1 和form2都不是全屏显示的, 在运行程序后 我用鼠标点击桌面空白区域,在form1 form2就会在任务最小化 我的要求是无论鼠标点什么地方 这个窗口都不变化(不让它最小化,始终显示在屏幕上),除非我执行 this.hide();或其他退出命令
阻止用户最小化窗体,可以使用3楼的方法,从系统菜单中移去最小化菜单项(也会导致窗体右上角相应按钮实效),也可设置 Form.MinimizeBox = false; 从而禁用窗体右上角最小化按钮及系统菜单中的最小化菜单项。
但是“显示桌面”可以让所有窗体最小化,这个似乎阻止不了,但应该可以通过在合适的时机设置 Form.WindowState = FormWindowState.Normal; 来解决。
因为不熟悉 Windows API,未能提供 P/Invoke 的解决办法,上述办法都是可以在窗体设计器中做到的,简单方便有余,能不能满足要求就难说了。
2.用模式窗体(ShowDialog方法)