Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

184 lines
3.8 KiB

//
// CFindDialog.CPP
//
// Find Dialog Class
//
#include "stdafx.h"
#include "resource.h"
#include "CFindDialog.h"
//
// Ctor
//
CFindDialog::CFindDialog(
HWND hParent
)
{
if ( !g_hwndFind )
{
_hParent = hParent;
_hDlg = CreateDialogParam( g_hInstance,
MAKEINTRESOURCE( IDD_FIND ),
_hParent,
(DLGPROC) CFindDialog::DlgProc,
(LPARAM) this
);
g_hwndFind = _hDlg;
}
}
//
// Dtor
//
CFindDialog::~CFindDialog( )
{
DestroyWindow( _hDlg );
g_hwndFind = NULL;
}
//
// _OnCommand( )
//
LRESULT
CFindDialog::_OnCommand(
WPARAM wParam,
LPARAM lParam )
{
WORD wId = LOWORD(wParam);
switch ( wId )
{
case IDCANCEL:
ShowWindow( _hDlg, SW_HIDE );
return TRUE;
case IDC_B_MARK_ALL:
case IDC_B_FIND_NEXT:
{
LPTSTR pszSearchString;
DWORD dwLen;
WPARAM wFlags;
HWND hwnd;
wFlags = 0;
if ( Button_GetCheck( GetDlgItem( _hDlg, IDC_R_UP ) ) == BST_CHECKED )
{
wFlags |= FIND_UP;
}
if ( Button_GetCheck( GetDlgItem( _hDlg, IDC_C_MATCH_CASE ) ) == BST_CHECKED )
{
wFlags |= FIND_MATCHCASE;
}
if ( Button_GetCheck( GetDlgItem( _hDlg, IDC_C_MATCH_WHOLE_WORD_ONLY ) ) == BST_CHECKED )
{
wFlags |= FIND_WHOLE_WORD;
}
hwnd = GetDlgItem( _hDlg, IDC_CB_FIND_WHAT );
dwLen = Edit_GetTextLength( hwnd ) + 1;
if ( dwLen )
{
pszSearchString = (LPTSTR) LocalAlloc( LMEM_FIXED, dwLen * sizeof(TCHAR) );
if ( pszSearchString )
{
Edit_GetText( hwnd, pszSearchString, dwLen );
if ( wId == IDC_B_MARK_ALL )
{
PostMessage( _hParent, WM_MARK_ALL, wFlags, (LPARAM) pszSearchString );
}
else
{
PostMessage( _hParent, WM_FIND_NEXT, wFlags, (LPARAM) pszSearchString );
}
hwnd = GetDlgItem( _hDlg, IDC_CB_FIND_WHAT );
if ( ComboBox_FindString( hwnd, -1, pszSearchString ) == CB_ERR )
{
ComboBox_InsertString( hwnd, -1, pszSearchString );
}
}
}
}
return TRUE;
}
return 0;
}
//
// _OnInitDialog( )
//
LRESULT
CFindDialog::_OnInitDialog(
HWND hDlg
)
{
_hDlg = hDlg;
SetWindowLongPtr( _hDlg, GWLP_USERDATA, (LONG_PTR) this );
Button_SetCheck( GetDlgItem( _hDlg, IDC_R_DOWN ), BST_CHECKED );
return 0;
}
//
// _OnDestroyWindow( )
//
LRESULT
CFindDialog::_OnDestroyWindow( )
{
return 0;
}
//
// DlgProc( )
//
LRESULT
CALLBACK
CFindDialog::DlgProc(
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam )
{
CFindDialog * pfd = (CFindDialog *) GetWindowLongPtr( hDlg, GWLP_USERDATA );
if ( pfd != NULL )
{
switch( uMsg )
{
case WM_COMMAND:
return pfd->_OnCommand( wParam, lParam );
case WM_DESTROY:
SetWindowLongPtr( hDlg, GWLP_USERDATA, (LONG_PTR)NULL );
return pfd->_OnDestroyWindow( );
case WM_SHOWWINDOW:
if ( wParam )
{
SetFocus( GetDlgItem( hDlg, IDC_CB_FIND_WHAT ) );
}
break;
default:
break; // fall thru
}
}
if ( uMsg == WM_INITDIALOG )
{
pfd = (CFindDialog *) lParam;
return pfd->_OnInitDialog( hDlg );
}
return 0;
};