ReplaceText()Win32 API関数を使用すると、Replace/Replaceだけを残してfind/find nextボタンを無効または非表示にできますか?FindReplaceダイアログの[Find/Find Next]オプションを無効にする
ない場合、私は自分のダイアログをロールバックする必要があります。
ReplaceText()Win32 API関数を使用すると、Replace/Replaceだけを残してfind/find nextボタンを無効または非表示にできますか?FindReplaceダイアログの[Find/Find Next]オプションを無効にする
ない場合、私は自分のダイアログをロールバックする必要があります。
ReplaceText()
ダイアログでは、さまざまなFR_HIDE...
のフラグを使用してdirection
、Match case
、およびMatch Whole Word
ボックスを非表示にすることができますが、それはFind Next
とReplace
ボタンを隠すための任意のフラグを持っていません。したがって、手動で行う必要があります。これを行うには2つの方法があり
:
あなたが表示したいだけでUIフィールドを含むカスタムダイアログリソースを作成することができ、その後、あなたはFR_ENABLETEMPLATE
やFR_ENABLETEMPLATEHANDLE
フラグを有効にして提供することができますダイアログをテンプレートとしてそれぞれlpTemplateName
またはhInstance
フィールドに入力します。
あなたはFR_ENABLEHOOK
フラグを有効にしてWM_INITDIALOG
メッセージを処理するときに、デフォルトのダイアログで、既存のボタンを隠し/無効lpfnHook
コールバックを提供することができます。
これらの技術は、MSDNのドキュメントに記述されています
Customizing the Find or Replace Dialog Box
コードで実装が容易であるように私は、#2を選ぶだろう、例えば:
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;
}
FINDREPLACE fr = {sizeof(fr), 0};
...
fr.Flags = FR_ENABLEHOOK;
fr.lpfnHook = &FRHookProc;
...
HWND hDlg = ReplaceText(&fr);
偉大な答え、ありがとう。 –
は、私はこれを試して、問題に遭遇した - 私は、ダイアログが正しく描画されません置き換える見つけ、フック関数を指定すると、アプリケーションがフリーズした場合。これは、フック関数が何もせずにTRUEを返す場合にも当てはまります。あなたはこれに遭遇しましたか? –
@TomDavies no。と私はそれを投稿する前にコードをテストした、それは正常に働いた。しかし、ドキュメントを読んで:「フックプロシージャがゼロを返した場合*、デフォルトのダイアログボックスプロシージャがメッセージを処理 **フックプロシージャがゼロ以外の値を返す場合、デフォルトのダイアログボックスプロシージャがメッセージを無視** *。。」 –
私のアドバイス:単にそれらのダイアログを使用しないでください、彼らはメモ帳に適しています。はるかに柔軟性のあるあなた自身を作る。 –