519 lines
18 KiB
C
519 lines
18 KiB
C
|
/*
|
||
|
* COMMDLG - Find & Replace Text Dialogs
|
||
|
*
|
||
|
* Copyright 1994 Martin Ayotte
|
||
|
* Copyright 1996 Albrecht Kleine
|
||
|
* Copyright 1999 Klaas van Gend
|
||
|
*/
|
||
|
|
||
|
#include <ctype.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#include "winbase.h"
|
||
|
#include "wine/winbase16.h"
|
||
|
#include "wine/winuser16.h"
|
||
|
#include "win.h"
|
||
|
#include "heap.h"
|
||
|
#include "message.h"
|
||
|
#include "commdlg.h"
|
||
|
#include "resource.h"
|
||
|
#include "dialog.h"
|
||
|
#include "dlgs.h"
|
||
|
#include "module.h"
|
||
|
#include "drive.h"
|
||
|
#include "debug.h"
|
||
|
#include "font.h"
|
||
|
#include "winproc.h"
|
||
|
|
||
|
extern DWORD CommDlgLastError;
|
||
|
/*
|
||
|
extern HBITMAP16 hFolder;
|
||
|
extern HBITMAP16 hFolder2;
|
||
|
extern HBITMAP16 hFloppy;
|
||
|
extern HBITMAP16 hHDisk;
|
||
|
extern HBITMAP16 hCDRom;
|
||
|
extern HBITMAP16 hBitmapTT;
|
||
|
extern const char defaultfilter[];
|
||
|
*/
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FindText16 (COMMDLG.11)
|
||
|
*/
|
||
|
HWND16 WINAPI FindText16( SEGPTR find )
|
||
|
{
|
||
|
HANDLE16 hInst;
|
||
|
LPCVOID ptr;
|
||
|
LPFINDREPLACE16 lpFind = (LPFINDREPLACE16)PTR_SEG_TO_LIN(find);
|
||
|
|
||
|
/*
|
||
|
* FIXME : Should respond to FR_ENABLETEMPLATE and FR_ENABLEHOOK here
|
||
|
* For now, only the standard dialog works.
|
||
|
*/
|
||
|
if (lpFind->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE |
|
||
|
FR_ENABLEHOOK)) FIXME(commdlg, ": unimplemented flag (ignored)\n");
|
||
|
ptr = SYSRES_GetResPtr( SYSRES_DIALOG_FIND_TEXT );
|
||
|
hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
|
||
|
return DIALOG_CreateIndirect( hInst, ptr, TRUE, lpFind->hwndOwner,
|
||
|
(DLGPROC16)MODULE_GetWndProcEntry16("FindTextDlgProc"),
|
||
|
find, WIN_PROC_16 );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FindText32A (COMMDLG.6)
|
||
|
*/
|
||
|
HWND WINAPI FindTextA( LPFINDREPLACEA lpFind )
|
||
|
{
|
||
|
HANDLE16 hInst;
|
||
|
LPCVOID ptr;
|
||
|
|
||
|
/*
|
||
|
* FIXME : Should respond to FR_ENABLETEMPLATE and FR_ENABLEHOOK here
|
||
|
* For now, only the standard dialog works.
|
||
|
*/
|
||
|
if (lpFind->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE |
|
||
|
FR_ENABLEHOOK)) FIXME(commdlg, ": unimplemented flag (ignored)\n");
|
||
|
ptr = SYSRES_GetResPtr( SYSRES_DIALOG_FIND_TEXT );
|
||
|
hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
|
||
|
return DIALOG_CreateIndirect( hInst, ptr, TRUE, lpFind->hwndOwner,
|
||
|
(DLGPROC16)FindTextDlgProcA, (LPARAM)lpFind, WIN_PROC_32A );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FindText32W (COMMDLG.7)
|
||
|
*/
|
||
|
HWND WINAPI FindTextW( LPFINDREPLACEW lpFind )
|
||
|
{
|
||
|
HANDLE16 hInst;
|
||
|
LPCVOID ptr;
|
||
|
|
||
|
/*
|
||
|
* FIXME : Should respond to FR_ENABLETEMPLATE and FR_ENABLEHOOK here
|
||
|
* For now, only the standard dialog works.
|
||
|
*/
|
||
|
if (lpFind->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE |
|
||
|
FR_ENABLEHOOK)) FIXME(commdlg, ": unimplemented flag (ignored)\n");
|
||
|
ptr = SYSRES_GetResPtr( SYSRES_DIALOG_FIND_TEXT );
|
||
|
hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
|
||
|
return DIALOG_CreateIndirect( hInst, ptr, TRUE, lpFind->hwndOwner,
|
||
|
(DLGPROC16)FindTextDlgProcW, (LPARAM)lpFind, WIN_PROC_32W );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* ReplaceText16 (COMMDLG.12)
|
||
|
*/
|
||
|
HWND16 WINAPI ReplaceText16( SEGPTR find )
|
||
|
{
|
||
|
HANDLE16 hInst;
|
||
|
LPCVOID ptr;
|
||
|
LPFINDREPLACE16 lpFind = (LPFINDREPLACE16)PTR_SEG_TO_LIN(find);
|
||
|
|
||
|
/*
|
||
|
* FIXME : We should do error checking on the lpFind structure here
|
||
|
* and make CommDlgExtendedError() return the error condition.
|
||
|
*/
|
||
|
if (lpFind->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE |
|
||
|
FR_ENABLEHOOK)) FIXME(commdlg, ": unimplemented flag (ignored)\n");
|
||
|
ptr = SYSRES_GetResPtr( SYSRES_DIALOG_REPLACE_TEXT );
|
||
|
hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
|
||
|
return DIALOG_CreateIndirect( hInst, ptr, TRUE, lpFind->hwndOwner,
|
||
|
(DLGPROC16)MODULE_GetWndProcEntry16("ReplaceTextDlgProc"),
|
||
|
find, WIN_PROC_16 );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* ReplaceText32A (COMDLG32.19)
|
||
|
*/
|
||
|
HWND WINAPI ReplaceTextA( LPFINDREPLACEA lpFind )
|
||
|
{
|
||
|
HANDLE16 hInst;
|
||
|
LPCVOID ptr;
|
||
|
|
||
|
/*
|
||
|
* FIXME : Should respond to FR_ENABLETEMPLATE and FR_ENABLEHOOK here
|
||
|
* For now, only the standard dialog works.
|
||
|
*/
|
||
|
if (lpFind->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE |
|
||
|
FR_ENABLEHOOK)) FIXME(commdlg, ": unimplemented flag (ignored)\n");
|
||
|
ptr = SYSRES_GetResPtr( SYSRES_DIALOG_REPLACE_TEXT );
|
||
|
hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
|
||
|
return DIALOG_CreateIndirect( hInst, ptr, TRUE, lpFind->hwndOwner,
|
||
|
(DLGPROC16)ReplaceTextDlgProcA, (LPARAM)lpFind, WIN_PROC_32A );
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* ReplaceText32W (COMDLG32.20)
|
||
|
*/
|
||
|
HWND WINAPI ReplaceTextW( LPFINDREPLACEW lpFind )
|
||
|
{
|
||
|
HANDLE16 hInst;
|
||
|
LPCVOID ptr;
|
||
|
|
||
|
/*
|
||
|
* FIXME : We should do error checking on the lpFind structure here
|
||
|
* and make CommDlgExtendedError() return the error condition.
|
||
|
*/
|
||
|
if (lpFind->Flags & (FR_ENABLETEMPLATE | FR_ENABLETEMPLATEHANDLE |
|
||
|
FR_ENABLEHOOK)) FIXME(commdlg, ": unimplemented flag (ignored)\n");
|
||
|
ptr = SYSRES_GetResPtr( SYSRES_DIALOG_REPLACE_TEXT );
|
||
|
hInst = WIN_GetWindowInstance( lpFind->hwndOwner );
|
||
|
return DIALOG_CreateIndirect( hInst, ptr, TRUE, lpFind->hwndOwner,
|
||
|
(DLGPROC16)ReplaceTextDlgProcW, (LPARAM)lpFind, WIN_PROC_32W );
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FINDDLG_WMInitDialog [internal]
|
||
|
*/
|
||
|
static LRESULT FINDDLG_WMInitDialog(HWND hWnd, LPARAM lParam, LPDWORD lpFlags,
|
||
|
LPSTR lpstrFindWhat, BOOL fUnicode)
|
||
|
{
|
||
|
SetWindowLongA(hWnd, DWL_USER, lParam);
|
||
|
*lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);
|
||
|
/*
|
||
|
* FIXME : If the initial FindWhat string is empty, we should disable the
|
||
|
* FindNext (IDOK) button. Only after typing some text, the button should be
|
||
|
* enabled.
|
||
|
*/
|
||
|
if (fUnicode) SetDlgItemTextW(hWnd, edt1, (LPWSTR)lpstrFindWhat);
|
||
|
else SetDlgItemTextA(hWnd, edt1, lpstrFindWhat);
|
||
|
CheckRadioButton(hWnd, rad1, rad2, (*lpFlags & FR_DOWN) ? rad2 : rad1);
|
||
|
if (*lpFlags & (FR_HIDEUPDOWN | FR_NOUPDOWN)) {
|
||
|
EnableWindow(GetDlgItem(hWnd, rad1), FALSE);
|
||
|
EnableWindow(GetDlgItem(hWnd, rad2), FALSE);
|
||
|
}
|
||
|
if (*lpFlags & FR_HIDEUPDOWN) {
|
||
|
ShowWindow(GetDlgItem(hWnd, rad1), SW_HIDE);
|
||
|
ShowWindow(GetDlgItem(hWnd, rad2), SW_HIDE);
|
||
|
ShowWindow(GetDlgItem(hWnd, grp1), SW_HIDE);
|
||
|
}
|
||
|
CheckDlgButton(hWnd, chx1, (*lpFlags & FR_WHOLEWORD) ? 1 : 0);
|
||
|
if (*lpFlags & (FR_HIDEWHOLEWORD | FR_NOWHOLEWORD))
|
||
|
EnableWindow(GetDlgItem(hWnd, chx1), FALSE);
|
||
|
if (*lpFlags & FR_HIDEWHOLEWORD)
|
||
|
ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE);
|
||
|
CheckDlgButton(hWnd, chx2, (*lpFlags & FR_MATCHCASE) ? 1 : 0);
|
||
|
if (*lpFlags & (FR_HIDEMATCHCASE | FR_NOMATCHCASE))
|
||
|
EnableWindow(GetDlgItem(hWnd, chx2), FALSE);
|
||
|
if (*lpFlags & FR_HIDEMATCHCASE)
|
||
|
ShowWindow(GetDlgItem(hWnd, chx2), SW_HIDE);
|
||
|
if (!(*lpFlags & FR_SHOWHELP)) {
|
||
|
EnableWindow(GetDlgItem(hWnd, pshHelp), FALSE);
|
||
|
ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);
|
||
|
}
|
||
|
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FINDDLG_WMCommand [internal]
|
||
|
*/
|
||
|
static LRESULT FINDDLG_WMCommand(HWND hWnd, WPARAM wParam,
|
||
|
HWND hwndOwner, LPDWORD lpFlags,
|
||
|
LPSTR lpstrFindWhat, WORD wFindWhatLen,
|
||
|
BOOL fUnicode)
|
||
|
{
|
||
|
int uFindReplaceMessage = RegisterWindowMessageA( FINDMSGSTRING );
|
||
|
int uHelpMessage = RegisterWindowMessageA( HELPMSGSTRING );
|
||
|
|
||
|
switch (wParam) {
|
||
|
case IDOK:
|
||
|
if (fUnicode)
|
||
|
GetDlgItemTextW(hWnd, edt1, (LPWSTR)lpstrFindWhat, wFindWhatLen/2);
|
||
|
else GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);
|
||
|
if (IsDlgButtonChecked(hWnd, rad2))
|
||
|
*lpFlags |= FR_DOWN;
|
||
|
else *lpFlags &= ~FR_DOWN;
|
||
|
if (IsDlgButtonChecked(hWnd, chx1))
|
||
|
*lpFlags |= FR_WHOLEWORD;
|
||
|
else *lpFlags &= ~FR_WHOLEWORD;
|
||
|
if (IsDlgButtonChecked(hWnd, chx2))
|
||
|
*lpFlags |= FR_MATCHCASE;
|
||
|
else *lpFlags &= ~FR_MATCHCASE;
|
||
|
*lpFlags &= ~(FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);
|
||
|
*lpFlags |= FR_FINDNEXT;
|
||
|
SendMessageA(hwndOwner, uFindReplaceMessage, 0,
|
||
|
GetWindowLongA(hWnd, DWL_USER) );
|
||
|
return TRUE;
|
||
|
case IDCANCEL:
|
||
|
*lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL);
|
||
|
*lpFlags |= FR_DIALOGTERM;
|
||
|
SendMessageA(hwndOwner, uFindReplaceMessage, 0,
|
||
|
GetWindowLongA(hWnd, DWL_USER) );
|
||
|
DestroyWindow(hWnd);
|
||
|
return TRUE;
|
||
|
case pshHelp:
|
||
|
/* FIXME : should lpfr structure be passed as an argument ??? */
|
||
|
SendMessageA(hwndOwner, uHelpMessage, 0, 0);
|
||
|
return TRUE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FindTextDlgProc16 (COMMDLG.13)
|
||
|
*/
|
||
|
LRESULT WINAPI FindTextDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
LPFINDREPLACE16 lpfr;
|
||
|
switch (wMsg) {
|
||
|
case WM_INITDIALOG:
|
||
|
lpfr=(LPFINDREPLACE16)PTR_SEG_TO_LIN(lParam);
|
||
|
return FINDDLG_WMInitDialog(hWnd, lParam, &(lpfr->Flags),
|
||
|
PTR_SEG_TO_LIN(lpfr->lpstrFindWhat), FALSE);
|
||
|
case WM_COMMAND:
|
||
|
lpfr=(LPFINDREPLACE16)PTR_SEG_TO_LIN(GetWindowLongA(hWnd, DWL_USER));
|
||
|
return FINDDLG_WMCommand(hWnd, wParam, lpfr->hwndOwner,
|
||
|
&lpfr->Flags, PTR_SEG_TO_LIN(lpfr->lpstrFindWhat),
|
||
|
lpfr->wFindWhatLen, FALSE);
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FindTextDlgProc32A
|
||
|
*/
|
||
|
LRESULT WINAPI FindTextDlgProcA(HWND hWnd, UINT wMsg, WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
LPFINDREPLACEA lpfr;
|
||
|
switch (wMsg) {
|
||
|
case WM_INITDIALOG:
|
||
|
lpfr=(LPFINDREPLACEA)lParam;
|
||
|
return FINDDLG_WMInitDialog(hWnd, lParam, &(lpfr->Flags),
|
||
|
lpfr->lpstrFindWhat, FALSE);
|
||
|
case WM_COMMAND:
|
||
|
lpfr=(LPFINDREPLACEA)GetWindowLongA(hWnd, DWL_USER);
|
||
|
return FINDDLG_WMCommand(hWnd, wParam, lpfr->hwndOwner,
|
||
|
&lpfr->Flags, lpfr->lpstrFindWhat, lpfr->wFindWhatLen,
|
||
|
FALSE);
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* FindTextDlgProc32W
|
||
|
*/
|
||
|
LRESULT WINAPI FindTextDlgProcW(HWND hWnd, UINT wMsg, WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
LPFINDREPLACEW lpfr;
|
||
|
switch (wMsg) {
|
||
|
case WM_INITDIALOG:
|
||
|
lpfr=(LPFINDREPLACEW)lParam;
|
||
|
return FINDDLG_WMInitDialog(hWnd, lParam, &(lpfr->Flags),
|
||
|
(LPSTR)lpfr->lpstrFindWhat, TRUE);
|
||
|
case WM_COMMAND:
|
||
|
lpfr=(LPFINDREPLACEW)GetWindowLongA(hWnd, DWL_USER);
|
||
|
return FINDDLG_WMCommand(hWnd, wParam, lpfr->hwndOwner,
|
||
|
&lpfr->Flags, (LPSTR)lpfr->lpstrFindWhat, lpfr->wFindWhatLen,
|
||
|
TRUE);
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************************
|
||
|
* REPLACEDLG_WMInitDialog [internal]
|
||
|
*/
|
||
|
static LRESULT REPLACEDLG_WMInitDialog(HWND hWnd, LPARAM lParam,
|
||
|
LPDWORD lpFlags, LPSTR lpstrFindWhat,
|
||
|
LPSTR lpstrReplaceWith, BOOL fUnicode)
|
||
|
{
|
||
|
SetWindowLongA(hWnd, DWL_USER, lParam);
|
||
|
*lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);
|
||
|
/*
|
||
|
* FIXME : If the initial FindWhat string is empty, we should disable the FinNext /
|
||
|
* Replace / ReplaceAll buttons. Only after typing some text, the buttons should be
|
||
|
* enabled.
|
||
|
*/
|
||
|
if (fUnicode)
|
||
|
{
|
||
|
SetDlgItemTextW(hWnd, edt1, (LPWSTR)lpstrFindWhat);
|
||
|
SetDlgItemTextW(hWnd, edt2, (LPWSTR)lpstrReplaceWith);
|
||
|
} else
|
||
|
{
|
||
|
SetDlgItemTextA(hWnd, edt1, lpstrFindWhat);
|
||
|
SetDlgItemTextA(hWnd, edt2, lpstrReplaceWith);
|
||
|
}
|
||
|
CheckDlgButton(hWnd, chx1, (*lpFlags & FR_WHOLEWORD) ? 1 : 0);
|
||
|
if (*lpFlags & (FR_HIDEWHOLEWORD | FR_NOWHOLEWORD))
|
||
|
EnableWindow(GetDlgItem(hWnd, chx1), FALSE);
|
||
|
if (*lpFlags & FR_HIDEWHOLEWORD)
|
||
|
ShowWindow(GetDlgItem(hWnd, chx1), SW_HIDE);
|
||
|
CheckDlgButton(hWnd, chx2, (*lpFlags & FR_MATCHCASE) ? 1 : 0);
|
||
|
if (*lpFlags & (FR_HIDEMATCHCASE | FR_NOMATCHCASE))
|
||
|
EnableWindow(GetDlgItem(hWnd, chx2), FALSE);
|
||
|
if (*lpFlags & FR_HIDEMATCHCASE)
|
||
|
ShowWindow(GetDlgItem(hWnd, chx2), SW_HIDE);
|
||
|
if (!(*lpFlags & FR_SHOWHELP)) {
|
||
|
EnableWindow(GetDlgItem(hWnd, pshHelp), FALSE);
|
||
|
ShowWindow(GetDlgItem(hWnd, pshHelp), SW_HIDE);
|
||
|
}
|
||
|
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************************
|
||
|
* REPLACEDLG_WMCommand [internal]
|
||
|
*/
|
||
|
static LRESULT REPLACEDLG_WMCommand(HWND hWnd, WPARAM16 wParam,
|
||
|
HWND hwndOwner, LPDWORD lpFlags,
|
||
|
LPSTR lpstrFindWhat, WORD wFindWhatLen,
|
||
|
LPSTR lpstrReplaceWith, WORD wReplaceWithLen,
|
||
|
BOOL fUnicode)
|
||
|
{
|
||
|
int uFindReplaceMessage = RegisterWindowMessageA( FINDMSGSTRING );
|
||
|
int uHelpMessage = RegisterWindowMessageA( HELPMSGSTRING );
|
||
|
|
||
|
switch (wParam) {
|
||
|
case IDOK:
|
||
|
if (fUnicode)
|
||
|
{
|
||
|
GetDlgItemTextW(hWnd, edt1, (LPWSTR)lpstrFindWhat, wFindWhatLen/2);
|
||
|
GetDlgItemTextW(hWnd, edt2, (LPWSTR)lpstrReplaceWith, wReplaceWithLen/2);
|
||
|
} else
|
||
|
{
|
||
|
GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);
|
||
|
GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen);
|
||
|
}
|
||
|
if (IsDlgButtonChecked(hWnd, chx1))
|
||
|
*lpFlags |= FR_WHOLEWORD;
|
||
|
else *lpFlags &= ~FR_WHOLEWORD;
|
||
|
if (IsDlgButtonChecked(hWnd, chx2))
|
||
|
*lpFlags |= FR_MATCHCASE;
|
||
|
else *lpFlags &= ~FR_MATCHCASE;
|
||
|
*lpFlags &= ~(FR_REPLACE | FR_REPLACEALL | FR_DIALOGTERM);
|
||
|
*lpFlags |= FR_FINDNEXT;
|
||
|
SendMessageA(hwndOwner, uFindReplaceMessage, 0,
|
||
|
GetWindowLongA(hWnd, DWL_USER) );
|
||
|
return TRUE;
|
||
|
case IDCANCEL:
|
||
|
*lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_REPLACEALL);
|
||
|
*lpFlags |= FR_DIALOGTERM;
|
||
|
SendMessageA(hwndOwner, uFindReplaceMessage, 0,
|
||
|
GetWindowLongA(hWnd, DWL_USER) );
|
||
|
DestroyWindow(hWnd);
|
||
|
return TRUE;
|
||
|
case psh1:
|
||
|
if (fUnicode)
|
||
|
{
|
||
|
GetDlgItemTextW(hWnd, edt1, (LPWSTR)lpstrFindWhat, wFindWhatLen/2);
|
||
|
GetDlgItemTextW(hWnd, edt2, (LPWSTR)lpstrReplaceWith, wReplaceWithLen/2);
|
||
|
} else
|
||
|
{
|
||
|
GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);
|
||
|
GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen);
|
||
|
}
|
||
|
if (IsDlgButtonChecked(hWnd, chx1))
|
||
|
*lpFlags |= FR_WHOLEWORD;
|
||
|
else *lpFlags &= ~FR_WHOLEWORD;
|
||
|
if (IsDlgButtonChecked(hWnd, chx2))
|
||
|
*lpFlags |= FR_MATCHCASE;
|
||
|
else *lpFlags &= ~FR_MATCHCASE;
|
||
|
*lpFlags &= ~(FR_FINDNEXT | FR_REPLACEALL | FR_DIALOGTERM);
|
||
|
*lpFlags |= FR_REPLACE;
|
||
|
SendMessageA(hwndOwner, uFindReplaceMessage, 0,
|
||
|
GetWindowLongA(hWnd, DWL_USER) );
|
||
|
return TRUE;
|
||
|
case psh2:
|
||
|
if (fUnicode)
|
||
|
{
|
||
|
GetDlgItemTextW(hWnd, edt1, (LPWSTR)lpstrFindWhat, wFindWhatLen/2);
|
||
|
GetDlgItemTextW(hWnd, edt2, (LPWSTR)lpstrReplaceWith, wReplaceWithLen/2);
|
||
|
} else
|
||
|
{
|
||
|
GetDlgItemTextA(hWnd, edt1, lpstrFindWhat, wFindWhatLen);
|
||
|
GetDlgItemTextA(hWnd, edt2, lpstrReplaceWith, wReplaceWithLen);
|
||
|
}
|
||
|
if (IsDlgButtonChecked(hWnd, chx1))
|
||
|
*lpFlags |= FR_WHOLEWORD;
|
||
|
else *lpFlags &= ~FR_WHOLEWORD;
|
||
|
if (IsDlgButtonChecked(hWnd, chx2))
|
||
|
*lpFlags |= FR_MATCHCASE;
|
||
|
else *lpFlags &= ~FR_MATCHCASE;
|
||
|
*lpFlags &= ~(FR_FINDNEXT | FR_REPLACE | FR_DIALOGTERM);
|
||
|
*lpFlags |= FR_REPLACEALL;
|
||
|
SendMessageA(hwndOwner, uFindReplaceMessage, 0,
|
||
|
GetWindowLongA(hWnd, DWL_USER) );
|
||
|
return TRUE;
|
||
|
case pshHelp:
|
||
|
/* FIXME : should lpfr structure be passed as an argument ??? */
|
||
|
SendMessageA(hwndOwner, uHelpMessage, 0, 0);
|
||
|
return TRUE;
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
/***********************************************************************
|
||
|
* ReplaceTextDlgProc16 (COMMDLG.14)
|
||
|
*/
|
||
|
LRESULT WINAPI ReplaceTextDlgProc16(HWND16 hWnd, UINT16 wMsg, WPARAM16 wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
LPFINDREPLACE16 lpfr;
|
||
|
switch (wMsg) {
|
||
|
case WM_INITDIALOG:
|
||
|
lpfr=(LPFINDREPLACE16)PTR_SEG_TO_LIN(lParam);
|
||
|
return REPLACEDLG_WMInitDialog(hWnd, lParam, &lpfr->Flags,
|
||
|
PTR_SEG_TO_LIN(lpfr->lpstrFindWhat),
|
||
|
PTR_SEG_TO_LIN(lpfr->lpstrReplaceWith), FALSE);
|
||
|
case WM_COMMAND:
|
||
|
lpfr=(LPFINDREPLACE16)PTR_SEG_TO_LIN(GetWindowLongA(hWnd, DWL_USER));
|
||
|
return REPLACEDLG_WMCommand(hWnd, wParam, lpfr->hwndOwner,
|
||
|
&lpfr->Flags, PTR_SEG_TO_LIN(lpfr->lpstrFindWhat),
|
||
|
lpfr->wFindWhatLen, PTR_SEG_TO_LIN(lpfr->lpstrReplaceWith),
|
||
|
lpfr->wReplaceWithLen, FALSE);
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* ReplaceTextDlgProc32A
|
||
|
*/
|
||
|
LRESULT WINAPI ReplaceTextDlgProcA(HWND hWnd, UINT wMsg, WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
LPFINDREPLACEA lpfr;
|
||
|
switch (wMsg) {
|
||
|
case WM_INITDIALOG:
|
||
|
lpfr=(LPFINDREPLACEA)lParam;
|
||
|
return REPLACEDLG_WMInitDialog(hWnd, lParam, &lpfr->Flags,
|
||
|
lpfr->lpstrFindWhat, lpfr->lpstrReplaceWith, FALSE);
|
||
|
case WM_COMMAND:
|
||
|
lpfr=(LPFINDREPLACEA)GetWindowLongA(hWnd, DWL_USER);
|
||
|
return REPLACEDLG_WMCommand(hWnd, wParam, lpfr->hwndOwner,
|
||
|
&lpfr->Flags, lpfr->lpstrFindWhat, lpfr->wFindWhatLen,
|
||
|
lpfr->lpstrReplaceWith, lpfr->wReplaceWithLen, FALSE);
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
/***********************************************************************
|
||
|
* ReplaceTextDlgProc32W
|
||
|
*/
|
||
|
LRESULT WINAPI ReplaceTextDlgProcW(HWND hWnd, UINT wMsg, WPARAM wParam,
|
||
|
LPARAM lParam)
|
||
|
{
|
||
|
LPFINDREPLACEW lpfr;
|
||
|
switch (wMsg) {
|
||
|
case WM_INITDIALOG:
|
||
|
lpfr=(LPFINDREPLACEW)lParam;
|
||
|
return REPLACEDLG_WMInitDialog(hWnd, lParam, &lpfr->Flags,
|
||
|
(LPSTR)lpfr->lpstrFindWhat, (LPSTR)lpfr->lpstrReplaceWith,
|
||
|
TRUE);
|
||
|
case WM_COMMAND:
|
||
|
lpfr=(LPFINDREPLACEW)GetWindowLongA(hWnd, DWL_USER);
|
||
|
return REPLACEDLG_WMCommand(hWnd, wParam, lpfr->hwndOwner,
|
||
|
&lpfr->Flags, (LPSTR)lpfr->lpstrFindWhat, lpfr->wFindWhatLen,
|
||
|
(LPSTR)lpfr->lpstrReplaceWith, lpfr->wReplaceWithLen, TRUE);
|
||
|
}
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|