📄 csharedata.cpp
字号:
// }
// }
// m_pShareData->m_pEditArr[0].m_hWnd = hWnd;
int nSubCommand = TWNT_ADD;
int nIndex;
CRecent cRecentEditNode;
EditNode MyEditNode;
EditNode *p;
memset( &MyEditNode, 0, sizeof( MyEditNode ) );
MyEditNode.m_hWnd = hWnd;
cRecentEditNode.EasyCreate( RECENT_FOR_EDITNODE );
//登録済みか?
if( -1 != (nIndex = cRecentEditNode.FindItem( (const char*)&hWnd ) ) )
{
//もうこれ以上登録できないか?
if( cRecentEditNode.GetItemCount() >= cRecentEditNode.GetArrayCount() )
{
cRecentEditNode.Terminate();
return FALSE;
}
nSubCommand = TWNT_ORDER;
//以前の情報をコピーする。
p = (EditNode*)cRecentEditNode.GetItem( nIndex );
if( p )
{
memcpy( &MyEditNode, p, sizeof( MyEditNode ) );
}
}
/* ウィンドウ連番 */
if( 0 == ::GetWindowLongPtr( hWnd, sizeof(LONG_PTR) ) )
{
m_pShareData->m_nSequences++;
::SetWindowLongPtr( hWnd, sizeof(LONG_PTR) , (LONG_PTR)m_pShareData->m_nSequences );
//連番を更新する。
MyEditNode.m_nIndex = m_pShareData->m_nSequences;
}
//追加または先頭に移動する。
cRecentEditNode.AppendItem( (const char*)&MyEditNode );
cRecentEditNode.Terminate();
//ウインドウ登録メッセージをブロードキャストする。
PostMessageToAllEditors( MYWM_TAB_WINDOW_NOTIFY, (WPARAM)nSubCommand, (LPARAM)hWnd, hWnd );
return TRUE;
}
/*! 編集ウィンドウリストからの削除
@date 2003.06.28 MIK CRecent利用で書き換え
*/
void CShareData::DeleteEditWndList( HWND hWnd )
{
// int i;
// int j;
//
// /* ウィンドウハンドルの検索 */
// for( i = 0; i < m_pShareData->m_nEditArrNum; ++i ){
// if( hWnd == m_pShareData->m_pEditArr[i].m_hWnd ){
// break;
// }
// }
// if( i >= m_pShareData->m_nEditArrNum ){
// return;
// }
// for( j = i; j < m_pShareData->m_nEditArrNum - 1; ++j ){
// m_pShareData->m_pEditArr[j] = m_pShareData->m_pEditArr[j + 1];
// }
// m_pShareData->m_nEditArrNum--;
//ウインドウをリストから削除する。
CRecent cRecentEditNode;
cRecentEditNode.EasyCreate( RECENT_FOR_EDITNODE );
cRecentEditNode.DeleteItem( (const char*)&hWnd );
cRecentEditNode.Terminate();
//ウインドウ削除メッセージをブロードキャストする。
PostMessageToAllEditors( MYWM_TAB_WINDOW_NOTIFY, (WPARAM)TWNT_DEL, (LPARAM)hWnd, hWnd );
return;
}
/* 共有データのロード */
BOOL CShareData::LoadShareData( void )
{
return ShareData_IO_2( true );
}
/* 共有データの保存 */
void CShareData::SaveShareData( void )
{
ShareData_IO_2( false );
return;
}
/* 全編集ウィンドウへ終了要求を出す */
BOOL CShareData::RequestCloseAllEditor( void )
{
HWND* phWndArr;
int i;
int j;
j = m_pShareData->m_nEditArrNum;
if( 0 == j ){
return TRUE;
}
phWndArr = new HWND[j];
for( i = 0; i < j; ++i ){
phWndArr[i] = m_pShareData->m_pEditArr[i].m_hWnd;
}
for( i = 0; i < j; ++i ){
if( IsEditWnd( phWndArr[i] ) ){
/* ウィンドウをアクティブにする */
/* アクティブにする */
ActivateFrameWindow( phWndArr[i] );
/* トレイからエディタへの終了要求 */
if( !::SendMessage( phWndArr[i], MYWM_CLOSE, 0, 0 ) ){
delete [] phWndArr;
return FALSE;
}
}
}
delete [] phWndArr;
return TRUE;
}
/* 指定ファイルが開かれているか調べる */
/* 開かれている場合は開いているウィンドウのハンドルも返す */
BOOL CShareData::IsPathOpened( const char* pszPath, HWND* phwndOwner )
{
int i;
FileInfo* pfi;
*phwndOwner = NULL;
/* 現在の編集ウィンドウの数を調べる */
if( 0 == GetEditorWindowsNum() ){
return FALSE;
}
for( i = 0; i < m_pShareData->m_nEditArrNum; ++i ){
if( IsEditWnd( m_pShareData->m_pEditArr[i].m_hWnd ) ){
/* トレイからエディタへの編集ファイル名要求通知 */
::SendMessage( m_pShareData->m_pEditArr[i].m_hWnd, MYWM_GETFILEINFO, 1, 0 );
pfi = (FileInfo*)&m_pShareData->m_FileInfo_MYWM_GETFILEINFO;
/* 同一パスのファイルが既に開かれているか */
if( 0 == _stricmp( pfi->m_szPath, pszPath ) ){
*phwndOwner = m_pShareData->m_pEditArr[i].m_hWnd;
return TRUE;
}
}
}
return FALSE;
}
/* 現在の編集ウィンドウの数を調べる */
int CShareData::GetEditorWindowsNum( void )
{
int i;
int j;
j = 0;
for( i = 0; i < m_pShareData->m_nEditArrNum; ++i ){
if( IsEditWnd( m_pShareData->m_pEditArr[i].m_hWnd ) ){
j++;
}
}
return j;
}
/*! 全編集ウィンドウへメッセージをポストする
@date 2005.01.24 genta m_hWndLast == NULLのとき全くメッセージが送られなかった
*/
BOOL CShareData::PostMessageToAllEditors(
UINT uMsg, /*!< ポストするメッセージ */
WPARAM wParam, /*!< 第1メッセージ パラメータ */
LPARAM lParam, /*!< 第2メッセージ パラメータ */
HWND m_hWndLast /*!< 最後に送りたいウィンドウ */
)
{
HWND* phWndArr;
int i;
int j;
j = m_pShareData->m_nEditArrNum;
if( 0 == j ){
return TRUE;
}
phWndArr = new HWND[j];
for( i = 0; i < j; ++i ){
phWndArr[i] = m_pShareData->m_pEditArr[i].m_hWnd;
}
for( i = 0; i < j; ++i ){
// Jan. 24, 2005 genta m_hWndLast == NULLのときにメッセージが送られるように
if( m_hWndLast == NULL ||
( NULL != m_hWndLast && phWndArr[i] != m_hWndLast ) ){
if( IsEditWnd( phWndArr[i] ) ){
/* トレイからエディタへメッセージをポスト */
::PostMessage( phWndArr[i], uMsg, wParam, lParam );
}
}
}
if( NULL != m_hWndLast && IsEditWnd( m_hWndLast ) ){
/* トレイからエディタへメッセージをポスト */
::PostMessage( m_hWndLast, uMsg, wParam, lParam );
}
delete [] phWndArr;
return TRUE;
}
/*! 全編集ウィンドウへメッセージを送る
@date 2005.01.24 genta m_hWndLast == NULLのとき全くメッセージが送られなかった
*/
BOOL CShareData::SendMessageToAllEditors(
UINT uMsg, /* ポストするメッセージ */
WPARAM wParam, /* 第1メッセージ パラメータ */
LPARAM lParam, /* 第2メッセージ パラメータ */
HWND m_hWndLast /* 最後に送りたいウィンドウ */
)
{
HWND* phWndArr;
int i;
int j;
j = m_pShareData->m_nEditArrNum;
if( 0 == j ){
return TRUE;
}
phWndArr = new HWND[j];
for( i = 0; i < j; ++i ){
phWndArr[i] = m_pShareData->m_pEditArr[i].m_hWnd;
}
for( i = 0; i < j; ++i ){
// Jan. 24, 2005 genta m_hWndLast == NULLのときにメッセージが送られるように
if( m_hWndLast == NULL ||
( NULL != m_hWndLast && phWndArr[i] != m_hWndLast ) ){
if( IsEditWnd( phWndArr[i] ) ){
/* トレイからエディタへメッセージをポスト */
::SendMessage( phWndArr[i], uMsg, wParam, lParam );
}
}
}
if( NULL != m_hWndLast && IsEditWnd( m_hWndLast ) ){
/* トレイからエディタへメッセージをポスト */
::SendMessage( m_hWndLast, uMsg, wParam, lParam );
}
delete [] phWndArr;
return TRUE;
}
/* 指定ウィンドウが、編集ウィンドウのフレームウィンドウかどうか調べる */
BOOL CShareData::IsEditWnd( HWND hWnd )
{
char szClassName[64];
if( !::IsWindow( hWnd ) ){
return FALSE;
}
if( 0 == ::GetClassName( hWnd, szClassName, sizeof(szClassName) - 1 ) ){
return FALSE;
}
if(0 == strcmp( GSTR_EDITWINDOWNAME, szClassName ) ){
return TRUE;
}else{
return FALSE;
}
}
/*! 現在開いている編集ウィンドウの配列を返す
@param ppEditNode [out] 配列を受け取るポインタ
@param bSort [in] true: ソートあり / false: ソート無し
@return 配列の要素数を返す
@note 要素数>0 の場合は呼び出し側で配列をdeleteしてください
@date 2003.06.28 MIK CRecent利用で書き換え
*/
int CShareData::GetOpenedWindowArr( EditNode** ppEditNode, BOOL bSort )
{
// int nRowNum;
// int i;
// int j;
// int k;
// int nMinIdx;
// int nMin;
// HWND* phWndArr;
//
// nRowNum = 0;
// // phWndArr = NULL;
// *ppEditNode = NULL;
// j = 0;
// for( i = 0; i < m_pShareData->m_nEditArrNum; ++i ){
// if( CShareData::IsEditWnd( m_pShareData->m_pEditArr[i].m_hWnd ) ){
// j++;
// }
// }
// if( j > 0 ){
// phWndArr = new HWND[j];
// *ppEditNode = new EditNode[j];
// nRowNum = 0;
// for( i = 0;i < j; ++i ){
// phWndArr[i] = NULL;
// }
// k = 0;
// for( i = 0; i < m_pShareData->m_nEditArrNum && k < j; ++i ){
// if( CShareData::IsEditWnd( m_pShareData->m_pEditArr[i].m_hWnd ) ){
// phWndArr[k] = m_pShareData->m_pEditArr[i].m_hWnd;
// k++;
// }
// }
// if( bSort ){
// while( 1 ){
// nMinIdx = 99999;
// nMin = 99999;
// for( i = 0; i < j; ++i ){
// if( phWndArr[i] != NULL &&
// nMin > ::GetWindowLongPtr( phWndArr[i], sizeof(LONG_PTR) )
// ){
// nMinIdx = i;
// nMin = ::GetWindowLongPtr( phWndArr[i], sizeof(LONG_PTR) );
// }
// }
// if( nMinIdx != 99999 ){
// i = nMinIdx;
// (*ppEditNode)[nRowNum].m_nIndex = i;
// (*ppEditNode)[nRowNum].m_hWnd = m_pShareData->m_pEditArr[i].m_hWnd;
// nRowNum++;
// phWndArr[i] = NULL;
// }else{
// break;
// }
// }
// }else{
// for( i = 0; i < k; ++i ){
// (*ppEditNode)[i].m_nIndex = i;
// (*ppEditNode)[i].m_hWnd = phWndArr[i];
// }
// nRowNum = k;
// }
//
// delete [] phWndArr;
// }
// return nRowNum;
//編集ウインドウ数を取得する。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -