窗体镂空效果以及无标题栏窗体鼠标拖动效果的实现

最开始我以为要用Win API,然后发送消息等等才能实现,最后搞来搞去才发现,其实很简单,不需要Win API,也不需要发送消息,也不需要第三方控件,也不需要添加控件。

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace HollowOutDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /*
         * 作者:“奔放的胸毛。”(lyzane@live.cn)
         * Demo功能简介,及实现思路:
         * ①:实现了镂空窗体的效果
         * 首先设置窗体背景色为Yellow,然后将窗体TransparencyKey属性(绘制到窗体上时,显示为透明的颜色)也设置为Yellow
         * 这样一来,整个窗体就全部透明了,然后我找了张PNG图片(因为PNG图片支持透明)作为窗体的背景图,背景图像布局方式设置为None,窗体Size设置为图片大小
         * 镂空效果就实现了,没有写一句代码。
         * ②:实现了无标题栏窗体的鼠标拖动效果
         * 首先将窗体的边框样式修改为None,让窗体没有标题栏
         * 实现这个效果使用了三个事件:鼠标按下、鼠标弹起、鼠标移动
         * 鼠标按下时更改变量isMouseDown标记窗体可以随鼠标的移动而移动
         * 鼠标移动时根据鼠标的移动量更改窗体的location属性,实现窗体移动
         * 鼠标弹起时更改变量isMouseDown标记窗体不可以随鼠标的移动而移动
         */
        private bool isMouseDown = false;
        private Point FormLocation;     //form的location
        private Point mouseOffset;      //鼠标的按下位置
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                isMouseDown = true;
                FormLocation = this.Location;
                mouseOffset = Control.MousePosition;
            }

        }

        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            isMouseDown = false;
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            int _x = 0;
            int _y = 0;
            if (isMouseDown)
            {
                Point pt = Control.MousePosition;
                _x = mouseOffset.X - pt.X;
                _y = mouseOffset.Y - pt.Y;

                this.Location = new Point(FormLocation.X - _x, FormLocation.Y - _y);
            }

        }

        private void 关闭ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

 

源码Demo上传到CSDN了,资源分一分。下载地址



本文是使用 B3log Solo奔放的胸毛。 进行同步发布的
posted @ 2010-08-11 13:38  LyZane  阅读(1168)  评论(0编辑  收藏  举报