📄 ceditwnd.cpp
字号:
::SendMessage( m_hwndSearchBox, CB_LIMITTEXT, (WPARAM)_MAX_PATH - 1, 0 );
//拡張インタフェース
//::SendMessage( m_hwndSearchBox, CB_SETEXTENDEDUI, (WPARAM)(BOOL)TRUE, 0 );
//検索ボックスを更新
::SendMessage( m_hwndSearchBox, CB_RESETCONTENT, 0, 0 );
for( my_i = 0; my_i < m_pShareData->m_nSEARCHKEYArrNum; my_i++ )
{
::SendMessage( m_hwndSearchBox, CB_ADDSTRING, 0, (LPARAM)m_pShareData->m_szSEARCHKEYArr[my_i] );
}
::SendMessage( m_hwndSearchBox, CB_SETCURSEL, 0, 0 );
}
break;
default:
//width = 0;
//my_hwnd = NULL;
//my_font = NULL;
break;
}
}
break;
case TBSTYLE_BUTTON: //ボタン
case TBSTYLE_SEP: //セパレータ
default:
::SendMessage( m_hwndToolBar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbb );
count++;
break;
}
//@@@ 2002.06.15 MIK end
}
if( m_pShareData->m_Common.m_bToolBarIsFlat ){ /* フラットツールバーにする/しない */
uToolType = (UINT)::GetWindowLong(m_hwndToolBar, GWL_STYLE);
uToolType |= (TBSTYLE_FLAT);
::SetWindowLong(m_hwndToolBar, GWL_STYLE, uToolType);
::InvalidateRect(m_hwndToolBar, NULL, TRUE);
}
}
return;
}
void CEditWnd::DestroyToolBar( void )
{
if( m_hwndToolBar )
{
if( m_hwndSearchBox )
{
if( m_fontSearchBox )
{
::DeleteObject( m_fontSearchBox );
m_fontSearchBox = NULL;
}
::DestroyWindow( m_hwndSearchBox );
m_hwndSearchBox = NULL;
m_nCurrentFocus = 0;
}
::DestroyWindow( m_hwndToolBar );
m_hwndToolBar = NULL;
//if( m_cTabWnd.m_hWnd ) ::UpdateWindow( m_cTabWnd.m_hWnd );
//if( m_CFuncKeyWnd.m_hWnd ) ::UpdateWindow( m_CFuncKeyWnd.m_hWnd );
}
return;
}
//複数プロセス版
/* メッセージループ */
void CEditWnd::MessageLoop( void )
{
MSG msg;
int ret;
//2004.02.17 Moca GetMessageのエラーチェック
while ( NULL != m_hWnd && ( ret = GetMessage( &msg, NULL, 0, 0 ) ) ){
if( ret == -1 ){
break;
}
//@@@ 2002.01.14 YAZAKI 印刷プレビューをCPrintPreviewに独立させたことによる変更
if( m_pPrintPreview && NULL != m_pPrintPreview->GetPrintPreviewBarHANDLE() && ::IsDialogMessage( m_pPrintPreview->GetPrintPreviewBarHANDLE(), &msg ) ){ /* 印刷プレビュー 操作バー */
}else
if( NULL != m_cEditDoc.m_cDlgFind.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgFind.m_hWnd, &msg ) ){ /* 「検索」ダイアログ */
}else
if( NULL != m_cEditDoc.m_cDlgFuncList.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgFuncList.m_hWnd, &msg ) ){ /* 「アウトライン」ダイアログ */
}else
if( NULL != m_cEditDoc.m_cDlgReplace.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgReplace.m_hWnd, &msg ) ){ /* 「置換」ダイアログ */
}else
if( NULL != m_cEditDoc.m_cDlgGrep.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cDlgGrep.m_hWnd, &msg ) ){ /* 「Grep」ダイアログ */
}else
if( NULL != m_cEditDoc.m_cHokanMgr.m_hWnd && ::IsDialogMessage( m_cEditDoc.m_cHokanMgr.m_hWnd, &msg ) ){ /* 「入力補完」 */
}else
if( NULL != m_hwndSearchBox && ::IsDialogMessage( m_hwndSearchBox, &msg ) ){ /* 「検索ボックス」 */
ProcSearchBox( &msg );
}else
{
if( NULL != m_pShareData->m_hAccel ){
if( TranslateAccelerator( msg.hwnd, m_pShareData->m_hAccel, &msg ) ){
}else{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}else{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
}
return;
}
LRESULT CEditWnd::DispatchEvent(
HWND hwnd, // handle of window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
int nRet;
int idCtrl;
LPNMHDR pnmh;
LPTOOLTIPTEXT lptip;
int nPane;
FileInfo* pfi;
WORD fActive;
BOOL fMinimized;
HWND hwndTarget;
HWND hwndActive;
BOOL bIsActive;
int nCaretPosX;
int nCaretPosY;
POINT* ppoCaret;
LPHELPINFO lphi;
const char* pLine;
int nLineLen;
UINT idCtl; /* コントロールのID */
MEASUREITEMSTRUCT* lpmis;
LPDRAWITEMSTRUCT lpdis; /* 項目描画情報 */
int nItemWidth;
int nItemHeight;
UINT uItem;
UINT fuFlags;
HMENU hmenu;
const char* pszItemStr;
LRESULT lRes;
switch( uMsg ){
case WM_PAINTICON:
// MYTRACE( "WM_PAINTICON\n" );
return 0;
case WM_ICONERASEBKGND:
// MYTRACE( "WM_ICONERASEBKGND\n" );
return 0;
case WM_LBUTTONDOWN:
return OnLButtonDown( wParam, lParam );
case WM_MOUSEMOVE:
return OnMouseMove( wParam, lParam );
case WM_LBUTTONUP:
return OnLButtonUp( wParam, lParam );
case WM_MOUSEWHEEL:
return OnMouseWheel( wParam, lParam );
case WM_HSCROLL:
return OnHScroll( wParam, lParam );
case WM_VSCROLL:
return OnVScroll( wParam, lParam );
case WM_MENUCHAR:
/* メニューアクセスキー押下時の処理(WM_MENUCHAR処理) */
return m_CMenuDrawer.OnMenuChar( hwnd, uMsg, wParam, lParam );
case WM_MENUSELECT:
if( NULL == m_hwndStatusBar ){
return 1;
}
uItem = (UINT) LOWORD(wParam); // menu item or submenu index
fuFlags = (UINT) HIWORD(wParam); // menu flags
hmenu = (HMENU) lParam; // handle to menu clicked
{
/* メニュー機能のテキストをセット */
CMemory cmemWork;
pszItemStr = "";
/* 機能に対応するキー名の取得(複数) */
CMemory** ppcAssignedKeyList;
int nAssignedKeyNum;
int j;
nAssignedKeyNum = CKeyBind::GetKeyStrList(
m_hInstance, m_pShareData->m_nKeyNameArrNum,
(KEYDATA*)m_pShareData->m_pKeyNameArr, &ppcAssignedKeyList, uItem
);
if( 0 < nAssignedKeyNum ){
for( j = 0; j < nAssignedKeyNum; ++j ){
if( j > 0 ){
cmemWork.AppendSz( " , " );
}
cmemWork.Append( ppcAssignedKeyList[j] );
delete ppcAssignedKeyList[j];
}
delete [] ppcAssignedKeyList;
}
pszItemStr = cmemWork.GetPtr();
::SendMessage( m_hwndStatusBar, SB_SETTEXT, 0 | SBT_NOBORDERS, (LPARAM) (LPINT)pszItemStr );
}
return 0;
case WM_DRAWITEM:
idCtl = (UINT) wParam; /* コントロールのID */
lpdis = (DRAWITEMSTRUCT*) lParam; /* 項目描画情報 */
if( IDW_STATUSBAR == idCtl ){
if( 5 == lpdis->itemID ){ // 2003.08.26 Moca idがずれて作画されなかった
int nColor;
if( m_pShareData->m_bRecordingKeyMacro /* キーボードマクロの記録中 */
&& m_pShareData->m_hwndRecordingKeyMacro == m_hWnd /* キーボードマクロを記録中のウィンドウ */
){
nColor = COLOR_BTNTEXT;
}else{
nColor = COLOR_3DSHADOW;
}
::SetTextColor( lpdis->hDC, ::GetSysColor( nColor ) );
::SetBkMode( lpdis->hDC, TRANSPARENT );
// 2003.08.26 Moca 上下中央位置に作画
TEXTMETRIC tm;
::GetTextMetrics( lpdis->hDC, &tm );
int y = ( lpdis->rcItem.bottom - lpdis->rcItem.top - tm.tmHeight + 1 ) / 2 + lpdis->rcItem.top;
::TextOut( lpdis->hDC, lpdis->rcItem.left, y, "REC", lstrlen( "REC" ) );
if( COLOR_BTNTEXT == nColor ){
::TextOut( lpdis->hDC, lpdis->rcItem.left + 1, y, "REC", lstrlen( "REC" ) );
}
}
return 0;
}else{
switch( lpdis->CtlType ){
case ODT_MENU: /* オーナー描画メニュー */
/* メニューアイテム描画 */
m_CMenuDrawer.DrawItem( lpdis );
return TRUE;
}
}
return FALSE;
case WM_MEASUREITEM:
idCtl = (UINT) wParam; // control identifier
lpmis = (MEASUREITEMSTRUCT*) lParam; // item-size information
switch( lpmis->CtlType ){
case ODT_MENU: /* オーナー描画メニュー */
// CMenuDrawer* pCMenuDrawer;
// pCMenuDrawer = (CMenuDrawer*)lpmis->itemData;
// MYTRACE( "WM_MEASUREITEM lpmis->itemID=%d\n", lpmis->itemID );
/* メニューアイテムの描画サイズを計算 */
nItemWidth = m_CMenuDrawer.MeasureItem( lpmis->itemID, &nItemHeight );
if( -1 == nItemWidth ){
}else{
lpmis->itemWidth = nItemWidth;
lpmis->itemHeight = nItemHeight;
}
return TRUE;
}
return FALSE;
case WM_PAINT:
return OnPaint( hwnd, uMsg, wParam, lParam );
case WM_PASTE:
return m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].HandleCommand( F_PASTE, TRUE, 0, 0, 0, 0 );
case WM_COPY:
return m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].HandleCommand( F_COPY, TRUE, 0, 0, 0, 0 );
case WM_HELP:
lphi = (LPHELPINFO) lParam;
switch( lphi->iContextType ){
case HELPINFO_MENUITEM:
OnHelp_MenuItem( hwnd, lphi->iCtrlId );
break;
}
return TRUE;
// Jun. 2, 2000 genta
case WM_ACTIVATEAPP:
fActive = LOWORD(wParam); // activation flag
if( fActive ){
::SetFocus( m_hWnd );
}
return 0; // should return zero. / Jun. 23, 2000 genta
case WM_ACTIVATE:
fActive = LOWORD( wParam ); // activation flag
fMinimized = (BOOL) HIWORD( wParam ); // minimized flag
hwndTarget = (HWND) lParam; // window handle
// MYTRACE( "WM_ACTIVATE " );
switch( fActive ){
case WA_ACTIVE:
// MYTRACE( " WA_ACTIVE\n" );
bIsActive = TRUE;
break;
case WA_CLICKACTIVE:
// MYTRACE( " WA_CLICKACTIVE\n" );
bIsActive = TRUE;
break;
case WA_INACTIVE:
// MYTRACE( " WA_INACTIVE\n" );
bIsActive = FALSE;
break;
}
if( !bIsActive ){
hwndActive = hwndTarget;
while( hwndActive != NULL ){
hwndActive = ::GetParent( hwndActive );
if( hwndActive == m_hWnd ){
bIsActive = TRUE;
break;
}
}
}
if( !bIsActive ){
if( m_hWnd == ::GetWindow( hwndTarget, GW_OWNER ) ){
bIsActive = TRUE;
}
}
m_cEditDoc.SetParentCaption( !bIsActive );
return DefWindowProc( hwnd, uMsg, wParam, lParam );
case WM_SIZE:
// MYTRACE( "WM_SIZE\n" );
/* WM_SIZE 処理 */
if( SIZE_MINIMIZED == wParam ){
m_cEditDoc.SetParentCaption();
}
return OnSize( wParam, lParam );
//From here 2003.05.31 MIK
case WM_MOVE:
m_pShareData->m_TabWndWndpl.length = sizeof( m_pShareData->m_TabWndWndpl );
::GetWindowPlacement( m_hWnd, &(m_pShareData->m_TabWndWndpl) );
// From Here 2004.05.13 Moca ウィンドウ位置継承
// 最後の位置を復元するため,移動されるたびに共有メモリに位置を保存する.
if( WINSIZEMODE_SAVE == m_pShareData->m_Common.m_nSaveWindowPos ){
if( SW_MAXIMIZE != m_pShareData->m_TabWndWndpl.showCmd &&
SW_SHOWMINIMIZED != m_pShareData->m_TabWndWndpl.showCmd ){
m_pShareData->m_Common.m_nWinPosX = m_pShareData->m_TabWndWndpl.rcNormalPosition.left;
m_pShareData->m_Common.m_nWinPosY = m_pShareData->m_TabWndWndpl.rcNormalPosition.top;
}
}
// To Here 2004.05.13 Moca ウィンドウ位置継承
return DefWindowProc( hwnd, uMsg, wParam, lParam );
//To here 2003.05.31 MIK
/*
//From here 2003.06.25 MIK
case WM_SYSCOMMAND:
switch( wParam )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -