在Visual Studio 2015 update3上面进行编译的,若需要低版本可以下载VS版本转换器.
首先,启动VS2015。
在“开始”中点击“新建项目”
.Net版本自己选,我先用.Net4来作为例子
选择“Windows窗体应用程序”
名称自己写,我先以testprojectWindow作为例子
以上搞完后如图所示(窗口大小自选)
双击form1进入form1.cs:
在:
public Form1()
{
InitializeComponent();
}
[这个地方]添加以下代码:
const int Guying_HTLEFT = 10;
const int Guying_HTRIGHT = 11;
const int Guying_HTTOP = 12;
const int Guying_HTTOPLEFT = 13;
const int Guying_HTTOPRIGHT = 14;
const int Guying_HTBOTTOM = 15;
const int Guying_HTBOTTOMLEFT = 0x10;
const int Guying_HTBOTTOMRIGHT = 17;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0084:
base.WndProc(ref m);
Point vPoint = new Point((int)m.LParam & 0xFFFF,
(int)m.LParam >> 16 & 0xFFFF);
vPoint = PointToClient(vPoint);
if (vPoint.X <= 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)Guying_HTTOPLEFT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)Guying_HTBOTTOMLEFT;
else m.Result = (IntPtr)Guying_HTLEFT;
else if (vPoint.X >= ClientSize.Width - 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)Guying_HTTOPRIGHT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)Guying_HTBOTTOMRIGHT;
else m.Result = (IntPtr)Guying_HTRIGHT;
else if (vPoint.Y <= 5)
m.Result = (IntPtr)Guying_HTTOP;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)Guying_HTBOTTOM;
break;
case 0x0201
m.Msg = 0x00A1
m.LParam = IntPtr.Zero; //默认值
m.WParam = new IntPtr(2);//鼠标放在标题栏内
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
//<代码不解释>
再回到“form1设计中去”
在“属性窗口”中找到“FormBorderStyle”项,将默认的Sizable改为None;如下图所示
这下你会发现窗口标题栏都不见了,那么可以自定义窗口了;如下图所示
运行效果:
(图片文件过大,所以整合在附件里)
如果想让窗口第一次运行出现在屏幕正中央:
在“属性窗口”中的startposition项中,将WindowsDefaultLocation改为CenterScrreen即可
如图所示:
第一次发这类帖子,有可能做得不好
请多多谅解
例子下载:本帖附件
如果无法下载还有百度云:
http://pan.baidu.com/s/1eR6SjHS
首先,启动VS2015。
在“开始”中点击“新建项目”
.Net版本自己选,我先用.Net4来作为例子
选择“Windows窗体应用程序”
名称自己写,我先以testprojectWindow作为例子
以上搞完后如图所示(窗口大小自选)

双击form1进入form1.cs:

在:
public Form1()
{
InitializeComponent();
}
[这个地方]添加以下代码:
const int Guying_HTLEFT = 10;
const int Guying_HTRIGHT = 11;
const int Guying_HTTOP = 12;
const int Guying_HTTOPLEFT = 13;
const int Guying_HTTOPRIGHT = 14;
const int Guying_HTBOTTOM = 15;
const int Guying_HTBOTTOMLEFT = 0x10;
const int Guying_HTBOTTOMRIGHT = 17;
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0084:
base.WndProc(ref m);
Point vPoint = new Point((int)m.LParam & 0xFFFF,
(int)m.LParam >> 16 & 0xFFFF);
vPoint = PointToClient(vPoint);
if (vPoint.X <= 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)Guying_HTTOPLEFT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)Guying_HTBOTTOMLEFT;
else m.Result = (IntPtr)Guying_HTLEFT;
else if (vPoint.X >= ClientSize.Width - 5)
if (vPoint.Y <= 5)
m.Result = (IntPtr)Guying_HTTOPRIGHT;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)Guying_HTBOTTOMRIGHT;
else m.Result = (IntPtr)Guying_HTRIGHT;
else if (vPoint.Y <= 5)
m.Result = (IntPtr)Guying_HTTOP;
else if (vPoint.Y >= ClientSize.Height - 5)
m.Result = (IntPtr)Guying_HTBOTTOM;
break;
case 0x0201
m.Msg = 0x00A1
m.LParam = IntPtr.Zero; //默认值
m.WParam = new IntPtr(2);//鼠标放在标题栏内
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
//<代码不解释>
再回到“form1设计中去”
在“属性窗口”中找到“FormBorderStyle”项,将默认的Sizable改为None;如下图所示

这下你会发现窗口标题栏都不见了,那么可以自定义窗口了;如下图所示

运行效果:
(图片文件过大,所以整合在附件里)
如果想让窗口第一次运行出现在屏幕正中央:
在“属性窗口”中的startposition项中,将WindowsDefaultLocation改为CenterScrreen即可
如图所示:

第一次发这类帖子,有可能做得不好
请多多谅解
例子下载:本帖附件
如果无法下载还有百度云:
http://pan.baidu.com/s/1eR6SjHS
学习了,先研究一下
我们需要什么?
萝莉!御姐!WPF!
萝莉!御姐!WPF!
本帖最后由 zmdoyouknow 于 2017-2-28 20:25 编辑
定义个鼠标拖动事件,直接DragMove()不就行了吗?
更正,WPF直接定义MouseMove,后台加上DragMove()即可。
WinForm的话:复制代码前台事件中MouseDown定义为Form1_MouseDown
MouseMove定义为Form1_MouseMove
也可行
定义个鼠标拖动事件,直接DragMove()不就行了吗?
更正,WPF直接定义MouseMove,后台加上DragMove()即可。
WinForm的话:
- private Point mPoint = new Point();
- private void Form1_MouseDown(object sender, MouseEventArgs e)
- {
- mPoint.X = e.X;
- mPoint.Y = e.Y;
- }
- private void Form1_MouseMove(object sender, MouseEventArgs e)
- {
- if (e.Button == MouseButtons.Left)
- {
- Point myPosittion = MousePosition;
- myPosittion.Offset(-mPoint.X, -mPoint.Y);
- Location = myPosittion;
- }
- }
MouseMove定义为Form1_MouseMove
也可行
讲真,c#启动器的教程真心少
88888888888888888888888888
学习了 我刚接触C#