You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需自定义MessageBox实现记事本未保存关闭时的大字体蓝色弹窗?

复刻原版记事本未保存提示弹窗(无需自定义MessageBox)

可以实现,在Windows平台直接调用系统原生的TaskDialogIndirect API就能做到——这是系统提供的标准对话框组件,原生支持大字体蓝色标题、标准提示文本样式,完全匹配原版记事本的弹窗效果,不需要自己写自定义窗口或处理字体渲染。

核心实现步骤:

  • 构造TASKDIALOGCONFIG结构体,配置弹窗的标题、提示内容和按钮选项
  • 指定按钮为“保存”“不保存”“取消”的标准组合,对应系统预设的按钮文本
  • 调用TaskDialogIndirect显示对话框,获取用户操作结果

示例C++代码:

#include <windows.h>
#include <commctrl.h>

INT_PTR ShowUnsavedChangesPrompt(HWND hParentWnd) {
    TASKDIALOGCONFIG dialogConfig = {0};
    dialogConfig.cbSize = sizeof(TASKDIALOGCONFIG);
    dialogConfig.hwndParent = hParentWnd;
    dialogConfig.hInstance = GetModuleHandle(NULL);
    dialogConfig.pszWindowTitle = L"记事本"; // 蓝色大字体标题
    dialogConfig.pszMainInstruction = L"你想将更改保存到 无标题 吗?";
    dialogConfig.pszContent = L"如果不保存,你的更改将会丢失。";
    dialogConfig.dwCommonButtons = TDCBF_YES_BUTTON | TDCBF_NO_BUTTON | TDCBF_CANCEL_BUTTON;
    dialogConfig.pszYesButtonText = L"保存(&S)";
    dialogConfig.pszNoButtonText = L"不保存(&N)";
    dialogConfig.pszCancelButtonText = L"取消(&C)";
    // 启用标准对话框行为
    dialogConfig.dwFlags = TDF_ALLOW_DIALOG_CANCELLATION;

    INT_PTR userChoice = 0;
    TaskDialogIndirect(&dialogConfig, &userChoice, NULL, NULL);
    return userChoice;
}

这个方案完全依赖系统原生控件,既能保证和原版记事本的视觉一致性,还能自动适配系统主题(比如深色模式),不需要维护自定义弹窗的样式逻辑。

原版记事本弹窗样式描述:弹窗顶部是蓝色大字体的“记事本”标题,下方依次是提示主文本“你想将更改保存到 无标题 吗?”和辅助说明“如果不保存,你的更改将会丢失。”,底部排列“保存(S)”“不保存(N)”“取消(C)”三个标准按钮。

内容的提问来源于stack exchange,提问作者MelonMann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:54:25