?? cdlgfind.cpp
字號:
// $Id: CDlgFind.cpp,v 1.19 2005/04/17 10:01:02 genta Exp $
/*! @file
@brief 検索ダイアログボックス
@author Norio Nakatani
@date 1998/12/12 再作成
@date 2001/06/23 N.Nakatani 単語単位で検索する機能を実裝
$Revision: 1.19 $
*/
/*
Copyright (C) 1998-2001, Norio Nakatani
Copyright (C) 2001, genta, JEPRO, hor, Stonee
Copyright (C) 2002, MIK, hor
This source code is designed for sakura editor.
Please contact the copyright holder to use this code for other purpose.
*/
#include "CDlgFind.h"
#include "funccode.h"
#include "sakura_rc.h"
// Jun. 26, 2001 genta 正規表現ライブラリの差し替え
#include "CBregexp.h"
#include "CEditView.h"
#include "etc_uty.h" //Stonee, 2001/03/12
#include "debug.h"// 2002/2/10 aroka ヘッダ整理
//検索 CDlgFind.cpp //@@@ 2002.01.07 add start MIK
#include "sakura.hh"
const DWORD p_helpids[] = { //11800
IDC_BUTTON_SEARCHNEXT, HIDC_FIND_BUTTON_SEARCHNEXT, //次を検索
IDC_BUTTON_SEARCHPREV, HIDC_FIND_BUTTON_SEARCHPREV, //前を検索
IDCANCEL, HIDCANCEL_FIND, //キャンセル
IDC_BUTTON_HELP, HIDC_FIND_BUTTON_HELP, //ヘルプ
IDC_CHK_WORD, HIDC_FIND_CHK_WORD, //単語単位
IDC_CHK_LOHICASE, HIDC_FIND_CHK_LOHICASE, //大文字小文字
IDC_CHK_REGULAREXP, HIDC_FIND_CHK_REGULAREXP, //正規表現
IDC_CHECK_NOTIFYNOTFOUND, HIDC_FIND_CHECK_NOTIFYNOTFOUND, //見つからないときに通知
IDC_CHECK_bAutoCloseDlgFind, HIDC_FIND_CHECK_bAutoCloseDlgFind, //自動的に閉じる
IDC_COMBO_TEXT, HIDC_FIND_COMBO_TEXT, //検索文字列
IDC_STATIC_JRE32VER, HIDC_FIND_STATIC_JRE32VER, //正規表現バージョン
IDC_BUTTON_SETMARK, HIDC_FIND_BUTTON_SETMARK, //2002.01.16 hor 検索該當行をマーク
IDC_CHECK_SEARCHALL, HIDC_FIND_CHECK_SEARCHALL, //2002.01.26 hor 先頭(末尾)から再検索
// IDC_STATIC, -1,
0, 0
}; //@@@ 2002.01.07 add end MIK
CDlgFind::CDlgFind()
{
// MYTRACE( "CDlgFind::CDlgFind()\n" );
m_bLoHiCase = FALSE; /* 英大文字と英小文字を區別する */
m_bWordOnly = FALSE; /* 一致する単語のみ検索する */
m_bRegularExp = FALSE; /* 正規表現 */
m_szText[0] = '\0'; /* 検索文字列 */
return;
}
// /* モーダルダイアログの表示 */
// int CDlgFind::DoModal( HINSTANCE hInstance, HWND hwndParent, LPARAM lParam )
// {
// m_bRegularExp = m_pShareData->m_Common.m_bRegularExp; /* 1==正規表現 */
// m_bLoHiCase = m_pShareData->m_Common.m_bLoHiCase; /* 1==英大文字小文字の區別 */
// m_bWordOnly = m_pShareData->m_Common.m_bWordOnly; /* 1==単語のみ検索 */
// m_bNOTIFYNOTFOUND = m_pShareData->m_Common.m_bNOTIFYNOTFOUND; /* 検索/置換 見つからないときメッセージを表示 */
// return CDialog::DoModal( hInstance, hwndParent, IDD_FIND, lParam );
// }
/* モードレスダイアログの表示 */
HWND CDlgFind::DoModeless( HINSTANCE hInstance, HWND hwndParent, LPARAM lParam )
{
m_bRegularExp = m_pShareData->m_Common.m_bRegularExp; /* 1==正規表現 */
m_bLoHiCase = m_pShareData->m_Common.m_bLoHiCase; /* 1==英大文字小文字の區別 */
m_bWordOnly = m_pShareData->m_Common.m_bWordOnly; /* 1==単語のみ検索 */
m_bNOTIFYNOTFOUND = m_pShareData->m_Common.m_bNOTIFYNOTFOUND; /* 検索/置換 見つからないときメッセージを表示 */
m_nEscCaretPosX_PHY = ((CEditView*)lParam)->m_nCaretPosX_PHY; /* 検索開始時のカーソル位置退避 02/07/28 ai */
m_nEscCaretPosY_PHY = ((CEditView*)lParam)->m_nCaretPosY_PHY; /* 検索開始時のカーソル位置退避 02/07/28 ai */
((CEditView*)lParam)->m_bSearch = TRUE; /* 検索開始位置の登録有無 02/07/28 ai */
return CDialog::DoModeless( hInstance, hwndParent, IDD_FIND, lParam, SW_SHOW );
}
/* モードレス時:検索対象となるビューの変更 */
void CDlgFind::ChangeView( LPARAM pcEditView )
{
m_lParam = pcEditView;
return;
}
/* ダイアログデータの設定 */
void CDlgFind::SetData( void )
{
// MYTRACE( "CDlgFind::SetData()" );
int i;
HWND hwndCombo;
/*****************************
* 初期化 *
*****************************/
// Here Jun. 26, 2001 genta
// 正規表現ライブラリの差し替えに伴う処理の見直しによりjre.dll判定を削除
/* ユーザーがコンボ ボックスのエディット コントロールに入力できるテキストの長さを制限する */
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_TEXT ), CB_LIMITTEXT, (WPARAM)_MAX_PATH - 1, 0 );
/* コンボボックスのユーザー インターフェイスを拡張インターフェースにする */
::SendMessage( ::GetDlgItem( m_hWnd, IDC_COMBO_TEXT ), CB_SETEXTENDEDUI, (WPARAM) (BOOL) TRUE, 0 );
/*****************************
* データ設定 *
*****************************/
/* 検索文字列 */
hwndCombo = ::GetDlgItem( m_hWnd, IDC_COMBO_TEXT );
::SendMessage( hwndCombo, CB_RESETCONTENT, 0, 0 );
::SetDlgItemText( m_hWnd, IDC_COMBO_TEXT, m_szText );
for( i = 0; i < m_pShareData->m_nSEARCHKEYArrNum; ++i ){
::SendMessage( hwndCombo, CB_ADDSTRING, 0, (LPARAM)m_pShareData->m_szSEARCHKEYArr[i] );
}
/* 英大文字と英小文字を區別する */
::CheckDlgButton( m_hWnd, IDC_CHK_LOHICASE, m_bLoHiCase );
// 2001/06/23 Norio Nakatani
/* 単語単位で検索 */
::CheckDlgButton( m_hWnd, IDC_CHK_WORD, m_bWordOnly );
/* 検索/置換 見つからないときメッセージを表示 */
::CheckDlgButton( m_hWnd, IDC_CHECK_NOTIFYNOTFOUND, m_bNOTIFYNOTFOUND );
// From Here Jun. 29, 2001 genta
// 正規表現ライブラリの差し替えに伴う処理の見直し
// 処理フロー及び判定條件の見直し。必ず正規表現のチェックと
// 無関係にCheckRegexpVersionを通過するようにした。
if( CheckRegexpVersion( m_hWnd, IDC_STATIC_JRE32VER, false )
&& m_bRegularExp){
/* 英大文字と英小文字を區別する */
::CheckDlgButton( m_hWnd, IDC_CHK_REGULAREXP, 1 );
//正規表現がONでも、大文字小文字を區別する/しないを選択できるように。
// ::CheckDlgButton( m_hWnd, IDC_CHK_LOHICASE, 1 );
// ::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_LOHICASE ), FALSE );
// 2001/06/23 N.Nakatani
/* 単語単位で探す */
::EnableWindow( ::GetDlgItem( m_hWnd, IDC_CHK_WORD ), FALSE );
}
else {
::CheckDlgButton( m_hWnd, IDC_CHK_REGULAREXP, 0 );
}
// To Here Jun. 29, 2001 genta
/* 検索ダイアログを自動的に閉じる */
::CheckDlgButton( m_hWnd, IDC_CHECK_bAutoCloseDlgFind, m_pShareData->m_Common.m_bAutoCloseDlgFind );
/* 先頭(末尾)から再検索 2002.01.26 hor */
::CheckDlgButton( m_hWnd, IDC_CHECK_SEARCHALL, m_pShareData->m_Common.m_bSearchAll );
return;
}
/* ダイアログデータの取得 */
int CDlgFind::GetData( void )
{
// MYTRACE( "CDlgFind::GetData()" );
// int i;
// int j;
// CMemory* pcmWork;
//
/* 英大文字と英小文字を區別する */
m_bLoHiCase = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_LOHICASE );
// 2001/06/23 Norio Nakatani
/* 単語単位で検索 */
m_bWordOnly = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_WORD );
/* 一致する単語のみ検索する */
/* 正規表現 */
m_bRegularExp = ::IsDlgButtonChecked( m_hWnd, IDC_CHK_REGULAREXP );
/* 検索/置換 見つからないときメッセージを表示 */
m_bNOTIFYNOTFOUND = ::IsDlgButtonChecked( m_hWnd, IDC_CHECK_NOTIFYNOTFOUND );
m_pShareData->m_Common.m_bRegularExp = m_bRegularExp; /* 1==正規表現 */
m_pShareData->m_Common.m_bLoHiCase = m_bLoHiCase; /* 1==英大文字小文字の區別 */
m_pShareData->m_Common.m_bWordOnly = m_bWordOnly; /* 1==単語のみ検索 */
m_pShareData->m_Common.m_bNOTIFYNOTFOUND = m_bNOTIFYNOTFOUND; /* 検索/置換 見つからないときメッセージを表示 */
/* 検索文字列 */
::GetDlgItemText( m_hWnd, IDC_COMBO_TEXT, m_szText, sizeof( m_szText ));
/* 検索ダイアログを自動的に閉じる */
m_pShareData->m_Common.m_bAutoCloseDlgFind = ::IsDlgButtonChecked( m_hWnd, IDC_CHECK_bAutoCloseDlgFind );
/* 先頭(末尾)から再検索 2002.01.26 hor */
m_pShareData->m_Common.m_bSearchAll = ::IsDlgButtonChecked( m_hWnd, IDC_CHECK_SEARCHALL );
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -