【问题标题】:auto resize of window with mouse movement通过鼠标移动自动调整窗口大小
【发布时间】:2013-12-07 06:06:53
【问题描述】:

所以我有以下具有 3 个按钮的应用程序。 1 允许我打开一个新窗口,我可以在其中将此窗口调整为我想要的大小,然后按按钮 2 以捕获该窗口大小的图片。我的问题是如何做到这一点,以便当我按下按钮 1 时它会显示 Form2 但随后 Form2 窗口将随鼠标移动,当我单击并拖动大小然后释放时,它会像这样在这里

这是它目前的样子,我必须手动调整窗口大小

Form1.vb

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Form2.Show()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Dim bounds As Rectangle
        Dim screenshot As System.Drawing.Bitmap
        Dim graph As Graphics

        bounds = Screen.PrimaryScreen.Bounds
        screenshot = New System.Drawing.Bitmap(Form2.Bounds.Width, Form2.Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)

        graph = Graphics.FromImage(screenshot)
        graph.CopyFromScreen(Form2.Bounds.X, Form2.Bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)

        PictureBox1.Image = screenshot
        PictureBox1.SizeMode = PictureBoxSizeMode.StretchImage
    End Sub

Form2.vb

Public Class Form2

    Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub
End Class

【问题讨论】:

  • 我不确定这样是否容易。看,如果你在#1 上面有表单#2,并且假设#1 是背景(黑色,不透明度 = 50%),并且#2 正在移动,你不能使表单#1 变暗,你只能让它变得更暗形成#2 的不透明度。那么你打算如何解决呢?
  • @Neolisk 嗯好吧,可以保留当前的解决方案,但是当您单击并拖动时,使表单窗口 form2 使用鼠标事件跟随指针?而不是手动调整大小?
  • 您的意思是只有 1 个不透明度为 50% 的表单(反转选择)?所以你选择的区域会变暗,其余的都是正常的?
  • @Neolisk 是的,这就是我的意思
  • 看看我的回答,希望它能让你走上正轨。

标签: .net vb.net


【解决方案1】:

检查这两种方法:

  1. Mouse capture answer @ SO。这基本上是a link to MSDN。还有this one

    Control 类的 Capture 属性指定控件是否已捕获鼠标。要确定控件何时失去鼠标捕获,请处理 MouseCaptureChanged 事件。

  2. How to capture mouse position outside of a form?

【讨论】:

  • 我怀疑 OP 必须向 Form2 发送 WM_SIZING 消息才能顺利调整大小。
  • @ConradFrix:如果需要考虑平滑度,我会选择 DirectX(DirectDraw 和 DirectInput)。然后,您可以将活动桌面绘制到表单上,并以任何您喜欢的方式绘制捕获矩形。
猜你喜欢
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 2015-08-29
  • 2014-12-29
  • 1970-01-01
相关资源
最近更新 更多