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 中带有圆角的窗体边框 的相关文章

  • 倾斜一个角并向对角添加边框半径

    如何使用 CSS 重现这个形状 如何移动右上角 span Shift top right corner span 类似这样的东西 但仍然很难掌握 我会考虑使用图像 span border 2px dashed blue border rad
  • 如何更改toolstripmenuitem边框颜色?

    我制作了这样的表单 语言 c VisualStudio2012 https i stack imgur com 5GEY1 jpg https i stack imgur com 5GEY1 jpg如何将toolstripmenuitem
  • 带圆角和锯齿状弧形边框的正方形

    我想知道是否可以用纯 CSS 制作一个带有圆角和缩进边框的正方形 目前我有这个 custom square position relative display block width 75px height 75px border 2px
  • 向零舍入到最接近的 0x50 的简短按位方法?

    我正在尝试修补一个旧的 8 位汇编程序例程 它恰好是 M6800 但这并不是真正特定于机器的 以获取 16 位值并向下舍入到最接近的 0x50 dec 80 倍数 当前代码截断为最接近的32只需做一件事AND 0xE0到低字节 这当然会将低
  • Swing JButton Swing 的圆角没有实际 JButton 的功能 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 1 https i stack imgur com rZJjV png 我已经浏览过代码Swing 外观的 Java 文档 http
  • 围绕图中的点绘制圆圈

    我有两个矩阵 timeline 0 0008 0 0012 0 0016 0 0020 0 0024 0 0028 原始数据 79 8400 69 9390 50 0410 55 5082 34 5200 37 4486 31 4237 2
  • 为 std::string 实现派生复制和移动构造函数?

    我正在尝试使用 Embarcaderos clang 32 位编译器编译 VTK 7 0 库 但是 我最后收到一个链接错误 如下所示 56 Linking CXX shared library bin vtkCommonDataModel
  • WebSocket 连接到 TIdHTTPServer,握手问题

    我正在使用 C Builder 10 1 Berlin 编写一个简单的 WebSocket 服务器应用程序 该应用程序在端口上侦听从 Web 浏览器 例如 Google Chrome 发送的一些命令 在我的表单上 我有一个 TMemo TB
  • 如何将日期时间四舍五入到最接近的 5 分钟?

    我需要一个Python3函数来四舍五入datetime datetime反对精确到 5 分钟 是的 这已经在之前的 SO 帖子中讨论过here https stackoverflow com questions 32723150 round
  • write.csv 精度 R

    我正在处理非常精确的数字 最大位数 我注意到write csv x 在 R 中有时会对数字进行四舍五入 有人注意到类似的事情吗 默认保存的位数是多少 正如文档中所写 在几乎所有情况下 数值量的转换都是受控制的 通过选项 scipen see
  • 调整标题元素底部边框的大小以适应文本宽度并具有响应能力

    我想让底部边框更窄并且响应灵敏 同时保持文本居中 我怎样才能做到这一点 我尝试显式使用 width 属性 但这显然不起作用 DEMO https www bootply com jEB0e4Ao61 https www bootply co
  • 将浮点数向下舍入到最接近的整数?

    我想获取一个浮点数并将其向下舍入到最接近的整数 然而 如果它不是一个整体 我always想要向下舍入变量 无论它与下一个整数的接近程度如何 有没有办法做到这一点 int x 转换为整数将截断 朝向 0 0 例如math trunc 对于非负
  • 在 CSS 过渡期间绘制边框颜色

    button background none border 0 box sizing border box margin 1em padding 1em 2em box shadow inset 0 0 0 2px f45e61 color
  • Delphi:MDI应用程序中的最大化子窗体

    如何最大化仅适合客户区而不适合整个父窗口的子窗口 我不希望子窗口在父窗口的主菜单或其他控件下消失 我有这个代码 procedure WMSIZE var Msg TMessage message WM SIZE procedure TFor
  • 在 div 内为

    添加下划线

    我正在尝试下划线h1 title 但由于某种原因它总是占用父 div 的整个长度 我能够做到这一点的唯一方法是添加position absolute CSS 中的属性 This is the design And this is what

  • 如何仅在表格内应用边框?

    我想弄清楚如何仅在表格内添加边框 当我做 table border 0 table td table th border 1px solid black 边框围绕整个表格以及表格单元格之间 我想要实现的是仅在表格单元格周围的表格内部有边框
  • 使用 Dragstart PreventDefault 禁用浏览器默认图像拖动,但它也禁用我的拖动事件

    我尝试阻止浏览器默认图像在dragstart中拖动 但不知何故它也禁用了drag和dragend事件 无论如何 我可以禁用浏览器默认图像拖动 但它仍然会运行拖动和拖动结束事件 或者唯一的选择是使用背景图像 我不想这样做 因为我需要因此更改很
  • QT 中的应用程序->处理消息?

    在 Borland 6 中 我经常使用它来解除程序操作的卡住 Application gt Processmessages 现在 对于 QT 4 8 1 我在这个外国 对我来说 QT 文档中找不到 谁能帮我 在 Qt 中 您可以使用静态函数
  • Numpy 的舍入方式与 Python 不同

    The code import numpy as np a 5 92270987499999979065 print round a 8 print round np float64 a 8 gives 5 92270987 5 92270
  • Android 浏览器是否在 touchStart 上锁定 DOM?

    我正在尝试构建一个包含 5 个块的菜单 用户可以在其中旋转 您可以在这里查看演示 http m iijax com menu php http m iijax com menu php 在 iPhone 上运行良好 有时有点迟缓 但这不是重

随机推荐