在FindReplace对话框中禁用“查找/查找下一个”选项

时间:2017-05-09 18:57:54

标签: winapi mfc

当使用:: ReplaceText()Win32 api函数时,是否可以禁用或隐藏查找/查找下一个按钮,只留下替换?

如果不是,我将需要滚动自己的对话框。

1 个答案:

答案 0 :(得分:2)

ReplaceText()对话框允许您使用各种direction标记隐藏Match caseMatch Whole WordFR_HIDE...框,但它没有任何标记用于隐藏Find NextReplace按钮的标志。所以你必须手动完成。

有两种方法可以做到这一点:

  1. 您可以创建仅包含要显示的UI字段的自定义对话框资源,然后您可以启用FR_ENABLETEMPLATEFR_ENABLETEMPLATEHANDLE标记并将对话框作为模板提供<{1}}或lpTemplateName字段。

  2. 您可以启用hInstance标记并提供FR_ENABLEHOOK回调,以便在处理lpfnHook消息时禁用/隐藏默认对话框中的现有按钮。

  3. MSDN文档中描述了这些技术:

    a defect in their floating point arithmetic, in which certain computations were inaccurate by more than machine epsilon

    我会选择#2,因为它很容易在代码中实现,例如:

    WM_INITDIALOG

    UINT_PTR CALLBACK FRHookProc(HWND hdlg, UINT uiMsg, WPARAM wParam, LPARAM lParam)
    {
        if (uiMsg == WM_INITDIALOG)
        {
            HWND hBtn = GetDlgItem(hdlg, 1); // The "Find Next" button is ID 1
            if (hBtn)
                ShowWindow(hBtn, SW_HIDE);
        }
        return 0;
    }