代码如下//----声明外部函数及全局变量--------------------------------------------------------------------
[DllImport("user32")]
private static extern bool ReleaseCapture();
[DllImport("user32")]
private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0Xf010;
public const int HTCAPTION = 0x0002; private void pictureBox_topmiddle_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}private void pictureBox_topmiddle_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
else
{
this.WindowState = FormWindowState.Normal;
}
}
[DllImport("user32")]
private static extern bool ReleaseCapture();
[DllImport("user32")]
private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0Xf010;
public const int HTCAPTION = 0x0002; private void pictureBox_topmiddle_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
}private void pictureBox_topmiddle_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
else
{
this.WindowState = FormWindowState.Normal;
}
}
解决方案 »
- 批量修改lable标签背景颜色。
- 在线等人帮忙 关于TabContainer的问题
- C#如何截取文件名。。。。。。
- 文件权限问题
- 请教一个C#代码超时则自动停止的问题
- 谁有好用的停靠窗口控件或源码?
- 请问各位老大c#2005和c#2003有什么区别啊,如区别不大我就还是先学学2003吧。
- Windwos画图板 的文字功能如何实现 C#编程问题
- 疑问!!关于String对象的资源占用问题!
- 应用dsoFramer.ocx出现the associated COM server does not support ActiveX Document emb
- c# && sql的问题
- C#读写文件的问题?
你这picturebox到底是窗体还是图片框?
我想左键双击图片(pictureBox_topmiddle),可以最大化,在双击还原
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
消息后,鼠标已经被系统认为在窗体的顶部也就是标题栏按下了.
那你说说看你的控件怎么获得双击消息?
自已做的一个窗口,标题栏是图片,
我想左键双击图片(pictureBox_1),可以最大化,在双击还原
代码//----声明外部函数及全局变量--------------------------------------------------------
[DllImport("user32")]
private static extern bool ReleaseCapture();
[DllImport("user32")]
private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0Xf010;
public const int HTCAPTION = 0x0002; //pictureBox_1 MouseDown事件
private void pictureBox_1_MouseDown(object sender, MouseEventArgs e)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
} //pictureBox_1 DoubleClick事件
private void pictureBox_1_DoubleClick(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
else
{
this.WindowState = FormWindowState.Normal;
}
}但左双击pictureBox_1不执行pictureBox_1_DoubleClick事件,右双击可以执行,
但我把pictureBox_1 MouseDown事件注释掉,左双击就能执行DoubleClick事件不知道为什么
5楼已经说了,你mousedown的时候,已经用SendMessage将它变成单击非客户区的标题了,而doubleclick是由两个mousedown(click)组成的,自然就没了
bool为真
记录时间再次mousedown的时候
如果bool为真,且时间差小于一定数值,则判断为双击
不执行Sendmessage
执行双击事件
将bool置为假
public Frm1()
{
InitializeComponent();
pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown);
doubleClickTimer.Tick +=new EventHandler(doubleClickTimer_Tick);
pictureBox1.DoubleClick += new EventHandler(pictureBox1_DoubleClick);
}
[DllImport("user32")]
private static extern bool ReleaseCapture();
[DllImport("user32")]
private static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0Xf010;
public const int HTCAPTION = 0x0002;
Timer doubleClickTimer = new Timer();
int DoubleClickTime;//双击对比时间
bool msgDown = false;//表示当前鼠标左键按下是否是发送的消息 private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (!msgDown)
{
ReleaseCapture();
SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0); if (e.Button == MouseButtons.Left)
{
msgDown = true;
DoubleClickTime = 0;
doubleClickTimer.Start();
//发送鼠标左键按下消息
SendMessage((sender as PictureBox).Handle, 0x201, 0, ((e.Y << 16) | (e.X & 0xffff)));
}
}
}
/// <summary>
/// 双击时间计算
/// </summary>
void doubleClickTimer_Tick(object sender, EventArgs e)
{
DoubleClickTime += 125;
if (DoubleClickTime >= SystemInformation.DoubleClickTime)
{
msgDown = false;
doubleClickTimer.Stop();
}
} private void pictureBox1_DoubleClick(object sender, EventArgs e)
{
msgDown = false;
doubleClickTimer.Stop();
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Maximized;
}
else
{
this.WindowState = FormWindowState.Normal;
}
}