首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#controlbox替false后,右击没有关闭,最大化,最小化菜单了

2013-03-28 
C#controlbox为false后,右击没有关闭,最大化,最小化菜单了C#controlbox为false在桌面任务栏右击没有关闭,

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();
        }

热点排行