/* 文字列置換 */ void CNativeA::Replace( const char* pszFrom, const char* pszTo ) { CNativeA cmemWork; int nFromLen = strlen( pszFrom ); int nToLen = strlen( pszTo ); int nBgnOld = 0; int nBgn = 0; while( nBgn <= GetStringLength() - nFromLen ){ if( 0 == auto_memcmp( &GetStringPtr()[nBgn], pszFrom, nFromLen ) ){ if( 0 < nBgn - nBgnOld ){ cmemWork.AppendString( &GetStringPtr()[nBgnOld], nBgn - nBgnOld ); } cmemWork.AppendString( pszTo, nToLen ); nBgn = nBgn + nFromLen; nBgnOld = nBgn; }else{ nBgn++; } } if( 0 < GetStringLength() - nBgnOld ){ cmemWork.AppendString( &GetStringPtr()[nBgnOld], GetStringLength() - nBgnOld ); } SetNativeData( cmemWork ); return; }
void CHokanMgr::HokanSearchByKeyword( const wchar_t* pszCurWord, bool bHokanLoHiCase, vector_ex<std::wstring>& vKouho ){ const CEditView* pcEditView = reinterpret_cast<const CEditView*>(m_lParam); const STypeConfig& type = pcEditView->GetDocument()->m_cDocType.GetDocumentAttribute(); CKeyWordSetMgr& keywordMgr = m_pShareData->m_Common.m_sSpecialKeyword.m_CKeyWordSetMgr; const int nKeyLen = wcslen(pszCurWord); for( int n = 0; n < MAX_KEYWORDSET_PER_TYPE; n++ ){ int kwdset = type.m_nKeyWordSetIdx[n]; if( kwdset == -1 ){ continue; } const int keyCount = keywordMgr.GetKeyWordNum(kwdset); for(int i = 0; i < keyCount; i++){ const wchar_t* word = keywordMgr.GetKeyWord(kwdset,i); int nRet; if( bHokanLoHiCase ){ nRet = auto_memicmp(pszCurWord, word, nKeyLen ); }else{ nRet = auto_memcmp(pszCurWord, word, nKeyLen ); } if( nRet != 0 ){ continue; } std::wstring strWord = std::wstring(word); AddKouhoUnique(vKouho, strWord); } } }
/* Keybind メッセージ処理 */ INT_PTR CPropKeybind::DispatchEvent( HWND hwndDlg, // handle to dialog box UINT uMsg, // message WPARAM wParam, // first message parameter LPARAM lParam // second message parameter ) { WORD wNotifyCode; WORD wID; HWND hwndCtl; NMHDR* pNMHDR; static HWND hwndCombo; static HWND hwndFuncList; static HWND hwndKeyList; static HWND hwndCheckShift; static HWND hwndCheckCtrl; static HWND hwndCheckAlt; static HWND hwndAssignedkeyList; // static HWND hwndLIST_KEYSFUNC; static HWND hwndEDIT_KEYSFUNC; // int nLength; int nAssignedKeyNum; int nIndex; int nIndex2; int nIndex3; int i; int j; EFunctionCode nFuncCode; static WCHAR pszLabel[256]; switch( uMsg ){ case WM_INITDIALOG: /* ダイアログデータの設定 Keybind */ SetData( hwndDlg ); // Modified by KEITA for WIN64 2003.9.6 ::SetWindowLongPtr( hwndDlg, DWLP_USER, lParam ); /* コントロールのハンドルを取得 */ hwndCombo = ::GetDlgItem( hwndDlg, IDC_COMBO_FUNCKIND ); hwndFuncList = ::GetDlgItem( hwndDlg, IDC_LIST_FUNC ); hwndAssignedkeyList = ::GetDlgItem( hwndDlg, IDC_LIST_ASSIGNEDKEYS ); hwndCheckShift = ::GetDlgItem( hwndDlg, IDC_CHECK_SHIFT ); hwndCheckCtrl = ::GetDlgItem( hwndDlg, IDC_CHECK_CTRL ); hwndCheckAlt = ::GetDlgItem( hwndDlg, IDC_CHECK_ALT ); hwndKeyList = ::GetDlgItem( hwndDlg, IDC_LIST_KEY ); // hwndLIST_KEYSFUNC = ::GetDlgItem( hwndDlg, IDC_LIST_KEYSFUNC ); hwndEDIT_KEYSFUNC = ::GetDlgItem( hwndDlg, IDC_EDIT_KEYSFUNC ); /* キー選択時の処理 */ // From Here Oct. 14, 2000 JEPRO わかりにくいので選択しないように変更 //Oct. 17, 2000 JEPRO 復活! // /* キーリストの先頭の項目を選択(リストボックス)*/ List_SetCurSel( hwndKeyList, 0 ); //Oct. 14, 2000 JEPRO ここをコメントアウトすると先頭項目が選択されなくなる ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); //Oct. 14, 2000 JEPRO ここはどっちでもいい?(わからん) // To Here Oct. 14, 2000 ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCombo ); ::SetTimer( hwndDlg, 1, 300, NULL ); // 2007.11.02 ryoji return TRUE; case WM_NOTIFY: pNMHDR = (NMHDR*)lParam; switch( pNMHDR->code ){ case PSN_HELP: // OnHelp( hwndDlg, IDD_PROP1P5 ); // Sept. 9, 2000 JEPRO 実際のID名に変更 OnHelp( hwndDlg, IDD_PROP_KEYBIND ); return TRUE; case PSN_KILLACTIVE: // MYTRACE( _T("Keybind PSN_KILLACTIVE\n") ); /* ダイアログデータの取得 Keybind */ GetData( hwndDlg ); return TRUE; //@@@ 2002.01.03 YAZAKI 最後に表示していたシートを正しく覚えていないバグ修正 case PSN_SETACTIVE: m_nPageNum = ID_PROPCOM_PAGENUM_KEYBOARD; // 表示を更新する(マクロ設定画面でのマクロ名変更を反映) // 2007.11.02 ryoji nIndex = List_GetCurSel( hwndKeyList ); nIndex2 = Combo_GetCurSel( hwndCombo ); nIndex3 = List_GetCurSel( hwndFuncList ); if( nIndex != LB_ERR ){ ::SendMessageAny( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); } if( nIndex2 != CB_ERR ){ ::SendMessageAny( hwndDlg, WM_COMMAND, MAKEWPARAM( IDC_COMBO_FUNCKIND, CBN_SELCHANGE ), (LPARAM)hwndCombo ); if( nIndex3 != LB_ERR ){ List_SetCurSel( hwndFuncList, nIndex3 ); } } return TRUE; } break; case WM_COMMAND: wNotifyCode = HIWORD(wParam); /* 通知コード */ wID = LOWORD(wParam); /* 項目ID、 コントロールID、 またはアクセラレータID */ hwndCtl = (HWND) lParam; /* コントロールのハンドル */ switch( wNotifyCode ){ /* ボタン/チェックボックスがクリックされた */ case BN_CLICKED: switch( wID ){ case IDC_BUTTON_IMPORT: /* インポート */ /* Keybind:キー割り当て設定をインポートする */ Import( hwndDlg ); return TRUE; case IDC_BUTTON_EXPORT: /* エクスポート */ /* Keybind:キー割り当て設定をエクスポートする */ Export( hwndDlg ); return TRUE; case IDC_BUTTON_ASSIGN: /* 割付 */ nIndex = List_GetCurSel( hwndKeyList ); nIndex2 = Combo_GetCurSel( hwndCombo ); nIndex3 = List_GetCurSel( hwndFuncList ); if( nIndex == LB_ERR || nIndex2 == CB_ERR || nIndex3 == LB_ERR ){ return TRUE; } nFuncCode = m_cLookup.Pos2FuncCode( nIndex2, nIndex3 ); // Oct. 2, 2001 genta i = 0; if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_SHIFT ) ){ i |= _SHIFT; } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_CTRL ) ){ i |= _CTRL; } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_ALT ) ){ i |= _ALT; } m_Common.m_sKeyBind.m_pKeyNameArr[nIndex].m_nFuncCodeArr[i] = nFuncCode; ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_FUNC, LBN_SELCHANGE ), (LPARAM)hwndFuncList ); return TRUE; case IDC_BUTTON_RELEASE: /* 解除 */ nIndex = List_GetCurSel( hwndKeyList ); if( nIndex == LB_ERR ){ return TRUE; } nFuncCode = F_DEFAULT; i = 0; if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_SHIFT ) ){ i |= _SHIFT; } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_CTRL ) ){ i |= _CTRL; } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_ALT ) ){ i |= _ALT; } m_Common.m_sKeyBind.m_pKeyNameArr[nIndex].m_nFuncCodeArr[i] = nFuncCode; ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_FUNC, LBN_SELCHANGE ), (LPARAM)hwndFuncList ); return TRUE; } break; /* BN_CLICKED */ } if( hwndCheckShift == hwndCtl || hwndCheckCtrl == hwndCtl || hwndCheckAlt == hwndCtl ){ switch( wNotifyCode ){ case BN_CLICKED: ChangeKeyList( hwndDlg ); return TRUE; } }else if( hwndKeyList == hwndCtl ){ switch( wNotifyCode ){ case LBN_SELCHANGE: nIndex = List_GetCurSel( hwndKeyList ); i = 0; if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_SHIFT ) ){ i |= _SHIFT; } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_CTRL ) ){ i |= _CTRL; } if( ::IsDlgButtonChecked( hwndDlg, IDC_CHECK_ALT ) ){ i |= _ALT; } nFuncCode = m_Common.m_sKeyBind.m_pKeyNameArr[nIndex].m_nFuncCodeArr[i]; // Oct. 2, 2001 genta // 2007.11.02 ryoji F_DISABLEなら未割付 if( nFuncCode == F_DISABLE ){ auto_strncpy( pszLabel, LSW(STR_PROPCOMKEYBIND_UNASSIGN), _countof(pszLabel) - 1 ); pszLabel[_countof(pszLabel) - 1] = L'\0'; }else{ m_cLookup.Funccode2Name( nFuncCode, pszLabel, 255 ); } Wnd_SetText( hwndEDIT_KEYSFUNC, pszLabel ); return TRUE; } }else if( hwndFuncList == hwndCtl ){ switch( wNotifyCode ){ case LBN_SELCHANGE: nIndex = List_GetCurSel( hwndKeyList ); nIndex2 = Combo_GetCurSel( hwndCombo ); nIndex3 = List_GetCurSel( hwndFuncList ); nFuncCode = m_cLookup.Pos2FuncCode( nIndex2, nIndex3 ); // Oct. 2, 2001 genta /* 機能に対応するキー名の取得(複数) */ CNativeT** ppcAssignedKeyList; nAssignedKeyNum = CKeyBind::GetKeyStrList( /* 機能に対応するキー名の取得(複数) */ G_AppInstance(), m_Common.m_sKeyBind.m_nKeyNameArrNum, (KEYDATA*)m_Common.m_sKeyBind.m_pKeyNameArr, &ppcAssignedKeyList, nFuncCode, FALSE // 2007.02.22 ryoji デフォルト機能は取得しない ); /* 割り当てキーリストをクリアして値の設定 */ List_ResetContent( hwndAssignedkeyList ); if( 0 < nAssignedKeyNum){ for( j = 0; j < nAssignedKeyNum; ++j ){ /* デバッグモニタに出力 */ const TCHAR* cpszString = ppcAssignedKeyList[j]->GetStringPtr(); ::List_AddString( hwndAssignedkeyList, cpszString ); delete ppcAssignedKeyList[j]; } delete [] ppcAssignedKeyList; } return TRUE; } }else if( hwndCombo == hwndCtl){ switch( wNotifyCode ){ case CBN_SELCHANGE: nIndex2 = Combo_GetCurSel( hwndCombo ); /* 機能一覧に文字列をセット(リストボックス)*/ m_cLookup.SetListItem( hwndFuncList, nIndex2 ); // Oct. 2, 2001 genta return TRUE; } //@@@ 2001.11.08 add start MIK }else if( hwndAssignedkeyList == hwndCtl){ switch( wNotifyCode ){ case LBN_SELCHANGE: //case LBN_DBLCLK: { TCHAR buff[1024], *p; int ret; nIndex = List_GetCurSel( hwndAssignedkeyList ); auto_memset(buff, 0, _countof(buff)); ret = List_GetText( hwndAssignedkeyList, nIndex, buff); if( ret != LB_ERR ) { i = 0; p = buff; //SHIFT if( auto_memcmp(p, STR_SHIFT_PLUS, _tcslen(STR_SHIFT_PLUS)) == 0 ){ p += _tcslen(STR_SHIFT_PLUS); i |= _SHIFT; } //CTRL if( auto_memcmp(p, STR_CTRL_PLUS, _tcslen(STR_CTRL_PLUS)) == 0 ){ p += _tcslen(STR_CTRL_PLUS); i |= _CTRL; } //ALT if( auto_memcmp(p, STR_ALT_PLUS, _tcslen(STR_ALT_PLUS)) == 0 ){ p += _tcslen(STR_ALT_PLUS); i |= _ALT; } for(j = 0; j < m_Common.m_sKeyBind.m_nKeyNameArrNum; j++) { if( _tcscmp(m_Common.m_sKeyBind.m_pKeyNameArr[j].m_szKeyName, p) == 0 ) { List_SetCurSel( hwndKeyList, j); if( i & _SHIFT ) ::CheckDlgButton( hwndDlg, IDC_CHECK_SHIFT, BST_CHECKED ); //チェック else ::CheckDlgButton( hwndDlg, IDC_CHECK_SHIFT, BST_UNCHECKED ); //チェックをはずす if( i & _CTRL ) ::CheckDlgButton( hwndDlg, IDC_CHECK_CTRL, BST_CHECKED ); //チェック else ::CheckDlgButton( hwndDlg, IDC_CHECK_CTRL, BST_UNCHECKED ); //チェックをはずす if( i & _ALT ) ::CheckDlgButton( hwndDlg, IDC_CHECK_ALT, BST_CHECKED ); //チェック else ::CheckDlgButton( hwndDlg, IDC_CHECK_ALT, BST_UNCHECKED ); //チェックをはずす ::SendMessageCmd( hwndDlg, WM_COMMAND, MAKELONG( IDC_LIST_KEY, LBN_SELCHANGE ), (LPARAM)hwndKeyList ); // キー一覧の文字列も変更 ChangeKeyList( hwndDlg ); break; } } } return TRUE; } } //@@@ 2001.11.08 add end MIK } break; case WM_TIMER: // ボタンの有効/無効を切り替える // 2007.11.02 ryoji nIndex = List_GetCurSel( hwndKeyList ); nIndex2 = Combo_GetCurSel( hwndCombo ); nIndex3 = List_GetCurSel( hwndFuncList ); ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_ASSIGN ), !( LB_ERR == nIndex || nIndex2 == CB_ERR || nIndex3 == LB_ERR ) ); ::EnableWindow( ::GetDlgItem( hwndDlg, IDC_BUTTON_RELEASE ), !( LB_ERR == nIndex ) ); break; case WM_DESTROY: ::KillTimer( hwndDlg, 1 ); // 2007.11.02 ryoji break; //@@@ 2001.02.04 Start by MIK: Popup Help case WM_HELP: { HELPINFO *p = (HELPINFO *)lParam; MyWinHelp( (HWND)p->hItemHandle, HELP_WM_HELP, (ULONG_PTR)(LPVOID)p_helpids ); // 2006.10.10 ryoji MyWinHelpに変更に変更 } return TRUE; /*NOTREACHED*/ //break; //@@@ 2001.02.04 End //@@@ 2001.11.07 Start by MIK: Context Menu Help //Context Menu case WM_CONTEXTMENU: MyWinHelp( hwndDlg, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)p_helpids ); // 2006.10.10 ryoji MyWinHelpに変更に変更 return TRUE; //@@@ 2001.11.07 End } return FALSE; }