仅带有取消按钮的消息框

2024-04-26

我们可以有一个只有取消按钮的消息框吗?如果是这样,有什么提示吗?是否有内置的 api 方法来仅获取带有取消按钮的消息框/

如何创建自定义模式对话框?有链接吗?


您可以通过以下方式使用线程本地 CBT 挂钩SetWindowsHookEx()定制MessageBox()您想要的任何对话框。

例如,您可以将“确定”按钮的文本更改为“取消”,例如:

HHOOK hHook = NULL;

LRESULT CALLBACK CBTHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0)
        return CallNextHookEx(hHook, nCode, wParam, lParam);

    if (nCode == HCBT_ACTIVATE)
    {
        HWND hWnd = reinterpret_cast<HWND>(wParam);
        SetWindowText(GetDlgItem(hWnd, IDOK), TEXT("Cancel"));
        return 0;
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

{
    ...
    hHook = SetWindowsHookEx(WH_CBT, reinterpret_cast<HOOKPROC>(&CBTHookProc), NULL, GetCurrentThreadId());
    int iResult = MessageBox(..., MB_OK);
    if (iResult == IDOK) iResult = IDCANCEL;
    UnhookWindowsHookEx(hHook);
    ...
}

或者您可以隐藏标准的“确定”按钮,并让对话框仍然使用其本机“取消”按钮:

HHOOK hHook = NULL;

LRESULT CALLBACK CBTHookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode < 0)
        return CallNextHookEx(hHook, nCode, wParam, lParam);

    if (nCode == HCBT_ACTIVATE)
    {
        HWND hWnd = reinterpret_cast<HWND>(wParam);
        ShowWindow(GetDlgItem(hWnd, IDOK), SW_HIDE);
        // optionally reposition the IDCANCEL child window as well....
        return 0;
    }

    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

{
    ...
    hHook = SetWindowsHookEx(WH_CBT, reinterpret_cast<HOOKPROC>(&CBTHookProc), NULL, GetCurrentThreadId());
    int iResult = MessageBox(..., MB_OKCANCEL);
    UnhookWindowsHookEx(hHook);
    ...
}

Update:在 Vista 及更高版本上,您可以(并且应该)使用TaskDialog() http://msdn.microsoft.com/en-us/library/windows/desktop/bb760540.aspx or TaskDialogIndirect() http://msdn.microsoft.com/en-us/library/windows/desktop/bb760544.aspx代替MessageBox()。任务对话框更加灵活,包括允许您指定对话框上的按钮,甚至使用自定义按钮的能力。因此,您可以轻松显示仅取消对话框,而无需使用任何挂钩,例如:

TaskDialog(..., TDCBF_CANCEL_BUTTON, ..., &iResult);
TASKDIALOGCONFIG TaskConfig = {0};
TaskConfig.cbSize = sizeof(TaskConfig);
TaskConfig.dwCommonButtons = TDCBF_CANCEL_BUTTON;
...
TaskDialogIndirect(&TaskConfig, &iResult, ...);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

仅带有取消按钮的消息框 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 在 bourne shell 中的用户定义函数中使用 getopts

    是否可以将命令行参数从 bourne 脚本内传递到函数中 以便允许 getopts 处理它们 我的脚本的其余部分很好地打包到函数中 但开始看起来我必须将参数处理移至主逻辑中 现在是这样写的 但是不行 processArgs while ge
  • 使用 CTE 以及开始和结束日期时间避免日期时间间隔中的间隙

    由于某种原因 我发现使用此查询的时间间隔存在间隙 我只使用基本数据就可以正常工作 但是 当连接表并指定 WHERE 子句时 我发现时间间隔存在间隙 我还需要将 S SessionEndTime 合并到我的时间间隔中 以查找 Response
  • 设置 blob 的内容类型

    我们正在转移一个Blob 图片 下载一个 websocket 并将其渲染到另一端的画布上 当我使用createObjectURL对于斑点 我收到以下警告 Resource interpreted as Image but transferr
  • Rails form_for 选择已选择选项的标签

    我正在使用 form for 来更新用户个人资料 作为表单的一部分 我使用选择菜单 菜单由数组填充 即 STATUS Active active In Active inactive 然后在表格中 虽然这项工作没有选择之前在编辑时选择的选项
  • querySelector 中哪些字符需要转义?

    根据这里的文档 https developer mozilla org en US docs Web API document querySelector Notes https developer mozilla org en US do
  • 如何用Java编写某些语法的LALR解析器?

    我想编写 Java 代码来为我的语法构建 LALR 解析器 有人可以推荐一些书籍或一些链接 让我可以学习如何为 LALR 解析器编写 Java 代码吗 手动编写 LALR 解析器很困难 但他可以做到 如果您想了解手动构建解析器背后的理论 请
  • CodeIgniter - 自动加载

    我想知道 CodeIgniter 自动加载的最佳实践是什么 自动加载我的所有内容是不是不好的做法might是否曾经需要过 或者可以这样做吗 这会给应用程序带来更多负载吗 目前 我只是自动加载我将在整个应用程序中使用的库和助手 autoloa
  • MySQL 视图:在另一个计算字段中引用一个计算字段(按名称)

    例如 如何定义具有两个计算字段的视图 TableName BlueSquares TableName RedSquares AS TotalSquares TableName BlueCirles TableName RedCircles
  • 如何从一个Android应用程序调用另一个Android应用程序

    我想从另一个应用程序调用一个 Android 应用程序 我尝试过一些examples http www anddev org install run applications from within another application
  • 使用 JsonView 将 POJO 转换为 JsonNode

    我正在编写一个典型的 Play Framework 应用程序 我想使用 Jackson 从控制器的方法返回 JsonNode 这就是我现在正在做的 public static Result foo MyPojoType myPojo new
  • 如何禁用 moment.js 夏令时时区转换

    可以在 moment js 中禁用日光时区转换吗 http plnkr co edit MjFelt p preview http plnkr co edit MjFelt p preview scope obj date moment 2
  • 如何检查 Mypy `# type:ignore` 注释是否仍然有效且必需?

    想象一下 我们有一些巨大的遗留代码库 其中有很多文件被忽略了 Mypy 警告 def foobar x some external class some method 0 type ignore ignore some mypy warni
  • spring boot应用程序在ec2上自动关闭

    我在 ec2 上部署了 springboot 应用程序 ubuntu 为 t2 medium 大小 AWS AMI 为 t3 medium 大小 在我的本地电脑上 没有问题 但在 ec2 上 几个小时后 在我不工作期间 它自己死了 我只是想
  • 模块“pandas”没有属性“read_csv”

    import pandas as pd df pd read csv FBI CRIME11 csv print df head 运行这个简单的代码会出现错误 Traceback most recent call last File C U
  • 当将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

    Both static cast and reinterpret cast似乎适合铸造void 到另一个指针类型 是否有充分的理由偏爱其中之一 Use static cast 这是最精确的转换 准确地描述了此处进行的转换 有一个误解 认为使
  • 具有异步函数的 JavaScript 数组

    我有一个 JavaScript 字符串数组 该数组的定义如下 var myArray myArray push 1 myArray push 2 myArray push 3 我需要循环遍历数组并调用异步运行的函数 该函数如下所示 func
  • Visual Studio/SOAP -“添加服务引用”与“添加 Web 服务引用”

    我发现我可以将计划使用的 SOAP WSDL 服务作为 Web 服务引用 System Web Services 或 服务引用 System ServiceModel WCF 导入到我的解决方案中 我想知道有什么区别 据我所知 添加服务引用
  • RedHat 6/Oracle Linux 6 不允许通过 ssh 进行密钥身份验证

    密钥已正确部署在 ssh authorized keys 中 然而 ssh 不断提示输入密码 几个问题 主要是特权 但也与 RedHat 6 上的 SELinux 有关 以下脚本应该可以修复所有问题 请替换
  • 非矩形 CSS 图像链接

    我有以下要求 大图像包含多个需要链接到其他页面的 热点 听起来很简单 我创建了一个简单的 html 页面 一个带有背景图像的 div 和使用带有图像精灵翻转的 CSS 的绝对定位链接 然而 现在我看到了另一张图像 热点不是方形的 而是不规则
  • 仅带有取消按钮的消息框

    我们可以有一个只有取消按钮的消息框吗 如果是这样 有什么提示吗 是否有内置的 api 方法来仅获取带有取消按钮的消息框 如何创建自定义模式对话框 有链接吗 您可以通过以下方式使用线程本地 CBT 挂钩SetWindowsHookEx 定制M