关于 无边框 程序 的二个问题
当 FormBorderStyle 设置为 none 后:
1。因为去掉了边框,则最小化图标也被去除了。请问怎样设置可以在任务栏的当前程序栏(不是通知栏图标)上鼠标右键,能出现 关闭程序 的字样;
2。因为没有顶栏,所以要拖动程序的话,要自己写代码,一般做法实现的就是拖动程序,整个框体被拖动,在拖动过程中会不断重绘。这样视觉效果不是很好(即使用了双缓冲)。请问能不能做到向普通程序那样,拖动窗体出现的是一个框体大小的虚框,然后鼠标释放后,框体移动的目标位置。就象 msn 那样;
先谢了!
[解决办法]
1.自己另外添加按钮,实现最大小化、关闭按钮是可以的
[解决办法]
1、在任务栏不用写什么吧,无论是文本文件,或者是文件夹,或者是其他执行程序,右键都会有关闭程序吧。
2、MouseDown事件记录鼠标坐标,MouseUp事件记录鼠标坐标,然后设置窗体位置。
[解决办法]
第一个问题可以这样,用API解决
声明部分:
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Integer) As Integer
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Integer
Private Const GWL_STYLE = (-16)
Private Const WS_CAPTION = &HC00000 '带标题栏的窗口
Private Const WS_SYSMENU = &H80000 '带系统菜单的窗口
初始化部分
Dim lStyle As Long = GetWindowLong(Me.Handle, GWL_STYLE)
lStyle = (lStyle Or WS_SYSMENU) And Not WS_CAPTION
SetWindowLong(Me.Handle, GWL_STYLE, lStyle)
测试过,没问题
第二个还没想好,考虑在鼠标按下并拖动时禁止重绘,在mouseup事件后恢复
[解决办法]
1、按6楼的方法,这样改一下试试:
lStyle = (lStyle Or WS_SYSMENU) And Not WS_CAPTION
2、估计是你实现拖动的方法不对。重写WndProc,判断WM_NCHITTEST消息时,判断鼠标位置(LParam)在可拖动位置上时,返回HICAPTION。
[解决办法]
第一个问题6L可以啊,第二个问题似乎受系统设置控制……不知道能不能针对单个窗体实现。UP!
[解决办法]
我也来顶顶...
[解决办法]
mark
[解决办法]
private void fmLogin_MouseDown(object sender, MouseEventArgs e) { int xOffset; int yOffset; if (e.Button == MouseButtons.Left) { xOffset = -e.X - SystemInformation.FrameBorderSize.Width; yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height; mouseOffset = new Point(xOffset, yOffset); isMouseDown = true; } } private void fmLogin_MouseMove(object sender, MouseEventArgs e) { if (isMouseDown) { Point mousePos = Control.MousePosition; mousePos.Offset(mouseOffset.X+5, mouseOffset.Y+30); Location = mousePos; } } private void fmLogin_MouseUp(object sender, MouseEventArgs e) { // 修改鼠标状态isMouseDown的值 // 确保只有鼠标左键按下并移动时,才移动窗体 if (e.Button == MouseButtons.Left) { isMouseDown = false; } }
[解决办法]
'本示例模拟 最小化,最大化,关闭 按钮 (要用4个按钮图片)如要生动则要更多的图片
'使用3个(Label) 标签控件
Public Class Form1
Private Sub Label3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label3.Click
Me.Close()
End Sub
Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
Me.WindowState = FormWindowState.Minimized
End Sub
Private Sub Label2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label2.Click
If Me.WindowState = FormWindowState.Maximized Then
Me.WindowState = FormWindowState.Normal
Label2.Image = Image.FromFile("C:\Documents and Settings\Administrator\My Documents\ky2.bmp")
Else
Me.WindowState = FormWindowState.Maximized
Label2.Image = Image.FromFile("C:\Documents and Settings\Administrator\My Documents\ky4.bmp")
End If
End Sub
End Class