我创造了一个非常简单的数字时钟,就像帮助我的vb技能练习一样。我已经基本上复制了屏幕右下角的计时器,除了我可以在屏幕上移动它,只有当它有彩色背景时。如果我使面板(计时器的父级)透明,应用程序不再允许我移动它。我想知道是否有可能用鼠标移动透明物体?
(下面的整个代码,非常简单)
Public Class Form1
Dim X,Y As Integer Dim NewPoint As New System.Drawing.Point
Private Sub TextBox1_TextChanged(ByVal sender As System.Object,ByVal e As System.EventArgs) 结束子
Private Sub Label1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles Label1.Click 结束子
Private Sub Timer1_Tick_1(ByVal sender As System.Object,ByVal e As System.EventArgs)处理Timer1.Tick Label1.Text = TimeOfDay 结束子
Private Sub Panel1_MouseDown(ByVal sender As Object,ByVal e As System.Windows.Forms.MouseEventArgs)处理Panel1.MouseDown X = Control.MousePosition.X - Me.Location.X Y = Control.MousePosition.Y - Me.Location.Y 结束子
Private Sub Panel1_MouseMove(ByVal sender As Object,ByVal e As System.Windows.Forms.MouseEventArgs)处理Panel1.MouseMove 如果e.Button = Windows.Forms.MouseButtons.Left那么 NewPoint = Control.MousePosition NewPoint.X - =(X) NewPoint.Y - =(Y) Me.Location = NewPoint 万一 结束子
Private Sub Panel1_Paint(ByVal sender As System.Object,ByVal e As System.Windows.Forms.PaintEventArgs)处理Panel1.Paint
End Sub
私有共享函数hwnd()As Long 抛出新的NotImplementedException 结束功能
结束班
答案 0 :(得分:0)
希望以下示例能为您提供帮助。
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Windows.Forms;
namespace WhoAmI
{
public partial class Form1 : Form
{
private Point _clickPoint;
private bool _doMove = false;
protected override void OnPaint(PaintEventArgs e)
{
//base.OnPaint(e);
SolidBrush text_Brush = new SolidBrush(Color.FromArgb(255, Color.YellowGreen));
RectangleF text_box = new RectangleF(0, 0, this.Size.Width, this.Size.Height);
StringFormat f = new StringFormat();
f.Alignment = StringAlignment.Center;
f.LineAlignment = StringAlignment.Center;
//e.Graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
e.Graphics.TextRenderingHint = TextRenderingHint.AntiAlias;
e.Graphics.InterpolationMode = InterpolationMode.HighQualityBilinear;
e.Graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
//e.Graphics.Clear(Color.Transparent);
e.Graphics.DrawRectangle(new Pen(Color.YellowGreen, 1), new Rectangle(0, 0, this.Size.Width, this.Size.Height));
//e.Graphics.FillRectangle(Brushes.Transparent, new Rectangle(0, 0, this.Size.Width - 1, this.Size.Height - 1));
e.Graphics.DrawString(System.Environment.MachineName, new Font("Arial", 18, FontStyle.Bold), text_Brush, text_box, f);
}
//Completely shown but not clickable!
//protected override CreateParams CreateParams
//{
// get
// {
// CreateParams parms = base.CreateParams;
// parms.ExStyle |= 0x20; // Turn on WS_EX_TRANSPARENT
// return parms;
// }
//}
protected override void OnPaintBackground(PaintEventArgs e)
{
//base.OnPaintBackground(e);
e.Graphics.FillRectangle(Brushes.Transparent, new Rectangle(0, 0, this.Size.Width - 1, this.Size.Height - 1));
}
public Form1()
{
InitializeComponent();
this.BackColor = Color.White;
this.TransparencyKey = this.BackColor;
//this.Opacity = 1F;
}
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
this._doMove = true;
this._clickPoint = new Point(e.X, e.Y);
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (this._doMove)
{
if (e.Button == MouseButtons.Left)
{
this.Location = new Point(this.Left + e.X - this._clickPoint.X, this.Top + e.Y - this._clickPoint.Y);
}
}
}
private void Form1_MouseUp(object sender, MouseEventArgs e)
{
this._doMove = false;
}
private void Form1_MouseLeave(object sender, EventArgs e)
{
this._doMove = false;
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
if (MessageBox.Show("Exit this app?", "Who Am I?", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes)
{
this.Close();
this.Dispose();
}
}
}
}
}