📄 ceditwnd.cpp
字号:
bSizeBox = TRUE;
/* ステータスパーを表示している場合はサイズボックスを表示しない */
if( NULL != m_hwndStatusBar ){
bSizeBox = FALSE;
}
}
m_CFuncKeyWnd.Open( hInstance, m_hWnd, &m_cEditDoc, bSizeBox );
}
//From Here 2003.05.31 MIK
//タブウインドウ
if( m_pShareData->m_Common.m_bDispTabWnd )
{
m_cTabWnd.Open( hInstance, m_hWnd );
}
//To Here 2003.05.31 MIK
if( FALSE == m_cEditDoc.Create( m_hInstance, m_hWnd, &m_cIcons/*, 1, 1, 0, 0*/ ) ){
::MessageBox(
m_hWnd,
"クライアントウィンドウの作成に失敗しました", GSTR_APPNAME,
MB_OK
);
}
/* デスクトップからはみ出さないようにする */
RECT rcOrg;
RECT rcDesktop;
// int nWork;
// May 01, 2004 genta マルチモニタ対応
::GetMonitorWorkRect( m_hWnd, &rcDesktop );
::GetWindowRect( m_hWnd, &rcOrg );
/* ウィンドウ位置調整 */
if( rcOrg.bottom >= rcDesktop.bottom ){
if( 0 > rcOrg.top - (rcOrg.bottom - rcDesktop.bottom ) ){
rcOrg.top = 0;
}else{
rcOrg.top -= rcOrg.bottom - rcDesktop.bottom;
}
rcOrg.bottom = rcDesktop.bottom; //@@@ 2002.01.08
}
if( rcOrg.right >= rcDesktop.right ){
if( 0 > rcOrg.left - (rcOrg.right - rcDesktop.right ) ){
rcOrg.left = 0;
}else{
rcOrg.left -= rcOrg.right - rcDesktop.right;
}
rcOrg.right = rcDesktop.right; //@@@ 2002.01.08
}
/* ウィンドウサイズ調整 */
if( rcOrg.top < rcDesktop.top ){
rcOrg.top = rcDesktop.top;
}
if( rcOrg.left < rcDesktop.left ){
rcOrg.left = rcDesktop.left;
}
if( rcOrg.bottom >= rcDesktop.bottom ){
//rcOrg.bottom = rcDesktop.bottom - 1; //@@@ 2002.01.08
rcOrg.bottom = rcDesktop.bottom; //@@@ 2002.01.08
}
if( rcOrg.right >= rcDesktop.right ){
//rcOrg.right = rcDesktop.right - 1; //@@@ 2002.01.08
rcOrg.right = rcDesktop.right; //@@@ 2002.01.08
}
//From Here @@@ 2003.06.13 MIK
if( m_pShareData->m_Common.m_bDispTabWnd
&& m_pShareData->m_TabWndWndpl.length
&& FALSE == m_pShareData->m_Common.m_bDispTabWndMultiWin )
{
//タブウインドウ時は現状を維持
/* ウィンドウサイズ継承 */
if( m_pShareData->m_Common.m_nWinSizeType == SIZE_MAXIMIZED )
{
::ShowWindow( m_hWnd, SW_SHOWMAXIMIZED );
}
else
{
::ShowWindow( m_hWnd, SW_SHOW );
}
}
else
{
::SetWindowPos(
m_hWnd, 0,
rcOrg.left, rcOrg.top,
rcOrg.right - rcOrg.left, rcOrg.bottom - rcOrg.top,
SWP_NOOWNERZORDER | SWP_NOZORDER
);
/* ウィンドウサイズ継承 */
if( WINSIZEMODE_DEF != m_pShareData->m_Common.m_nSaveWindowSize &&
m_pShareData->m_Common.m_nWinSizeType == SIZE_MAXIMIZED ){
::ShowWindow( m_hWnd, SW_SHOWMAXIMIZED );
}else
// 2004.05.14 Moca ウィンドウサイズを直接指定する場合は、最小化表示を受け入れる
if( WINSIZEMODE_SET == m_pShareData->m_Common.m_nSaveWindowSize &&
m_pShareData->m_Common.m_nWinSizeType == SIZE_MINIMIZED ){
::ShowWindow( m_hWnd, SW_SHOWMINIMIZED );
}else{
::ShowWindow( m_hWnd, SW_SHOW );
}
}
//To Here @@@ 2003.06.13 MIK
// if( NULL != m_hWnd ){
/* ドロップされたファイルを受け入れる */
::DragAcceptFiles( m_hWnd, TRUE );
/* 編集ウィンドウリストへの登録 */
if( FALSE == CShareData::getInstance()->AddEditWndList( m_hWnd ) ){
wsprintf( szMsg, "編集ウィンドウ数の上限は%dです。\nこれ以上は同時に開けません。", MAX_EDITWINDOWS );
::MessageBox( m_hWnd, szMsg, GSTR_APPNAME, MB_OK );
::DestroyWindow( m_hWnd );
m_hWnd = hWnd = NULL;
return hWnd;
}
// Aug. 29, 2003 wmlhq
m_nTimerCount = 0;
/* タイマーを起動 */
if( 0 == ::SetTimer( m_hWnd, IDT_TOOLBAR, 300, (TIMERPROC)CEditWndTimerProc ) ){
::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONEXCLAMATION, GSTR_APPNAME,
"CEditWnd::Create()\nタイマーが起動できません。\nシステムリソースが不足しているのかもしれません。"
);
}
// }
::InvalidateRect( m_hWnd, NULL, TRUE );
if( NULL != pszPath ){
char* pszPathNew = new char[_MAX_PATH];
strcpy( pszPathNew, pszPath );
::ShowWindow( m_hWnd, SW_SHOW );
// Oct. 03, 2004 genta コード確認は設定に依存
if( !m_cEditDoc.FileRead( pszPathNew, &bOpened, nCharCode, bReadOnly,
m_pShareData->m_Common.m_bQueryIfCodeChange ) ){
/* ファイルが既に開かれている */
if( bOpened ){
::PostMessage( m_hWnd, WM_CLOSE, 0, 0 );
delete [] pszPathNew;
// 2004.07.12 Moca return NULLだと、メッセージループを通らずにそのまま破棄されてしまい、タブの終了処理が抜ける
// この後は正常ルートでメッセージループに入った後WM_CLOSEを受信して直ちにCLOSE & DESTROYとなる.
// その中で編集ウィンドウの削除が行われる.
return m_hWnd;
}
else {
// Nov. 20, 2000 genta
m_cEditDoc.SetImeMode( m_pShareData->m_Types[0].m_nImeState );
}
}
delete [] pszPathNew;
}
else {
// Nov. 20, 2000 genta
m_cEditDoc.SetImeMode( m_pShareData->m_Types[0].m_nImeState );
}
// Mar. 7, 2002 genta 文書タイプの強制指定
// Jun. 4 ,2004 genta ファイル名指定が無くてもタイプ強制指定を有効にする
if( nDocumentType >= 0 ){
m_cEditDoc.SetDocumentType( nDocumentType, true );
// 2002/05/07 YAZAKI タイプ別設定一覧の一時適用のコードを流用
m_cEditDoc.LockDocumentType();
/* 設定変更を反映させる */
m_cEditDoc.OnChangeSetting();
}
// Jun. 4 ,2004 genta ファイル名指定が無くても読みとり専用強制指定を有効にする
m_cEditDoc.m_bReadOnly = bReadOnly;
m_cEditDoc.SetParentCaption();
// YAZAKI 2002/05/30 IMEウィンドウの位置がおかしいのを修正。
m_cEditDoc.m_cEditViewArr[m_cEditDoc.m_nActivePaneIndex].SetIMECompFormPos();
return m_hWnd;
}
// キーワード:ステータスバー順序
/* ステータスバー作成 */
void CEditWnd::CreateStatusBar( void )
{
// int nStArr[] = { 300, 400, 500. -1 };
// int nStArrNum = sizeof( nStArr ) / sizeof( nStArr[0] );
/* ステータスバー */
m_hwndStatusBar = ::CreateStatusWindow(
WS_CHILD | WS_VISIBLE | WS_EX_RIGHT | SBARS_SIZEGRIP,
"",
m_hWnd,
IDW_STATUSBAR
);
/* プログレスバー */
m_hwndProgressBar = ::CreateWindowEx(
WS_EX_TOOLWINDOW,
PROGRESS_CLASS,
(LPSTR) NULL,
WS_CHILD /*| WS_VISIBLE*/,
3,
5,
150,
13,
m_hwndStatusBar,
NULL,
m_hInstance,
0
);
// ::ShowWindow( m_hwndProgressBar, SW_SHOW );
if( NULL != m_CFuncKeyWnd.m_hWnd ){
m_CFuncKeyWnd.SizeBox_ONOFF( FALSE );
}
//スプリッターの、サイズボックスの位置を変更
m_cEditDoc.m_cSplitterWnd.DoSplit( -1, -1);
return;
}
/* ステータスバー破棄 */
void CEditWnd::DestroyStatusBar( void )
{
if( NULL != m_hwndProgressBar ){
::DestroyWindow( m_hwndProgressBar );
m_hwndProgressBar = NULL;
}
::DestroyWindow( m_hwndStatusBar );
m_hwndStatusBar = NULL;
if( NULL != m_CFuncKeyWnd.m_hWnd ){
BOOL bSizeBox;
if( m_pShareData->m_Common.m_nFUNCKEYWND_Place == 0 ){ /* ファンクションキー表示位置/0:上 1:下 */
/* サイズボックスの表示/非表示切り替え */
bSizeBox = FALSE;
}else{
bSizeBox = TRUE;
/* ステータスパーを表示している場合はサイズボックスを表示しない */
if( NULL != m_hwndStatusBar ){
bSizeBox = FALSE;
}
}
m_CFuncKeyWnd.SizeBox_ONOFF( bSizeBox );
}
//スプリッターの、サイズボックスの位置を変更
m_cEditDoc.m_cSplitterWnd.DoSplit( -1, -1 );
return;
}
/* ツールバー作成
@date @@@ 2002.01.03 YAZAKI m_tbMyButtonなどをCShareDataからCMenuDrawerへ移動したことによる修正。
*/
void CEditWnd::CreateToolBar( void )
{
int nFlag;
TBBUTTON tbb;
int i;
int nIdx;
UINT uToolType;
nFlag = 0;
/* ツールバーウィンドウの作成 */
::InitCommonControls();
m_hwndToolBar = ::CreateWindowEx(
0,
TOOLBARCLASSNAME,
NULL,
WS_CHILD | WS_VISIBLE | /*WS_BORDER | */
/* WS_EX_WINDOWEDGE| */
TBSTYLE_TOOLTIPS |
// TBSTYLE_WRAPABLE |
// TBSTYLE_ALTDRAG |
// CCS_ADJUSTABLE |
nFlag,
0, 0,
0, 0,
m_hWnd,
(HMENU)ID_TOOLBAR,
m_hInstance,
NULL
);
if( NULL == m_hwndToolBar ){
if( m_pShareData->m_Common.m_bToolBarIsFlat ){ /* フラットツールバーにする/しない */
m_pShareData->m_Common.m_bToolBarIsFlat = FALSE;
}
::MYMESSAGEBOX( m_hWnd, MB_OK | MB_ICONEXCLAMATION | MB_TOPMOST, GSTR_APPNAME,
"ツールバーの作成に失敗しました。"
);
}else{
::SendMessage( m_hwndToolBar, TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0 );
// Oct. 12, 2000 genta
// 既に用意されているImage Listをアイコンとして登録
m_cIcons.SetToolBarImages( m_hwndToolBar );
/* ツールバーにボタンを追加 */
int count = 0; //@@@ 2002.06.15 MIK
for( i = 0; i < m_pShareData->m_Common.m_nToolBarButtonNum; ++i ){
nIdx = m_pShareData->m_Common.m_nToolBarButtonIdxArr[i];
tbb = m_CMenuDrawer.m_tbMyButton[m_pShareData->m_Common.m_nToolBarButtonIdxArr[i]];
//::SendMessage( m_hwndToolBar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbb );
//@@@ 2002.06.15 MIK start
switch( tbb.fsStyle )
{
case TBSTYLE_DROPDOWN: //ドロップダウン
//拡張スタイルに設定
::SendMessage( m_hwndToolBar, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS );
::SendMessage( m_hwndToolBar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&tbb );
count++;
break;
case TBSTYLE_COMBOBOX: //コンボボックス
{
RECT rc;
TBBUTTONINFO tbi;
//HWND my_hwnd;
TBBUTTON my_tbb;
//int width;
LOGFONT lf;
//HFONT my_font;
int my_i;
switch( tbb.idCommand )
{
case F_SEARCH_BOX:
if( m_hwndSearchBox )
{
break;
}
//セパレータ作る
memset( &my_tbb, 0, sizeof(my_tbb) );
my_tbb.fsStyle = TBSTYLE_SEP;
my_tbb.idCommand = tbb.idCommand; //同じIDにしておく
::SendMessage( m_hwndToolBar, TB_ADDBUTTONS, (WPARAM)1, (LPARAM)&my_tbb );
count++;
//サイズを設定する
tbi.cbSize = sizeof(tbi);
tbi.dwMask = TBIF_SIZE;
tbi.cx = 160; //ボックスの幅
::SendMessage( m_hwndToolBar, TB_SETBUTTONINFO, (WPARAM)(tbb.idCommand), (LPARAM)&tbi );
//サイズを取得する
rc.right = rc.left = rc.top = rc.bottom = 0;
::SendMessage( m_hwndToolBar, TB_GETITEMRECT, (WPARAM)(count-1), (LPARAM)&rc );
//コンボボックスを作る
// Mar. 8, 2003 genta 検索ボックスを1ドット下にずらした
m_hwndSearchBox = CreateWindow( "COMBOBOX", "Combo",
WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL | CBS_DROPDOWN
/*| CBS_SORT*/ | CBS_AUTOHSCROLL /*| CBS_DISABLENOSCROLL*/,
rc.left, rc.top + 1, rc.right - rc.left, (rc.bottom - rc.top) * 10,
m_hwndToolBar, (HMENU)(INT_PTR)tbb.idCommand, m_hInstance, NULL );
if( m_hwndSearchBox )
{
m_nCurrentFocus = 0;
memset( &lf, 0, sizeof(LOGFONT) );
lf.lfHeight = 12; // Jan. 14, 2003 genta ダイアログにあわせてちょっと小さく
lf.lfWidth = 0;
lf.lfEscapement = 0;
lf.lfOrientation = 0;
lf.lfWeight = FW_NORMAL;
lf.lfItalic = FALSE;
lf.lfUnderline = FALSE;
lf.lfStrikeOut = FALSE;
//lf.lfCharSet = SHIFTJIS_CHARSET;
lf.lfCharSet = GB2312_CHARSET;
lf.lfOutPrecision = OUT_DEFAULT_PRECIS;
lf.lfClipPrecision = CLIP_DEFAULT_PRECIS;
lf.lfQuality = DEFAULT_QUALITY;
lf.lfPitchAndFamily = FF_MODERN | DEFAULT_PITCH;
//strcpy( lf.lfFaceName, "MS ゴシック" );
strcpy( lf.lfFaceName, "FixedSys" );
m_fontSearchBox = ::CreateFontIndirect( &lf );
if( m_fontSearchBox )
{
::SendMessage( m_hwndSearchBox, WM_SETFONT, (WPARAM)m_fontSearchBox, MAKELONG (TRUE, 0) );
}
//入力長制限
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -