读书人

C#controlbox替false后右击没有关闭

发布时间: 2013-03-28 10:20:24 作者: rapoo

C#controlbox为false后,右击没有关闭,最大化,最小化菜单了
C#controlbox为false
在桌面任务栏右击没有关闭,最大化,最小化菜单了,如何出来呢?谢谢各位大虾。
C#controlbox替false后,右击没有关闭,最大化,最小化菜单了
[解决办法]
http://blog.csdn.net/ymchinabye/article/details/6444525
[解决办法]
首先要引入win32.dll,自己封装一个常用的类包


using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace Galsun.HH.FCX.CodeMerge
{
public static class Win32
{
/// <summary>
/// 释放鼠标操作
/// </summary>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool ReleaseCapture();
/// <summary>
/// 发送信息
/// </summary>
/// <param name="hwnd"></param>
/// <param name="wMsg"></param>
/// <param name="wParam"></param>
/// <param name="lParam"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam);
/// <summary>
/// 窗体最小化操作
/// </summary>
/// <param name="hwnd"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern bool CloseWindow(IntPtr hwnd);
/// <summary>
/// 获取窗体状态信息
[解决办法]
最小化
[解决办法]
最大化
[解决办法]
移动
[解决办法]
关闭
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nindex"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern int GetWindowLong(HandleRef hwnd, int nindex);


/// <summary>
/// 设置窗体状态信息
[解决办法]
最小化
[解决办法]
最大化
[解决办法]
移动
[解决办法]
关闭
[解决办法]
系统右键菜单
/// </summary>
/// <param name="hwnd"></param>
/// <param name="nindex"></param>
/// <param name="dwNewLong"></param>
/// <returns></returns>
[DllImport("user32.dll")]
public static extern int SetWindowLong(HandleRef hwnd, int nindex, int dwNewLong);
/// <summary>
/// 获取窗体句柄
/// </summary>
/// <param name="hWnd"></param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern IntPtr GetWindowDC(IntPtr hWnd);
/// <summary>
/// 释放窗体句柄
/// </summary>
/// <param name="hWnd"></param>
/// <param name="hDC"></param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern int ReleaseDC(IntPtr hWnd, IntPtr hDC);
}
}


然后进行引用,SetSysMenu()是关键


public const int WM_SYSCOMMAND = 0x0112;
public const int SC_MOVE = 0xF010;
public const int HTCAPTION = 0x0002;

void SetSysMenu()
{
int WS_SYSMENU = 0x00080000;
int WS_MINIMIZEBOX = 0x20000;
//int windowLong = GetWindowLong(new HandleRef(this, this.Handle), -16);
Win32.SetWindowLong(new HandleRef(this, this.Handle), -16, WS_SYSMENU


[解决办法]
WS_MINIMIZEBOX);
}
public MainForm()
{
InitializeComponent();
SetSysMenu();
}



如果还想要移动


/// <summary>
/// 移动窗体
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void MainForm_MouseDown(object sender, MouseEventArgs e)
{
//this.Opacity=0.8;
//this.Refresh();
Win32.ReleaseCapture();
Win32.SendMessage(this.Handle, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0);
//this.Opacity = 1.0;
//this.Refresh();
}

读书人网 >C#

热点推荐