C++ builder XE 中带有圆角的窗体边框

2023-12-21

我借助以下代码制作了带有圆角的 C++ Builder XE 表单

BorderStyle = bsNone; 

void __fastcall TForm1::FormCreate(TObject *Sender)
{
     HRGN frmrgn;  

     frmrgn = CreateRoundRectRgn (0, 0, ClientWidth, ClientHeight,12,12);
     SetWindowRgn(Handle,frmrgn,true);
}

看起来很酷,但缺少边框,我尝试了很多方法但没有得到好的结果 所以请帮我绘制颜色 RGB(96,96,96) 的边框

我想让整个表单可拖动。


1.画深灰色边框

这个很简单,具体取决于您希望边框看起来有多复杂。如果您只想要深灰色的轮廓,可以使用直线和弧线的组合来绘制它,或者使用FrameRgn http://msdn.microsoft.com/en-us/library/dd144839%28v=VS.85%29.aspx功能使用特定的画笔在您的区域周围绘制轮廓。这样做是最好的解决方案,因为您已经有一个用于定义窗口形状的区域。

然而,MSDN 文档SetWindowRgn http://msdn.microsoft.com/en-us/library/dd145102%28v=vs.85%29.aspx says, “成功拨打电话后SetWindowRgn,系统拥有由区域句柄指定的区域hRgn。系统不会复制该区域。因此,您不应该使用该区域句柄进行任何进一步的函数调用。”您需要为绘制方法再次创建区域。

您的绘制方法的一些代码:

HRGN hRegion = ::CreateRoundRectRgn (0, 0, ClientWidth, ClientHeight,12,12);
Canvas->Brush->Style = bsSolid;
Canvas->Brush->Color = RGB(96, 96, 96);
::FrameRgn(Canvas->Handle, hRegion, Canvas->Brush->Handle, 2, 2);
::DeleteObject(hRegion); // Don't leak a GDI object

2. 使窗口可拖动而无需标题栏

简而言之,您需要处理WM_NCHITTEST http://msdn.microsoft.com/en-us/library/ms645618%28v=vs.85%29.aspx信息。 Windows 发送此消息以查看鼠标是否位于标题栏上(“NC”代表“非客户端”;它实际上是在测试它是否位于非客户端区域中的任何位置,该区域可以是任何窗口边框,而不仅仅是窗口边框) )您可以通过说“是的,鼠标现在位于标题中”来使窗口可拖动,即使事实并非如此。一些代码:

// In the 'protected' section of your form's class declaration
virtual void __fastcall WndProc(Messages::TMessage &Message);

// The implementation of that method:
void __fastcall TForm1::WndProc(Messages::TMessage& Message) {
  TForm::WndProc(Message); // inherited implementation
  if (Message.Msg == WM_NCHITTEST && Msg.Result == htClient) {
    Msg.Result = htCaption;
  }
}

您可以执行一些自己的命中测试来限制窗口的哪些部分显示为标题栏,以便创建您自己的标题栏。

Delphi 代码示例。 http://delphi.about.com/od/windowsshellapi/a/dragnocaption.htm

一篇关于使用此消息以及需要注意的事情/不要陷入陷阱的好文章。 http://blogs.msdn.com/b/oldnewthing/archive/2011/02/18/10131176.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ builder XE 中带有圆角的窗体边框 的相关文章

  • 调整某一特定一侧的边框

    我正在使用 ListBox 的 controlTemplate 来显示集合 我想显示带有边框的所有项目 就像在网格中一样 所有行的大小相同 当我给每个 listBoxItem 一个边框时 两个项目之间的线具有双倍大小 由第一个项目的底部边框
  • 如何使用 JavaScript 四舍五入到任意数量的有效数字?

    我尝试了下面的示例代码 function sigFigs n sig if n 0 return 0 var mult Math pow 10 sig Math floor Math log n lt 0 n n Math LN10 1 r
  • 在浮动元素周围放置边框

    假设我有类似以下代码的内容 我想在左右浮动的两个图像之间显示一些文本 img src testImage1 png alt Test Image 1 img src testImage2 png alt Test Image 2 p Tes
  • CSS 中的边框图像 svg(颜色)样式?

    是否可以从CSS样式填充自定义边框图像 我应该使用哪个属性 E g border image source url assets images dots new svg border color red doesn t work fill
  • 如何使用 C++ Builder 通过按钮打开新表单?

    我有一个包含 Form1 和 Form2 的程序 如何单击按钮从 form1 打开 form2 更多信息 在您的 Project cpp 中包含此内容 Application gt CreateForm classid TForm2 For
  • 如何仅在表格内应用边框?

    我想弄清楚如何仅在表格内添加边框 当我做 table border 0 table td table th border 1px solid black 边框围绕整个表格以及表格单元格之间 我想要实现的是仅在表格单元格周围的表格内部有边框
  • C++ 中的静态虚函数

    我有一个基类和一个派生类 我想更改基函数 同时保持它们静态 因为它们应该作为静态传递给其他函数 我怎样才能做到这一点 ATL 框架通过将基类设为模板 然后让派生类将其类类型作为模板参数传递 从而绕过了无虚拟静态的限制 然后 基类可以在需要时
  • C# 中四舍五入到偶数

    我没有看到 Math Round 的预期结果 return Math Round 99 96535789 2 MidpointRounding ToEven returning 99 97 据我了解 MidpointRounding ToE
  • 矩阵方括号

    我正在使用 Java Swing 我需要显示一个带有方括号的矩阵 普通方括号就像我们在数学中使用的跨多行的方括号 矩阵大小不固定 它取决于输入 这是我用来显示矩阵的代码 public static void printMatrix Stri
  • 如何处理 PHP 中浮点数的奇怪舍入

    众所周知 浮点运算并不总是完全准确 但是如何处理它的不一致之处呢 As an example in PHP 5 2 9 this doesn t happen in 5 3 echo round 14 99225 4 14 9923 ech
  • 在 Delphi 或 C++ Builder 中使用 Chromium Edge WebView2 [重复]

    这个问题在这里已经有答案了 既然 Microsoft Chromium Edge 已经最终确定 是否可以在 Delphi 或 C Builder 中使用它 据我了解 它是基于WebView2成分 是否有一个组件 例如TWebView2或者E
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 将 numpy 舍入到最近的步骤

    我想知道如何将 numpy 中的数字舍入到上限或下限阈值 该阈值是预定义步长的函数 希望以更清晰的方式说明 如果我有数字 123 且步长等于 50 我需要将 123 舍入到最接近的 150 或 100 在本例中为 100 我得出了下面的函数
  • CSS:Chrome 和 Safari 似乎为宽度“添加”边框,而 IE、Firefox 和 Opera 则没有

    我正在努力实现我的网站的跨浏览器一致性 是关于这个页面的 http www 在这里插入点 geld 在这里插入破折号 surfen 在这里插入点 nl uitbetalingen html http www 5Binsert dot her
  • 如何在Python中找到低精度浮点值的原始文本表示?

    我遇到了显示问题floatPython 中的值 从外部数据源加载 它们是 32 位浮点数 但这也适用于较低精度的浮点数 以防万一 这些值是由人类在 C C 中输入的 因此与任意计算值不同 与round数字很 可能not预期的 但不能被忽略
  • C++ 如何为浮点数设置固定的小数精度

    我有一个返回双精度值的 API 调用 双精度数的小数长度可以从许多小数位到几个小数位不等 这一切都取决于执行器的状态 该双精度代表执行器范围半径上的当前位置 我对如此详细的数字不感兴趣 因为它给系统增加了很多噪音 我一直在使用浮点数来节省空
  • 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

    如果 TVirtualStringTree 获得焦点 则默认情况下它会在鼠标滚轮上滚动 即使鼠标未超出控制范围 除非它位于另一个 TVirtualStringTree 上方 有没有一种快速而优雅的方法来禁用这种行为 我已经这样做了OnMou
  • 将可见性属性绑定到变量

    我有一个Border with Label里面一个Window
  • JPanel 上的圆形边框

    我这里得到的是一个带有圆形边框的 JPanel 其设置如下 panel setBorder new LineBorder PanelColor 5 true 问题是 在每个角上都有 2 条从外角到内角的对角不透明线 即边框的长度 边界后面的
  • 在 MonoGame (XNA) 中绘制贝塞尔曲线会产生粗糙的线条

    我最近开始使用 MonoGame 并且我喜欢这个库 但是 我在绘制贝塞尔曲线时似乎遇到了一些问题 我的代码产生的结果看起来像这样 看起来很糟糕 不是吗 线条一点也不流畅 让我向您展示一些代码 This is what I call to g

随机推荐