PDA

View Full Version : سوال: از كار انداختن حركت فرم



ali_kolahdoozan
سه شنبه 24 اردیبهشت 1387, 11:45 صبح
سلام

يك api بود فرم را در حالت عادي از حالت moveable در مي آورد . هر چي گشتم پيدا نشد كسي ندارتش؟

علیرضا مداح
سه شنبه 24 اردیبهشت 1387, 12:42 عصر
سلام دوست عزیز
شما باید متد WindProc مربوط به فرم را Override کرده و پیغام NCHITTEST را کنترل نمایید :


using System.Windows.Forms;
using System;
using System.Runtime.InteropServices;
using System.Security;
namespace WindowsApplication52
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
protected override void WndProc(ref Message m)
{
const int WM_NCHITTEST = 0x0084;
const int HTBORDER = 18;
const int HTCAPTION = 2;
if (m.Msg == WM_NCHITTEST)
{
IntPtr result = UnsafeNativeMethods.DefWindowProc(this.Handle, m.Msg, m.WParam, m.LParam);
int location = result.ToInt32();
switch (location)
{
case HTCAPTION:
// tell Windows a border was encountered instead
// so it won't start the drag-move process.
m.Result = new IntPtr(HTBORDER);
break;
default:
base.WndProc(ref m);
break;
}
}
else
{
base.WndProc(ref m);
}
}
[SuppressUnmanagedCodeSecurity]
internal static class UnsafeNativeMethods
{
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr DefWindowProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
}
}
}
//ref : http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=934125&SiteID=1