#include "stdafx.h" #include "abdev.h" #if defined HeapAlloc #define MEM_MAX 65536 LPVOID pCheckMem[MEM_MAX]; int now; #undef HeapAlloc #undef HeapReAlloc LPVOID CheckHeapAlloc(HANDLE hf,DWORD dwFlags,DWORD dwBytes){ LPVOID ret; ret=HeapAlloc(hf,dwFlags,dwBytes); pCheckMem[now]=ret; //この部分にnowのチェックを挿入 now++; if(now>=MEM_MAX){ MessageBox(0,"pCheckMemの最大値を超えました","Check",0); } return ret; } LPVOID CheckHeapReAlloc(HANDLE hf,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes){ int i; LPVOID ret; for(i=0;;i++){ if(lpMem==pCheckMem[i]) break; if(i>=MEM_MAX){ MessageBox(0,"エラー","CheckHeapReAlloc",0); break; } } ret=HeapReAlloc(hf,dwFlags,lpMem,dwBytes); pCheckMem[i]=ret; return ret; } void HeapDefaultFree(LPVOID lpMem){ int i; for(i=0;;i++){ if(lpMem==pCheckMem[i]) break; if(i>=MEM_MAX){ MessageBox(0,"エラー","HeapDefaultFree",0); break; } } pCheckMem[i]=0; HeapFree(hHeap,0,lpMem); } void CheckHeapCheck(){ int i,i2; char temp[100]; temp[0]=0; for(i=0,i2=0;ihwnd) break; } if(i==MdiInfo.size()) i=-1; return i; } int GetNowWndNum(void){ return GetWndNum(GetWindow(hClient,GW_CHILD)); } int GetFileNum(int WndNum){ if( !projectInfo.IsOpened() ){ return -1; } for(int i=0;ipath.c_str(),projectInfo.fileSystem.root.files[i].GetFullPath().c_str())==0) return i; } return -1; } void SendTextEditResizeEvent(HWND hwnd){ RECT rect; GetClientRect(hwnd,&rect); ResizeTextEditWnd(hwnd,rect.right,rect.bottom); } void RedrawAllWindow(void){ HWND hChild; hChild=GetWindow(hClient,GW_CHILD); if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD)); while(hChild){ int WndNum; WndNum=GetWndNum(hChild); if(WndNum==-1) break; if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ //コントロールタブスペースの幅と行番号の文字数を更新 MdiInfo[WndNum]->pMdiTextEdit->iWidth_ControlTabSpace= GetControlTabSpace(WndNum,&MdiInfo[WndNum]->pMdiTextEdit->iLineNumberTextCount); InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->hEdit,NULL,0); InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0); SendTextEditResizeEvent(MdiInfo[WndNum]->hwnd); } else{ HWND hEdit; hEdit=GetWindow(hChild,GW_CHILD); InvalidateRect(hEdit,NULL,0); } hChild=GetWindow(hChild,GW_HWNDNEXT); } } int DocumentModifyCheck(HWND hChild){ //終了保存確認 int BoxID,WndNum,sw; char str[MAX_PATH],temporary[MAX_PATH]; WndNum=GetWndNum(hChild); sw=0; if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ) sw=1; } else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ if(MdiInfo[WndNum]->MdiIconEditInfo->bModify) sw=1; } if(sw){ GetWindowText(hChild,temporary,MAX_PATH); //"\"%s\" ファイルは変更されています。保存しますか?" sprintf(str,STRING_MODIFYCHECK_FILE,temporary); BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION); if(BoxID==IDYES){ if(!SaveDocument(hChild,NULL)) return 0; } else if(BoxID==IDCANCEL) return 0; } return 1; } void SetStatusText(char *MenuText){ ////////////////////////// // ステータスバーの更新 ////////////////////////// int WndNum; double BufSize; char temporary[255]; HWND hChild; if(MenuText){ SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText); if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0; } hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); if(WndNum==-1) return; hChild=GetWindow(hChild,GW_CHILD); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ ////////////////////// // テキストエディタ ////////////////////// //サイズ BufSize=(double)lstrlen(MdiInfo[WndNum]->pMdiTextEdit->buffer); if(IsWindow(hChild)){ if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize); else if(BufSize<1024*1024){ BufSize/=1024; sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize); } else{ BufSize/=1024*1024; sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize); } } else temporary[0]=0; SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); //行と桁 if(IsWindow(hChild)){ #if defined(JPN) //日本語 sprintf(temporary,"%d 行、%d 列", MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1, MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1); #else //英語 sprintf(temporary,"%d : %d", MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1, MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1); #endif } else temporary[0]=0; SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); //文字コード nkf.GetCharCodeName(MdiInfo[WndNum]->pMdiTextEdit->iCharCode,temporary); SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary); //文字コード nkf.GetLfCodeName(MdiInfo[WndNum]->pMdiTextEdit->iLfCode,temporary); SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){ //////////////// // RADツール //////////////// ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path); if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){ sprintf(temporary,"pos %d, %d", RadInfo.DraggingRect[0].left-MdiInfo[WndNum]->MdiRadInfo->ClientPos.x, RadInfo.DraggingRect[0].top-MdiInfo[WndNum]->MdiRadInfo->ClientPos.y); SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); sprintf(temporary,"size %d * %d", RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left, RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top); SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); } else if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){ SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0"); sprintf(temporary,"size %d * %d",pWindowInfo->size.cx,pWindowInfo->size.cy); SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); } else{ sprintf(temporary,"pos %d, %d", pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.x, pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.y); SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); sprintf(temporary,"size %d * %d", pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cx, pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cy); SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); } } else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){ ////////////////// // MENU エディタ ////////////////// SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)""); SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)""); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ ////////////////// // ICON エディタ ////////////////// SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)""); SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)""); } } void ResetState_UndoMenu(void){ //「元に戻す、やり直し」のメニュー表示制御 int i,i2; HWND hChild; hChild=GetWindow(hClient,GW_CHILD); i=GetWndNum(hChild); if(i==-1){ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_UNDO,0); pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_REDO,0); } else if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){ i2=MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos-1; if(i2==-1) i2=MAX_UNDONUM-1; if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[i2]){ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_UNDO,0); } else{ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_UNDO,1); } if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos]){ pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_REDO,0); } else{ pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_REDO,1); } } else if(MdiInfo[i]->DocType==WNDTYPE_RAD){ i2=MdiInfo[i]->MdiRadInfo->undo.NowPos-1; if(i2==-1) i2=MAX_UNDONUM-1; if(!MdiInfo[i]->MdiRadInfo->undo.Command[i2]){ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_UNDO,0); } else{ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_UNDO,1); } if(!MdiInfo[i]->MdiRadInfo->undo.Command[MdiInfo[i]->MdiRadInfo->undo.NowPos]){ pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_REDO,0); } else{ pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_REDO,1); } } else if(MdiInfo[i]->DocType==WNDTYPE_MENU){ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_UNDO,0); pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_REDO,0); } else if(MdiInfo[i]->DocType==WNDTYPE_ICONEDIT){ i2=MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos-1; if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1; if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[i2]){ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_UNDO,0); } else{ pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_UNDO,1); } if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos]){ pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_REDO,0); } else{ pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_REDO,1); } } } void ResetState_ConvMenu(BOOL bEnable){ int MenuMsg; if(bEnable) MenuMsg=MF_BYCOMMAND|MF_ENABLED; else MenuMsg=MF_BYCOMMAND|MF_GRAYED; pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg); #ifdef THETEXT pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg); pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg); #else pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg); #endif } void ResetState_PrintMenu(void); void ResetState_EditMenu(void){ //編集メニューの表示制御 HWND hChild; int WndNum; long MenuMsg,ToolbarMsg; //印刷メニューの状態を設定 ResetState_PrintMenu(); hChild=GetWindow(hClient,GW_CHILD); if(!IsWindow(hChild)){ pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); #ifdef THETEXT pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); #endif pobj_StandardToolbar->EnableItem(IDM_FIND,0); pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_CUT,0); pobj_StandardToolbar->EnableItem(IDM_COPY,0); pobj_StandardToolbar->EnableItem(IDM_PASTE,0); ResetState_ConvMenu(0); ResetState_UndoMenu(); return; } WndNum=GetWndNum(hChild); if(WndNum==-1) return; if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED); #ifdef THETEXT pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED); #endif pobj_StandardToolbar->EnableItem(IDM_FIND,1); BOOL bConvEnable; hChild=GetWindow(hChild,GW_CHILD); if(!( MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x&& MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y )){ MenuMsg=MF_BYCOMMAND|MF_ENABLED; ToolbarMsg=1; bConvEnable=1; } else{ MenuMsg=MF_BYCOMMAND|MF_GRAYED; ToolbarMsg=0; bConvEnable=0; } pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg); pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg); pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg); EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg); EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg); EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg); pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg); pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg); if(IsClipboardFormatAvailable(CF_TEXT)){ pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_PASTE,1); } else{ pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_PASTE,0); } //変換コマンド ResetState_ConvMenu(bConvEnable); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){ //検索、置換、文字カウントを無効化 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); #ifdef THETEXT pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); #endif pobj_StandardToolbar->EnableItem(IDM_FIND,0); if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){ //切り取り、コピー、削除を有効化 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_CUT,0); pobj_StandardToolbar->EnableItem(IDM_COPY,0); } else{ //切り取り、コピー、削除を無効化 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_CUT,1); pobj_StandardToolbar->EnableItem(IDM_COPY,1); } //すべて選択を有効化 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED); if(IsClipboardFormatAvailable(dwRadClipboardID)){ pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_PASTE,1); } else{ pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_PASTE,0); } ResetState_ConvMenu(0); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){ //検索、置換、文字カウントを無効化 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); #ifdef THETEXT pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); #endif pobj_StandardToolbar->EnableItem(IDM_FIND,0); pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_CUT,0); pobj_StandardToolbar->EnableItem(IDM_COPY,0); pobj_StandardToolbar->EnableItem(IDM_PASTE,0); ResetState_ConvMenu(0); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ //検索、置換、文字カウントを無効化 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED); #ifdef THETEXT pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED); #endif pobj_StandardToolbar->EnableItem(IDM_FIND,0); if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==0){ //切り取り、コピー、削除を無効化 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_CUT,0); pobj_StandardToolbar->EnableItem(IDM_COPY,0); } else{ //切り取り、コピー、削除を有効化 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_CUT,1); pobj_StandardToolbar->EnableItem(IDM_COPY,1); } //すべて選択を有効化 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED); if(IsClipboardFormatAvailable(CF_BITMAP)){ //貼り付けを有効化 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_PASTE,1); } else{ //貼り付けを無効化 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED); pobj_StandardToolbar->EnableItem(IDM_PASTE,0); } ResetState_ConvMenu(0); } ResetState_UndoMenu(); } void ResetState_ViewMenu(void){ // 表示 メニューの状態を設定 #ifdef THETEXT pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn); #endif } void ResetState_PrintMenu(void){ //編集メニューの表示制御 HWND hChild; int WndNum; hChild=GetWindow(hClient,GW_CHILD); if(!IsWindow(hChild)){ pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED); return; } WndNum=GetWndNum(hChild); if( WndNum != -1 ) { if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED); pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED); } else{ pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED); pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED); } } } void ResetState_DocMenu(void){ long MenuMsg,ToolbarMsg; HWND hChild; hChild=GetWindow(hClient,GW_CHILD); ///////////////////////////////////////// // 共通ドキュメント メニューの状態を設定 ///////////////////////////////////////// if(!IsWindow(hChild)){ MenuMsg=MF_GRAYED; ToolbarMsg=0; } else{ MenuMsg=MF_ENABLED; ToolbarMsg=1; } pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg); pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg); pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg); pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg); pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg); pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg); pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg); pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg); #ifndef THETEXT ///////////////////////////////////////////////// // プロジェクトドキュメント メニューの状態を設定 ///////////////////////////////////////////////// if( projectInfo.IsOpened() ){ pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED); pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1); MenuMsg=MF_ENABLED; ToolbarMsg=TBSTATE_ENABLED; } else{ MenuMsg=MF_GRAYED; ToolbarMsg=TBSTATE_INDETERMINATE; } pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg); pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg); pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg); pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg); //デバッガ メニューの状態を設定 pobj_Debugger->ResetCommandEnabled(); #endif //編集メニューの状態を設定 ResetState_EditMenu(); //表示メニューの状態を設定 ResetState_ViewMenu(); } void DuplicateTitleCheck(char *lpszTitle){ int i; for(i=0;ihwnd){ if(lstrcmpi(MdiInfo[i]->title.c_str(),lpszTitle)==0){ lstrcat(lpszTitle,"_"); DuplicateTitleCheck(lpszTitle); return; } } } } HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor) { int i; char str[MAX_PATH],str2[32],*buffer; HWND hChild,hEdit; RECT rect; int iCharCode=NKF_SHIFT_JIS; int iLfCode=LFCODE_CRLF; if(filepath){ //すでに指定されたファイルが開かれている場合 hChild=::GetWindow(hClient,GW_CHILD); while(hChild){ i=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){ if(lstrcmpi(MdiInfo[i]->path.c_str(),filepath)==0) break; } hChild=::GetNextWindow(hChild,GW_HWNDNEXT); } if(hChild){ //前面に表示して終了 ::BringWindowToTop(hChild); return hChild; } ////////////////////////////////////////////////////// //ファイル読み込み(正常に読み込めるかの確認も含む) ////////////////////////////////////////////////////// HANDLE hFile; hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile==INVALID_HANDLE_VALUE){ sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath); ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION); return 0; } int length; length=GetFileSize(hFile,NULL); char *temp; temp=(char *)HeapAlloc(hHeap,0,length+1); DWORD dw; ReadFile(hFile,temp,length,&dw,NULL); CloseHandle(hFile); for(i=0;ibMDIZoomed) mdic.style=WS_MAXIMIZE; else mdic.style=0; } //ファイルアイコンをセット SHFILEINFO shfi; if(filepath) SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON ); else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);; mdic.lParam=(LPARAM)shfi.hIcon; mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成 //TextEditorコントロールを設置 ::GetClientRect(hChild,&rect); hEdit=CreateWindow("TextEditor",NULL, WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE, 0,0,0,0, hChild,NULL,hInst,NULL); //ウィンドウのID登録 MdiInfo.push_back( new MDIINFO() ); i = MdiInfo.size()-1; MdiInfo[i]->hwnd=hChild; MdiInfo[i]->DocType=DocumentType; DuplicateTitleCheck(str); MdiInfo[i]->title = str; if(filepath) { MdiInfo[i]->path = filepath; } else { MdiInfo[i]->path = ""; } MdiInfo[i]->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] ); MdiInfo[i]->pMdiTextEdit->hEdit=hEdit; MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild); MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,MdiInfo[i]); MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon; MdiInfo[i]->pMdiTextEdit->buffer=buffer; MdiInfo[i]->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer)); MdiInfo[i]->pMdiTextEdit->iUnderStart=-1; MdiInfo[i]->pMdiTextEdit->iUnderEnd=-1; MdiInfo[i]->pMdiTextEdit->StartCaretPos.x=0; MdiInfo[i]->pMdiTextEdit->StartCaretPos.y=0; MdiInfo[i]->pMdiTextEdit->EndCaretPos.x=0; MdiInfo[i]->pMdiTextEdit->EndCaretPos.y=0; MdiInfo[i]->pMdiTextEdit->Temp_UpDown_CaretXPos=-1; MdiInfo[i]->pMdiTextEdit->bAutoScroll=0; MdiInfo[i]->pMdiTextEdit->iWidth_ControlTabSpace= GetControlTabSpace(i,&MdiInfo[i]->pMdiTextEdit->iLineNumberTextCount); MdiInfo[i]->pMdiTextEdit->iCharCode=iCharCode; MdiInfo[i]->pMdiTextEdit->iLfCode=iLfCode; MdiInfo[i]->IndentStr=0; int flag; if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED; else flag=0; SendTextEditResizeEvent(hChild); //ワードカラーをセット if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(MdiInfo.size()-1); //Docコンボボックスに追加 extern HWND hDocCombo; if( hDocCombo ) { i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str); SendMessage(hDocCombo,CB_SETCURSEL,i,0); } //タブに追加 pobj_MainTab->InsertItem( str, true, TabColor ); ::SetFocus(hEdit); SetStatusText(NULL); //メニュー状態を設定 ResetState_DocMenu(); if( DocumentType == WNDTYPE_BASIC && !projectInfo.IsOpened() ){ // 単体ソースコードを開いたとき extern HWND hProjectView; if( !::IsWindowVisible( hProjectView ) ){ // クラスビューを表示する SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0); ShowClassView(); // クラスビューを更新 ResetClassTree((HTREEITEM)-1); } } return hChild; } void CloseDocWindow(int WndNum){ int i2,i3; MdiInfo[WndNum]->hwnd=0; //ドキュメントコンボボックスから文字列を消去 extern HWND hDocCombo; i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str()); SendMessage(hDocCombo,CB_DELETESTRING,i2,0); //タブコントロールからアイテムを消去 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum]->title.c_str(), true ); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){ //////////////////////////// // テキストエディタを閉じる //////////////////////////// extern COMPLEMENT_WINDOW_INFO ComplementWndInfo; if(ComplementWndInfo.hWnd){ //コード補完リストを破棄する DestroyWindow(ComplementWndInfo.hWnd); ComplementWndInfo.hWnd=0; } HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->buffer); HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->pColorRef); if(MdiInfo[WndNum]->IndentStr) HeapDefaultFree(MdiInfo[WndNum]->IndentStr); //エディットコントロールを破棄 DestroyWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit); //Web検索ウィンドウを破棄 delete MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult; MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult=0; //ルーラーウィンドウを破棄 delete MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler; MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler=0; //アイコンを破棄 if(MdiInfo[WndNum]->pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum]->pMdiTextEdit->hIcon); delete MdiInfo[WndNum]->pMdiTextEdit; MdiInfo[WndNum]->pMdiTextEdit=0; } else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){ ///////////////////// // RADツールを閉じる ///////////////////// for(i2=0;i2MdiRadInfo->undo.Command[i2]) Rad_DeleteUndoData(WndNum,i2); } DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hTools); DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hRad); SelectObject(MdiInfo[WndNum]->MdiRadInfo->hMemDC,MdiInfo[WndNum]->MdiRadInfo->hOldBitmap); DeleteDC(MdiInfo[WndNum]->MdiRadInfo->hMemDC); DeleteObject(MdiInfo[WndNum]->MdiRadInfo->hBitmap); GlobalFree(MdiInfo[WndNum]->MdiRadInfo); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){ //////////////////////////// // メニューエディタを閉じる //////////////////////////// DestroyWindow(MdiInfo[WndNum]->MdiMenuInfo->hList); GlobalFree(MdiInfo[WndNum]->MdiMenuInfo); } else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){ //////////////////////////// // アイコンエディタを閉じる //////////////////////////// for(i2=0;i2MdiIconEditInfo->num;i2++){ for(i3=0;i3MdiIconEditInfo->undo[i2].lpData[i3]) HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3]); } } DeleteDC(MdiInfo[WndNum]->MdiIconEditInfo->memdc); DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hMemBmp); DestroyWindow(MdiInfo[WndNum]->MdiIconEditInfo->hMain); for(i2=0;i2MdiIconEditInfo->num;i2++){ HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[i2]); } HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo); } else { throw; } delete MdiInfo[WndNum]; Jenga::Common::EraseVectorItem>( MdiInfo, WndNum ); } void ResizeTextEditWnd(HWND hwnd,int cx,int cy){ int WndNum; WndNum=GetWndNum(hwnd); if(WndNum==-1) return; int WebResultWndHeight; WebResultWndHeight=LINK_ITEM_HEIGHT; //未完成 WebResultWndHeight=0; int iHeightRuler; if(pobj_nv->bEditor_Ruler){ //ルーラー MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->resize( 0, 0, cx, HEIGHT_RULER); iHeightRuler=HEIGHT_RULER; ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW); } else{ iHeightRuler=0; ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE); } //エディットウィンドウ MoveWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit, 0, iHeightRuler, cx, cy-WebResultWndHeight-iHeightRuler, 1); //Web検索ウィンドウ MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult->resize( 0, cy-WebResultWndHeight, cx, WebResultWndHeight); } LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ int i,i2; HWND hEdit; switch(message){ case WM_CREATE: CREATESTRUCT *lpcs; lpcs=(CREATESTRUCT *)lParam; MDICREATESTRUCT *lpmcs; lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams; SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam); break; case WM_MDIACTIVATE: //以前のMDIウィンドウのパラメータ ヒントを破棄する if(MethodCheckInfo.hWnd){ DestroyWindow(MethodCheckInfo.hWnd); MethodCheckInfo.hWnd=0; } //以前のコード補完リストを破棄する if(ComplementWndInfo.hWnd){ DestroyWindow(ComplementWndInfo.hWnd); ComplementWndInfo.hWnd=0; } if(!lParam) return 0; i=GetWndNum((HWND)lParam); if(i==-1) return 0; //ウィンドウが初期状態の場合 #ifndef THETEXT //デバッガ メニューの状態を設定 pobj_Debugger->ResetCommandEnabled(); #endif //ドキュメント セレクト コンボボックス extern HWND hDocCombo; i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i]->title.c_str()); SendMessage(hDocCombo,CB_SETCURSEL,i2,0); //タブコントロール pobj_MainTab->MdiActiveEvent(MdiInfo[i]->title.c_str()); if( !projectInfo.IsOpened() ){ ResetClassTree((HTREEITEM)-1); } return 0; case WM_SETFOCUS: hEdit=GetWindow(hwnd,GW_CHILD); SetFocus(hEdit); SetStatusText(CmdMsg); ResetState_EditMenu(); ResetState_ViewMenu(); break; case WM_SIZE: ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam)); break; case WM_CLOSE: if(!DocumentModifyCheck(hwnd)) return 0; CloseDocWindow(GetWndNum(hwnd)); pobj_nv->bMDIZoomed=IsZoomed(hwnd); i=DefMDIChildProc(hwnd,message,wParam,lParam); //メニュー状態を設定 ResetState_DocMenu(); return i; } return DefMDIChildProc(hwnd,message,wParam,lParam); } WNDPROC oldMainFrameWndProc; LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ char str[MAX_PATH]; RECT rect; POINT pos; if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){ //「最近使ったファイル」メニューコマンド lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]); OpenFileWithExtension(str); return 0; } if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){ //「最近使ったプロジェクト」メニューコマンド lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]); OpenFileWithExtension(str); return 0; } switch(message) { #ifndef THETEXT case WM_SETCOMPILEVIEW: //コンパイラウィンドウ(埋め込み型)が表示されたとき hCompileView=(HWND)lParam; ActiveBasic::IDE::Program::mainFrame.Resized(); return 0; case WM_DESTROYCOMPILEVIEW: //コンパイラウィンドウ(埋め込み型)が破棄されたとき if((int)hCompileView==-1){ //すぐに次のコンパイラウィンドウが起動するとき hCompileView=0; } else{ //完全にコンパイラウィンドウを閉じたときはリサイズ hCompileView=0; ActiveBasic::IDE::Program::mainFrame.Resized(); } return 0; case WM_SETDEBUGGERBASE: //デバッガベースウィンドウ(埋め込み型)が表示されたとき pobj_Debugger->begin(); //BasicCompiler.exeの強制終了を考慮 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL); return 0; case WM_DESTROYDEBUGGERBASE: //BasicCompiler.exeの強制終了を考慮 KillTimer(hOwner,ID_DEBUGSAFTY); //デバッガベースウィンドウ(埋め込み型)が破棄されたとき pobj_Debugger->end(); return 0; case WM_SETDEBUGGERVIEW: //デバッガウィンドウ(埋め込み型)が表示されたとき pobj_Debugger->watch_start((HWND)lParam); ActiveBasic::IDE::Program::mainFrame.Resized(); return 0; case WM_DESTROYDEBUGGERVIEW: //デバッガウィンドウ(埋め込み型)が破棄されたとき pobj_Debugger->watch_quit(); ActiveBasic::IDE::Program::mainFrame.Resized(); return 0; #endif case WM_MOUSEMOVE: static DWORD dwDragLever; static POINT PrevMousePos; static int start; pos.x=(long)(short)LOWORD(lParam); pos.y=(long)(short)HIWORD(lParam); ClientToScreen(hwnd,&pos); if(dwDragLever){ GetClientRect(hwnd,&rect); if(dwDragLever==1){ //プロジェクトビューをリサイズ中 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x; if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100; if(rect.right-100width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100; } else if(dwDragLever==2){ //デバッガビューをリサイズ中 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y; if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60; if(rect.bottom-100height_ClipCompileView+pobj_nv->height_ClipDebuggerView) pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView; } else if(dwDragLever==3){ //コンパイラビューをリサイズ中 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y; if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60; if(rect.bottom-100height_ClipCompileView) pobj_nv->height_ClipCompileView=rect.bottom-100; } else if(dwDragLever==4){ //SideWebをリサイズ中 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x; if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100; if(rect.right-100width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100; } ActiveBasic::IDE::Program::mainFrame.Resized(); UpdateWindow(hwnd); } if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){ //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン GetWindowRect(hProjectView,&rect); if(rect.top<=pos.y&&pos.y<=rect.bottom&& rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){ SetCursor(LoadCursor(0,IDC_SIZEWE)); } } #ifndef THETEXT if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){ //デバッガビューとMDIクライアントの境目のサイズ変更ライン GetWindowRect(pobj_Debugger->hwnd,&rect); if(rect.left<=pos.x&&pos.x<=rect.right&& rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ SetCursor(LoadCursor(0,IDC_SIZENS)); } } if(bClipCompileView&&IsWindowVisible(hCompileView)){ //コンパイラビューとMDIクライアントの境目のサイズ変更ライン GetWindowRect(hCompileView,&rect); if(rect.left<=pos.x&&pos.x<=rect.right&& rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ SetCursor(LoadCursor(0,IDC_SIZENS)); } } #endif if( pobj_SideWeb ) { if(pobj_SideWeb->bShow){ //SideWebとMDIクライアントの境目のサイズ変更ライン pobj_SideWeb->GetRect(&rect); ClientToScreen(hwnd,&rect); if(rect.top<=pos.y&&pos.y<=rect.bottom&& rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){ SetCursor(LoadCursor(0,IDC_SIZEWE)); } } } return 0; case WM_LBUTTONDOWN: pos.x=LOWORD(lParam); pos.y=HIWORD(lParam); ClientToScreen(hwnd,&pos); if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){ //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン GetWindowRect(hProjectView,&rect); if(rect.top<=pos.y&&pos.y<=rect.bottom&& rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){ SetCursor(LoadCursor(0,IDC_SIZEWE)); dwDragLever=1; SetCapture(hwnd); PrevMousePos=pos; start=pobj_nv->width_ClipProjectView; } } #ifndef THETEXT if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){ //デバッガビューとMDIクライアントの境目のサイズ変更ライン GetWindowRect(pobj_Debugger->hwnd,&rect); if(rect.left<=pos.x&&pos.x<=rect.right&& rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ SetCursor(LoadCursor(0,IDC_SIZENS)); dwDragLever=2; SetCapture(hwnd); PrevMousePos=pos; start=pobj_nv->height_ClipDebuggerView; } } if(bClipCompileView&&IsWindowVisible(hCompileView)){ //コンパイラビューとMDIクライアントの境目のサイズ変更ライン GetWindowRect(hCompileView,&rect); if(rect.left<=pos.x&&pos.x<=rect.right&& rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){ SetCursor(LoadCursor(0,IDC_SIZENS)); dwDragLever=3; SetCapture(hwnd); PrevMousePos=pos; start=pobj_nv->height_ClipCompileView; } } #endif if( pobj_SideWeb && pobj_SideWeb->bShow){ //SideWebとMDIクライアントの境目のサイズ変更ライン pobj_SideWeb->GetRect(&rect); ClientToScreen(hwnd,&rect); if(rect.top<=pos.y&&pos.y<=rect.bottom&& rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){ SetCursor(LoadCursor(0,IDC_SIZENS)); dwDragLever=4; SetCapture(hwnd); PrevMousePos=pos; start=pobj_nv->width_WebSearchView; } } return 0; case WM_LBUTTONUP: if(dwDragLever){ dwDragLever=0; ReleaseCapture(); } return 0; case WM_SYSCOMMAND: //ウィンドウの最小化前にウィンドウ位置を保存 if(wParam==SC_MINIMIZE){ if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1; else if(!IsIconic(hwnd)){ pobj_nv->bWindowMax=0; GetWindowRect(hwnd,&pobj_nv->StartupWindowRect); } } break; //処理をDefFrameProcへ } return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam ); } int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){ WNDCLASSEX wcl; wcl.cbSize=sizeof(WNDCLASSEX); wcl.hInstance=hInst; wcl.lpszClassName=lpClassName; wcl.lpfnWndProc=WndProc; if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS; else wcl.style=0; wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO); if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM); else wcl.hCursor=LoadCursor(NULL,IDC_ARROW); wcl.lpszMenuName=NULL; wcl.cbClsExtra=0; wcl.cbWndExtra=0; wcl.hbrBackground=hBackBrush; return RegisterClassEx(&wcl); } int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){ int i,i2,IsStr; char str[MAX_PATH],str2[MAX_PATH],dummy[1024]; MSG msg; HACCEL hAccel; hInst=hThisInst; if(!SetupProjectEditor()) return 0; HBRUSH hGrayBrush_LineNumber; hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220)); //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0; if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0; if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0; if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0; if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0; if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0; if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0; //Web検索用のウィンドウクラス if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; //ルーラーのウィンドウクラス if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; //SideWebのウィンドウクラス if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0; ActiveBasic::IDE::Program::Main(); //return 0; hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1)); //メインウィンドウ RECT *prc; prc=&pobj_nv->StartupWindowRect; /* hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME, WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN, prc->left, prc->top, prc->right-prc->left, prc->bottom-prc->top, HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL); */ //バックアップ用タイマーを設定(10秒に一回) SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL); SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon); SetClipboardViewer(hOwner); if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE); else ShowWindow(hOwner,ShowCmd); UpdateWindow(hOwner); int open_sw=0; if(lstrlen(lpCmdLine)>0){ lstrcpy(dummy,lpCmdLine); for(i=0,i2=0,IsStr=0;;i++,i2++){ if(dummy[i]=='\"'){ if(IsStr==0) IsStr=1; else IsStr=0; i++; } if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){ str[i2]=0; if(!(strstr(str,":")||strstr(str,"\\\\"))){ lstrcpy(str2,str); GetCurrentDirectory(MAX_PATH,str); lstrcat(str,"\\"); lstrcat(str,str2); } ShortPathToLongPath(str,str2); OpenFileWithExtension(str2); open_sw=1; if(dummy[i]=='\0') break; i2=-1; continue; } str[i2]=dummy[i]; } } BOOL bRestore=0; { //自動バックアップ及び復元機能 //必要であれば復元 bRestore=restore(); } #ifdef THETEXT if(open_sw==0&&bRestore==0){ //ファイルが開かれなかったとき NewTextEditWindow(NULL,WNDTYPE_TEXT); } #endif while(GetMessage(&msg,NULL,0,0)){ if(!TranslateAccelerator(hOwner,hAccel,&msg)){ if( projectInfo.IsOpened() ){ for(i=0,i2=0;ihwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){ if(IsDialogMessage(MdiInfo[i]->MdiRadInfo->hProp_Dlg,&msg)) i2=1; } } if(i2==0){ if(!TranslateMDISysAccel(hClient,&msg)){ TranslateMessage(&msg); DispatchMessage(&msg); } } } else{ if(!TranslateMDISysAccel(hClient,&msg)){ TranslateMessage(&msg); DispatchMessage(&msg); } } } } DeleteObject(hGrayBrush_LineNumber); #if defined HeapAlloc CheckHeapCheck(); #endif return msg.wParam; }