2017-05-09 1 views

Antwort

2

Der ReplaceText() Dialog können Sie die direction, Match case und Match Whole Word Boxen mit den verschiedenen FR_HIDE... Fahnen verstecken, aber es hat keine Fahnen für das Verstecken der Find Next und Replace Tasten. Sie müssen es also manuell tun.

Es gibt zwei Möglichkeiten, dies zu tun:

  1. Sie können eine benutzerdefinierte Dialogressource erstellen, die nur die UI-Felder enthält, die Sie anzeigen möchten, und dann können Sie die FR_ENABLETEMPLATE oder FR_ENABLETEMPLATEHANDLE Flagge ermöglichen und bieten die Dialog als Vorlage im Feld lpTemplateName oder hInstance.

  2. Sie können die FR_ENABLEHOOK Flag aktivieren und stellen eine lpfnHook Rückruf, der die vorhandenen Tasten in der Standarddialog deaktiviert/versteckt, wenn die Verarbeitung der Nachricht WM_INITDIALOG.

Diese Techniken sind in der MSDN-Dokumentation beschrieben:

Customizing the Find or Replace Dialog Box

ich für # 2 entscheiden würde, da es leicht in Code zu implementieren, zB:

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); 
+0

Große Antwort, danke. –

+0

Ich habe es gerade versucht und stieß auf ein Problem - wenn ich eine Hook-Funktion angeben, dann wird der Suchen ersetzen-Dialog nicht richtig gezeichnet, und die Anwendung friert ein. Dies gilt auch dann, wenn die Hook-Funktion nur TRUE zurückgibt. Ist dir das jemals begegnet? –

+0

@ TomDavies Nr. Und ich habe den Code getestet, bevor ich ihn gepostet habe, es hat gut funktioniert. Aber lesen Sie die Dokumentation: "* Wenn die Hook-Prozedur Null zurückgibt, verarbeitet die Standarddialogfeldprozedur die Nachricht. ** Wenn die Hook-Prozedur einen Wert ungleich Null zurückgibt, ignoriert die Standarddialogfeldprozedur die Nachricht **. *" –

Verwandte Themen