Winapi 在FindReplace对话框中禁用“查找/查找下一个”选项
使用::ReplaceText()Win32 api函数时,是否可以禁用或隐藏“查找/查找下一步”按钮,而只保留“替换”按钮 如果没有,我需要滚动我自己的对话框。使用Winapi 在FindReplace对话框中禁用“查找/查找下一个”选项,winapi,mfc,Winapi,Mfc,使用::ReplaceText()Win32 api函数时,是否可以禁用或隐藏“查找/查找下一步”按钮,而只保留“替换”按钮 如果没有,我需要滚动我自己的对话框。使用替换文本()对话框可以隐藏方向,匹配大小写,以及使用各种FR\u hide…标志匹配整个单词框,但是它没有任何用于隐藏查找下一个和替换按钮的标志。因此,您必须手动执行此操作 有两种方法可以做到这一点: 您可以创建一个仅包含要显示的UI字段的自定义对话框资源,然后可以分别启用FR_启用模板或FR_启用模板句柄标志,并在lpTempla
替换文本()
对话框可以隐藏方向
,匹配大小写
,以及使用各种FR\u hide…
标志匹配整个单词
框,但是它没有任何用于隐藏查找下一个
和替换
按钮的标志。因此,您必须手动执行此操作
有两种方法可以做到这一点:
FR_启用模板
或FR_启用模板句柄
标志,并在lpTemplateName
或hInstance
字段中作为模板提供对话框FR_ENABLEHOOK
标志,并提供lpfnHook
回调,在处理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;
}
ReplaceText()
对话框允许您使用各种FR\u hide…
标志隐藏方向
、匹配大小写
、和匹配整个单词
框,但它没有隐藏查找下一个
和替换
按钮的任何标志。因此,您必须手动执行此操作
有两种方法可以做到这一点:
FR_启用模板
或FR_启用模板句柄
标志,并在lpTemplateName
或hInstance
字段中作为模板提供对话框FR_ENABLEHOOK
标志,并提供lpfnHook
回调,在处理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;
}
我的建议是:不要使用那些对话框,因为它们只适合做记事本。我的建议是:不要使用那些对话框,因为它们只适合做记事本。我刚刚尝试了这个,但遇到了一个问题——如果我指定了一个钩子函数,那么“查找替换”对话框就不能正确绘制,应用程序就会冻结。即使hook函数只返回true,这也是真的。你有没有遇到过这种情况?@TomDavies没有。我在发布代码之前测试了它,它运行得很好。但是请阅读文档:“如果钩子过程返回零,则默认对话框过程将处理该消息。如果钩子过程返回非零值,则默认对话框过程将忽略该消息。”是的,请阅读所有文档(有哪些文档-关于这方面的内容很少)。无法让它工作,所以使用模板解决方案,这对我来说更容易。谢谢。我刚刚尝试了这个,但遇到了一个问题-如果我指定了一个钩子函数,那么“查找替换”对话框将无法正确绘制,应用程序将冻结。即使hook函数只返回true,这也是真的。你有没有遇到过这种情况?@TomDavies没有。我在发布代码之前测试了它,它运行得很好。但是请阅读文档:“如果钩子过程返回零,则默认对话框过程将处理该消息。如果钩子过程返回非零值,则默认对话框过程将忽略该消息。”是的,请阅读所有文档(有哪些文档-关于这方面的内容很少)。无法让它工作,所以使用模板解决方案,这对我来说更容易。谢谢