// // 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; };