📄 cproptypesregex.cpp
字号:
if( nIndex2 <= 1 ) return TRUE;
nIndex2 = nIndex - 1;
ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, sizeof(szKeyWord));
ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, sizeof(szColorIndex));
ListView_DeleteItem(hwndList, nIndex); //古いキーを削除
//キーを追加する。
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.pszText = szKeyWord;
lvi.iItem = nIndex2;
lvi.iSubItem = 0;
lvi.lParam = 0;
ListView_InsertItem( hwndList, &lvi );
lvi.mask = LVIF_TEXT;
lvi.iItem = nIndex2;
lvi.iSubItem = 1;
lvi.pszText = szColorIndex;
ListView_SetItem( hwndList, &lvi );
//移動したキーを選択状態にする。
ListView_SetItemState( hwndList, nIndex2, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );
GetData_Regex( hwndDlg );
return TRUE;
case IDC_BUTTON_REGEX_DOWN: /* 下へ */
nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED );
if( -1 == nIndex ) return FALSE;
nIndex2 = ListView_GetItemCount(hwndList);
if( nIndex2 - 1 == nIndex ) return TRUE; //すでに最終にある。
if( nIndex2 <= 1 ) return TRUE;
nIndex2 = nIndex + 2;
ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, sizeof(szKeyWord));
ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, sizeof(szColorIndex));
//キーを追加する。
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.pszText = szKeyWord;
lvi.iItem = nIndex2;
lvi.iSubItem = 0;
lvi.lParam = 0;
ListView_InsertItem( hwndList, &lvi );
lvi.mask = LVIF_TEXT;
lvi.iItem = nIndex2;
lvi.iSubItem = 1;
lvi.pszText = szColorIndex;
ListView_SetItem( hwndList, &lvi );
//移動したキーを選択状態にする。
ListView_SetItemState( hwndList, nIndex2, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );
ListView_DeleteItem(hwndList, nIndex); //古いキーを削除
GetData_Regex( hwndDlg );
return TRUE;
case IDC_BUTTON_REGEX_IMPORT: /* インポート */
Import_Regex(hwndDlg);
m_Types.m_nRegexKeyMagicNumber++; //Need Compile //@@@ 2001.11.17 add MIK 正規表現キーワードのため
return TRUE;
case IDC_BUTTON_REGEX_EXPORT: /* エクスポート */
Export_Regex(hwndDlg);
return TRUE;
}
break;
}
break;
case WM_NOTIFY:
idCtrl = (int)wParam;
pNMHDR = (NMHDR*)lParam;
switch( pNMHDR->code ){
case PSN_HELP:
OnHelp( hwndDlg, IDD_PROP_REGEX );
return TRUE;
case PSN_KILLACTIVE:
/* ダイアログデータの取得 正規表現キーワード */
GetData_Regex( hwndDlg );
return TRUE;
//@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正
case PSN_SETACTIVE:
m_nPageNum = 3;
return TRUE;
case LVN_ITEMCHANGED:
if( pNMHDR->hwndFrom == hwndList )
{
HWND hwndCombo;
nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_SELECTED );
if( -1 == nIndex ) //削除、範囲外でクリック時反映されないバグ修正 //@@@ 2003.06.17 MIK
{
nIndex = ListView_GetNextItem( hwndList, -1, LVNI_ALL | LVNI_FOCUSED );
}
if( -1 == nIndex )
{
/* 初期値を設定する */
::SetDlgItemText( hwndDlg, IDC_EDIT_REGEX, "//k" ); /* 正規表現 */
j = 0;
k = 0;
for( i = 0; i < COLORIDX_LAST; i++ )
{
if( m_Types.m_ColorInfoArr[i].m_nColorIdx == COLORIDX_UNDERLINE )
{
k++;
continue;
}
if( m_Types.m_ColorInfoArr[i].m_nColorIdx == COLORIDX_REGEX1 ) j = i;
}
j -= k; //スキップした分を差し引く
if( j >= 0 )
{
hwndCombo = GetDlgItem( hwndDlg, IDC_COMBO_REGEX_COLOR );
::SendMessage( hwndCombo, CB_SETCURSEL, (WPARAM)j, (LPARAM)0 ); /* コンボボックスのデフォルト選択 */
}
return FALSE;
}
if( nPrevIndex != nIndex ) //@@@ 2003.03.26 MIK
{ //更新時にListViewのSubItemを正しく取得できないので、その対策
ListView_GetItemText(hwndList, nIndex, 0, szKeyWord, sizeof(szKeyWord));
ListView_GetItemText(hwndList, nIndex, 1, szColorIndex, sizeof(szColorIndex));
::SetDlgItemText( hwndDlg, IDC_EDIT_REGEX, szKeyWord ); /* 正規表現 */
hwndCombo = GetDlgItem( hwndDlg, IDC_COMBO_REGEX_COLOR );
for(i = 0, j = 0; i < COLORIDX_LAST; i++)
{
//if(strcmp(m_Types.m_ColorInfoArr[i].m_szName, "カーソル行アンダーライン") != 0)
if( m_Types.m_ColorInfoArr[i].m_nColorIdx != COLORIDX_UNDERLINE )
{
if(strcmp(m_Types.m_ColorInfoArr[i].m_szName, szColorIndex) == 0)
{
::SendMessage(hwndCombo, CB_SETCURSEL, j, 0);
break;
}
j++;
}
}
}
nPrevIndex = nIndex;
}
break;
}
break;
case WM_HELP:
{
HELPINFO *p = (HELPINFO *)lParam;
::WinHelp( (HWND)p->hItemHandle, m_szHelpFile, HELP_WM_HELP, (ULONG_PTR)(LPVOID)p_helpids );
}
return TRUE;
/*NOTREACHED*/
//break;
//Context Menu
case WM_CONTEXTMENU:
::WinHelp( hwndDlg, m_szHelpFile, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)p_helpids );
return TRUE;
}
return FALSE;
}
/* ダイアログデータの設定 正規表現キーワード */
void CPropTypes::SetData_Regex( HWND hwndDlg )
{
HWND hwndWork;
int i, nItem, j, k;
LV_ITEM lvi;
DWORD dwStyle;
/* ユーザーがエディット コントロールに入力できるテキストの長さを制限する */
::SendMessage( ::GetDlgItem( hwndDlg, IDC_EDIT_REGEX ), EM_LIMITTEXT, (WPARAM)(sizeof( m_Types.m_RegexKeywordArr[0].m_szKeyword ) - 1 ), (LPARAM)0 );
::SetDlgItemText( hwndDlg, IDC_EDIT_REGEX, "//k" ); /* 正規表現 */
/* 色種類のリスト */
hwndWork = ::GetDlgItem( hwndDlg, IDC_COMBO_REGEX_COLOR );
::SendMessage( hwndWork, CB_RESETCONTENT, (WPARAM)0, (LPARAM)0 ); /* コンボボックスを空にする */
j = 0;
k = 0;
for( i = 0; i < COLORIDX_LAST; i++ )
{
//if( strcmp(m_Types.m_ColorInfoArr[i].m_szName, "カーソル行アンダーライン") == 0 )
if( m_Types.m_ColorInfoArr[i].m_nColorIdx == COLORIDX_UNDERLINE )
{
k++;
continue;
}
nItem = ::SendMessage( hwndWork, CB_ADDSTRING, (WPARAM)0, (LPARAM)(char*)m_Types.m_ColorInfoArr[i].m_szName );
//if( strcmp(m_Types.m_ColorInfoArr[i].m_szName, "正規表現キーワード1") == 0 ) j = i;
if( m_Types.m_ColorInfoArr[i].m_nColorIdx == COLORIDX_REGEX1 ) j = i;
}
j -= k; //スキップした分を差し引く
if( j >= 0 )
::SendMessage( hwndWork, CB_SETCURSEL, (WPARAM)j, (LPARAM)0 ); /* コンボボックスのデフォルト選択 */
if( m_Types.m_bUseRegexKeyword )
CheckDlgButton( hwndDlg, IDC_CHECK_REGEX, BST_CHECKED );
else
CheckDlgButton( hwndDlg, IDC_CHECK_REGEX, BST_UNCHECKED );
/* リスト */
hwndWork = ::GetDlgItem( hwndDlg, IDC_LIST_REGEX );
ListView_DeleteAllItems(hwndWork); /* リストを空にする */
/* 行選択 */
dwStyle = (DWORD)::SendMessage( hwndWork, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0 );
dwStyle |= LVS_EX_FULLROWSELECT;
::SendMessage( hwndWork, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, dwStyle );
/* データ表示 */
for(i = 0; i < MAX_REGEX_KEYWORD; i++)
{
if( m_Types.m_RegexKeywordArr[i].m_szKeyword[0] == '\0' ) break;
lvi.mask = LVIF_TEXT | LVIF_PARAM;
lvi.pszText = m_Types.m_RegexKeywordArr[i].m_szKeyword;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.lParam = 0; //m_Types.m_RegexKeywordArr[i].m_nColorIndex;
ListView_InsertItem( hwndWork, &lvi );
lvi.mask = LVIF_TEXT;
lvi.iItem = i;
lvi.iSubItem = 1;
lvi.pszText = m_Types.m_ColorInfoArr[m_Types.m_RegexKeywordArr[i].m_nColorIndex].m_szName;
ListView_SetItem( hwndWork, &lvi );
}
ListView_SetItemState( hwndWork, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED );
return;
}
/* ダイアログデータの取得 正規表現キーワード */
int CPropTypes::GetData_Regex( HWND hwndDlg )
{
HWND hwndList;
int nIndex, i, j;
char szKeyWord[256], szColorIndex[256];
//@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正
// //自分のページ番号
// m_nPageNum = 3;
//使用する?使用しない
if( IsDlgButtonChecked( hwndDlg, IDC_CHECK_REGEX ) )
m_Types.m_bUseRegexKeyword = TRUE;
else
m_Types.m_bUseRegexKeyword = FALSE;
//リストに登録されている情報を配列に取り込む
hwndList = GetDlgItem( hwndDlg, IDC_LIST_REGEX );
nIndex = ListView_GetItemCount(hwndList);
for(i = 0; i < MAX_REGEX_KEYWORD; i++)
{
if( i < nIndex )
{
szKeyWord[0] = '\0';
szColorIndex[0] = '\0';
ListView_GetItemText(hwndList, i, 0, szKeyWord, sizeof(szKeyWord) );
ListView_GetItemText(hwndList, i, 1, szColorIndex, sizeof(szColorIndex));
strcpy(m_Types.m_RegexKeywordArr[i].m_szKeyword, szKeyWord);
//色指定文字列を番号に変換する
m_Types.m_RegexKeywordArr[i].m_nColorIndex = COLORIDX_REGEX1;
for(j = 0; j < COLORIDX_LAST; j++)
{
if(strcmp(m_Types.m_ColorInfoArr[j].m_szName, szColorIndex) == 0)
{
m_Types.m_RegexKeywordArr[i].m_nColorIndex = j;
break;
}
}
}
else //未登録部分はクリアする
{
m_Types.m_RegexKeywordArr[i].m_szKeyword[0] = '\0';
m_Types.m_RegexKeywordArr[i].m_nColorIndex = COLORIDX_REGEX1;
}
}
//タイプ設定の変更があった
m_Types.m_nRegexKeyMagicNumber++;
// m_Types.m_nRegexKeyMagicNumber = 0; //Not Compiled.
return TRUE;
}
BOOL CPropTypes::RegexKakomiCheck(const char *s)
{
const char *p;
int length, i;
static const char *kakomi[7 * 2] = {
"/", "/k",
"m/", "/k",
"m#", "#k",
"/", "/ki",
"m/", "/ki",
"m#", "#ki",
NULL, NULL,
};
length = strlen(s);
for(i = 0; kakomi[i] != NULL; i += 2)
{
//文字長を確かめる
if( length > (int)strlen(kakomi[i]) + (int)strlen(kakomi[i+1]) )
{
//始まりを確かめる
if( strncmp(kakomi[i], s, strlen(kakomi[i])) == 0 )
{
//終わりを確かめる
p = &s[length - strlen(kakomi[i+1])];
if( strcmp(p, kakomi[i+1]) == 0 )
{
//正常
return TRUE;
}
}
}
}
return FALSE;
}
//@@@ 2001.11.17 add end MIK
/*[EOF]*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -