MessageBox 中的粗体文本

2024-02-29

如何在显示的对话框中以粗体显示文本MessageBox.Show,使用 C#?


有可能,消息框是一个常规窗口,可以像其他窗口一样被弄乱。然而,这样做的代码有点粗糙。将新类添加到您的项目并粘贴以下代码:

using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class BoldMessageBox : IDisposable {
  private int mTries = 0;
  private Form mOwner;
  private Font mFont;

  public BoldMessageBox(Form owner) {
    mOwner = owner;
    owner.BeginInvoke(new MethodInvoker(findDialog));
  }

  private void findDialog() {
    // Enumerate windows to find the message box
    if (mTries < 0) return;
    EnumThreadWndProc callback = new EnumThreadWndProc(checkWindow);
    if (EnumThreadWindows(GetCurrentThreadId(), callback, IntPtr.Zero)) {
      if (++mTries < 10) mOwner.BeginInvoke(new MethodInvoker(findDialog));
    }
  }
  private bool checkWindow(IntPtr hWnd, IntPtr lp) {
    // Checks if <hWnd> is a dialog
    StringBuilder sb = new StringBuilder(260);
    GetClassName(hWnd, sb, sb.Capacity);
    if (sb.ToString() != "#32770") return true;
    // Got it, get the STATIC control that displays the text
    IntPtr hText = GetDlgItem(hWnd, 0xffff);
    if (hText != IntPtr.Zero) {
      // Get the current font
      IntPtr hFont = SendMessage(hText, WM_GETFONT, IntPtr.Zero, IntPtr.Zero);
      Font font = Font.FromHfont(hFont);
      // And make it bold (note the size change to keep enough space!!)
      mFont = new Font(font.FontFamily, font.SizeInPoints - 1f, FontStyle.Bold);
      SendMessage(hText, WM_SETFONT, mFont.ToHfont(), (IntPtr)1);
    }
    // Done
    return false;
  }
  public void Dispose() {
    mTries = -1;
    mOwner = null;
    if (mFont != null) mFont.Dispose();
  }

  // P/Invoke declarations
  private const int WM_SETFONT = 0x30;
  private const int WM_GETFONT = 0x31;
  private delegate bool EnumThreadWndProc(IntPtr hWnd, IntPtr lp);
  [DllImport("user32.dll")]
  private static extern bool EnumThreadWindows(int tid, EnumThreadWndProc callback, IntPtr lp);
  [DllImport("kernel32.dll")]
  private static extern int GetCurrentThreadId();
  [DllImport("user32.dll")]
  private static extern int GetClassName(IntPtr hWnd, StringBuilder buffer, int buflen);
  [DllImport("user32.dll")]
  private static extern IntPtr GetDlgItem(IntPtr hWnd, int item);
  [DllImport("user32.dll")]
  private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
}

并像这样使用它:

private void button1_Click(object sender, EventArgs e) {
  using (new BoldMessageBox(this)) {
    MessageBox.Show("Nobugz waz here");
  }
}

这种方法有一个缺陷。将字体设置为粗体后,文本必须仍然适合消息框为文本保留的静态控件。这需要我把字体变小。您可能需要调整该值。

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

MessageBox 中的粗体文本 的相关文章

随机推荐

  • .height(item.height()) jquery 在 IE 中太慢了!备择方案?

    我正在尝试设置绝对定位项目的高度以匹配其容器元素的高度 问题是这些元素有数百个 标题中的标准代码在 chrome 中运行得很好 但在 IE 中却拖得很慢 我应该如何缓解这个问题 Too SLOW in IE var starttime ne
  • 反射,从方法中获取返回值

    我们如何执行一个方法并从Reflection中获取返回值 Type serviceType Type GetType class true var service Activator CreateInstance serviceType s
  • 为什么我无法访问静态函数中的私有构造函数,如下所示? [复制]

    这个问题在这里已经有答案了 我目前正在编写一个弱引用资源管理器 如下所示 编译器抱怨管理器有一个私有构造函数 我的问题是 为什么我无法访问静态函数中的私有成员函数 ifndef TENSOR MANAGER H define TENSOR
  • 我需要实现什么接口才能允许 VBA 中的 ForEach 作用于用 delphi 编写的 COM 对象?

    想象一下 我想在 VBA 伪代码 中执行类似的操作 并假设我有一个可枚举属性 IDList Dim MyObject object set MyObject CreateObject MyObjectClass for each Item
  • 无法安装h5py

    我正在尝试安装h5py http www h5py org 但是当我这样做时pip install h5py or use python setup py install从源代码来看 致命错误 hdf5 h No such file or
  • speex解码出错

    我使用 speex 对一些音频数据进行编码并通过 UDP 发送 然后在另一端对其进行解码 我用 speex 进行了一些测试 发现如果我在编码后立即解码数据包 则解码后的数据与原始数据相差甚远 缓冲区开头的大部分字节都是 0 因此 当我解码通
  • 任意多个节点的贝尔曼-福特距离向量算法

    我正在尝试为模拟路由器的类编写一个程序 到目前为止我已经设置了基础知识 路由器 可以通过模拟服务器向连接到该服务器的其他 路由器 发送和接收数据包 每个数据包仅包含该路由器的距离向量 当路由器接收到数据包时 它应该使用贝尔曼 福特算法相应地
  • 我可以在“coqtop - nois”下定义策略吗?

    coqtop nois Welcome to Coq 8 7 0 October 2017 Coq lt Ltac i idtac Toplevel input characters 0 4 gt Ltac i idtac gt Error
  • 如何在 Windows 中使用 PuTTY 创建 SSH 隧道?

    我需要在 Windows 中使用 PuTTY 创建 SSH 隧道 这与 Linux 中的命令相同 ssh fN L 2000 SomeIp 2000 myusername myLinuxBox 我在 PuTTY 中尝试了许多选项 包括将 G
  • 将大型 JSON 对象传递到新窗口中的另一个页面。

    如果这个问题已经得到回答 我提前道歉 我已经用谷歌搜索了几个小时了 但仍然没有找到任何似乎可以回答我的确切问题的东西 本质上 我有一个非常复杂 高度风格化的视图 它显示从数据库中提取的特定于用户的数据 我已将数据捕获为 JSON 对象 并使
  • 将透明 .PNG 图像传输到屏幕上

    你好 我有一个图像 上面画了一个黑色矩形 它的背景是透明的 该文件保存为 png clear png 然后我有另一个图像 它只是保存为 jpeg 的纯红色背景 background jpeg 我试图做的是使clear png 中的黑色矩形显
  • 如何处理空手道测试中的签名请求?

    首先 感谢构建空手道 它对于测试 API 和 UI 非常有用 我们正在使用它来测试许多端点 但我们想知道是否有一种方法或哪种方法是处理带有签名作为标头中请求的一部分的请求的最佳方法 在我们的例子中 我们有两个标头 ApiKey 这个值总是相
  • 线性冲突违反了可受理性,让我发疯

    当两个棋子tj和tk发生线性冲突时 如果tj和tk在同一行 则tj和tk的目标位置都在该行上 tj在tk的右侧 tj的目标位置在左侧tk 的目标位置 线性冲突迫使两个冲突图块相互包围 从而使它们的曼哈顿距离至少增加两步 因此 启发式函数将为
  • 创建一个进程并重定向其输入/输出并且不继承套接字句柄

    是否可以创建一个进程并重定向其输入和输出 但设置子进程不继承套接字句柄 也许以某种方式使用 CreateProcess 进行 pinvoke 如果我使用 UseShellExecute true 子级不会继承套接字 但我无法重定向输出 创建
  • 如何更改所有私有 JLabel 的字体大小

    我见过类似的问题 例如this https stackoverflow com questions 1966296 changing default jlabel font 但就我而言 我有 25 个以上的私有 JLabels 我在声明它时
  • 使用pandas写入和读取3D数据

    我有一个使用保存在文本文件中的 3D 数据的项目 我目前使用单个空格来分割第一个维度上的数据 使用一个换行符 n 来分割第二个维度 使用两个换行符 n n 来分割最后一个维度 并使用默认的读取和写入蟒蛇 这些数据的解释是使用字符串分割和列表
  • IndexedDB IDBKeyRange 复合/多重索引不起作用

    谁能解释为什么我的 IDBKeyRange 似乎只在第一列上进行过滤 我有一个索引定义如下 osDrugs createIndex combined name strength form packsize unique false 我的查询
  • eclipse 卡在正在运行的程序上

    这是我结束日食任务后的图片 我的Android程序没有错误 在出现这个问题之前一切都很好 当我在程序中添加一些代码时发生了这种情况 单击运行按钮后它卡住了 当我运行手机调试程序时也会发生这种情况 其他程序都运行良好 只有一个程序卡住了 我卡
  • Java 内置函数 Collections.Frequency(list, element) 的复杂度是多少?

    下面的代码是针对 String 的 ArrayList 的 我想知道这个问题的复杂度是多少Collections frequency 功能 List
  • MessageBox 中的粗体文本

    如何在显示的对话框中以粗体显示文本MessageBox Show 使用 C 有可能 消息框是一个常规窗口 可以像其他窗口一样被弄乱 然而 这样做的代码有点粗糙 将新类添加到您的项目并粘贴以下代码 using System using Sys