windows窗体的标题栏无法直接通过一些默认的事件来控制,需要了解和WM_NCHITTEST相关的windows消息。 以下示例演示了最简单的效果片断: 他会把客户区和标题栏的效果互换,比如无法按住标题栏拖动窗体而是改为了安抓客户区拖动,并禁用了关闭按钮。 其中m.Result从-2到21都有定义,分别度应了整个窗体的各个部位,比如1代表客户区,8代表最小化按钮等等。
using System;
using System.Windows.Forms;
namespace WindowsApplication42
{
public partial class Form1 : Form
{
public Form1() { InitializeComponent(); this.Text = "双击左上角图标关闭窗体"; }
//拦击标题栏鼠标位置事件
const int WM_NCHITTEST = 0x84;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m); if (m.Msg == WM_NCHITTEST)
{
switch (m.Result.ToInt32())
{
case 1://客户区
m.Result = new IntPtr(2); break;
case 2://标题栏
m.Result = new IntPtr(1); break;
case 20: m.Result = new IntPtr(0); break;
default: Console.WriteLine(m); break;
}
}
}
}
}
下面是各个常量的意义:从Delphi7 VCL中摘取:
{ WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes }
{$EXTERNALSYM HTERROR}
HTERROR = -2;
{$EXTERNALSYM HTTRANSPARENT}
HTTRANSPARENT = -1;
{$EXTERNALSYM HTNOWHERE}
HTNOWHERE = 0;
{$EXTERNALSYM HTCLIENT}
HTCLIENT = 1;
{$EXTERNALSYM HTCAPTION}
HTCAPTION = 2;
{$EXTERNALSYM HTSYSMENU}
HTSYSMENU = 3;
{$EXTERNALSYM HTGROWBOX}
HTGROWBOX = 4;
{$EXTERNALSYM HTSIZE}
HTSIZE = HTGROWBOX;
{$EXTERNALSYM HTMENU}
HTMENU = 5;
{$EXTERNALSYM HTHSCROLL}
HTHSCROLL = 6;
{$EXTERNALSYM HTVSCROLL}
HTVSCROLL = 7;
{$EXTERNALSYM HTMINBUTTON}
HTMINBUTTON = 8;
{$EXTERNALSYM HTMAXBUTTON}
HTMAXBUTTON = 9;
{$EXTERNALSYM HTLEFT}
HTLEFT = 10;
{$EXTERNALSYM HTRIGHT}
HTRIGHT = 11;
{$EXTERNALSYM HTTOP}
HTTOP = 12;
{$EXTERNALSYM HTTOPLEFT}
HTTOPLEFT = 13;
{$EXTERNALSYM HTTOPRIGHT}
HTTOPRIGHT = 14;
{$EXTERNALSYM HTBOTTOM}
HTBOTTOM = 15;
{$EXTERNALSYM HTBOTTOMLEFT}
HTBOTTOMLEFT = 16;
{$EXTERNALSYM HTBOTTOMRIGHT}
HTBOTTOMRIGHT = 17;
{$EXTERNALSYM HTBORDER}
HTBORDER = 18;
{$EXTERNALSYM HTREDUCE}
HTREDUCE = HTMINBUTTON;
{$EXTERNALSYM HTZOOM}
HTZOOM = HTMAXBUTTON;
{$EXTERNALSYM HTSIZEFIRST}
HTSIZEFIRST = HTLEFT;
{$EXTERNALSYM HTSIZELAST}
HTSIZELAST = HTBOTTOMRIGHT;
{$EXTERNALSYM HTOBJECT}
HTOBJECT = 19;
{$EXTERNALSYM HTCLOSE}
HTCLOSE = 20;
{$EXTERNALSYM HTHELP}
HTHELP = 21;
分享到:
相关推荐
"winform 等待 特效 动画 窗体显示"就是这样的一个功能,它能够创建一个带有等待动画的窗体,以展示程序的运行状态,避免用户感到程序无响应。 这个功能主要涉及到以下几个知识点: 1. **窗体(Form)**:在...
安装该库后,我们可以利用它的API和方法,轻松地将皮肤应用到WinForm控件上。 为了开始使用IrisSkin4,你需要先将`IrisSkin4.dll`文件添加到你的项目引用中。这可以通过在解决方案资源管理器中右键点击“引用”...
在本文中,我们将深入探讨如何在WinForm中实现拦截窗体上各个部位的点击特效,这涉及到对Windows消息处理机制的理解以及自定义窗体行为。 首先,我们要知道Windows消息是操作系统与应用程序之间进行通信的一种方式...
winform实现PPT展示特效:从网上找的,整理的,这是其中一个特效的代码 #region 压缩反转(改进版) // 原理:计算图像位置和高度,以高度的一半为轴进行对换上下半边的图像 private void Animator01() { ...
在本文中,我们将深入探讨如何在C# WinForm应用程序中实现一种高级的视觉效果,即无边框窗体的四边阴影、圆角以及淡入淡出特效。这些特性能够为用户界面增添现代感和专业性,提升用户体验。首先,让我们了解一下C# ...
本教程将详细介绍如何在Winform中使用MDI窗体,并通过实践例子来演示各种窗体的布置方式。 首先,我们需要了解MDI窗体的基本概念。在C#中,MDI窗体由两个主要部分组成:一个MDI父窗体(MDIParent)和一个或多个MDI...
"winform插入特殊字符窗体"是一个这样的实例,它提供了一个方便的界面,让用户能够轻松地在文本输入中插入特殊字符。这个窗体设计用于帮助用户在不熟悉Unicode编码或者找不到特定键盘快捷键的情况下,快速找到并插入...
首先,我们需要在WinForm设计界面中添加一个pictureBox控件,可以通过Visual Studio的工具箱将其拖放到窗体上。然后,设置pictureBox的SizeMode属性为StretchImage或Zoom,以便调整图片大小以适应控件大小。 局部...
3. 使用ElementHost:在Winform中,引入`System.Windows.Forms.Integration`命名空间,并在窗体上添加一个`ElementHost`控件。`ElementHost`是Winform用来承载WPF控件的容器。 4. 在Winform的代码中实例化WPF的User...
在C# WinForm开发中,有时我们需要在子窗体中操作或更新父窗体的状态,例如刷新父窗体内容或更改父窗体上的控件值。以下两种方法详细阐述了如何实现这一目标。 **方法一:使用委托** 在这种方法中,我们通过定义一...
在C# Winform开发中,多线程技术是不可或缺的一部分,尤其当涉及到用户界面(UI)的异步操作时。线程允许程序同时执行多个任务,提高应用的响应性和效率。本话题将深入探讨如何利用线程来延迟创建子窗体,并且如何安全...
在本文中,我们将深入探讨如何使用C#编程语言在Windows Forms(Winform)环境中创建一个具有无边框、四边阴影、圆角以及淡入淡出特效的窗体。这是一段涉及用户界面(UI)设计和动画效果的高级C#技术实践。 首先,让...
1. 在WinForm设计视图中,从工具箱中拖放一个BackgroundWorker控件到窗体上。 2. 设置控件的事件处理器,例如:在DoWork事件中执行耗时任务,在ProgressChanged事件中更新进度条,在RunWorkerCompleted事件中关闭...
本示例"SwitchOver"演示了如何在一个主窗体中通过按钮来平滑地在三个子窗体之间进行切换,同时确保在切换过程中,各个窗体上的数据得以保留。以下是对这一主题的详细解释: 1. **窗体(Form)基础知识**: - 在...
WinForm项目:聊天室 C# WinForm项目:聊天室 C#
在Windows Forms(WinForm)应用程序开发中,常常需要处理子窗体与父窗体之间的交互。当用户在子窗体中进行操作后,比如编辑、添加或删除数据,通常希望在关闭子窗体时能够自动刷新父窗体,以便显示最新的数据状态。...
在Windows Forms(WinForm)开发中,为了提升用户体验和应用的视觉吸引力,开发者常常会引入各种窗体过渡特效。本文将详细讲解“WinForm窗体过渡特效源码”中的核心概念和技术,帮助你理解如何在WinForm应用中实现...
当我们点击“确定”按钮之后,窗体由从屏幕上逐渐下移,直至完全从屏幕上完全不显示。这也是本文讨论的窗体效果之一:移动提示信息窗口。 本文介绍地址:...