#include "ProjectEditor.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;iiNum;i++){ ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary); if(lstrcmpi(MdiInfo[WndNum].path,temporary)==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ツール //////////////// int WndInfoNum; WndInfoNum=GetWndInfoNum(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",ProjectInfo.pWindowInfo[WndInfoNum].size.cx,ProjectInfo.pWindowInfo[WndInfoNum].size.cy); SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary); } else{ sprintf(temporary,"pos %d, %d", ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x, ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y); SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary); sprintf(temporary,"size %d * %d", ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx, ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[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(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.name[0]){ 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;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_CLIPCHILDREN; 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登録 for(i=0;ihEdit=hEdit; MdiInfo[i].pMdiTextEdit->pobj_WebResult=new CWebResult(hChild); MdiInfo[i].pMdiTextEdit->pobj_Ruler=new CRuler(hChild,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); break; } } //ワードカラーをセット if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(i); //Docコンボボックスに追加 extern HWND 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(); return hChild; } void CreateNewFile(void){ #ifdef THETEXT NewTextEditWindow(NULL,WNDTYPE_TEXT); return; #else int FileType; BOOL bAddToProject; char temporary[MAX_PATH]; FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,DlgNewFile); if(FileType==-1) return; if(FileType&0x00008000){ bAddToProject=1; FileType&=0x0FFF; lstrcpy(temporary,NewFileName); if(!strstr(temporary,".")) lstrcat(temporary,".ab"); GetFullPath(temporary,ProjectInfo.dir); } else bAddToProject=0; switch(FileType){ case FT_BASICPROGRAM: //Basicプログラム case FT_SUBPROGRAM: if(bAddToProject){ WriteBuffer(temporary,0,0); NewTextEditWindow(temporary,WNDTYPE_BASIC); Project_File_Insert(temporary); } else NewTextEditWindow(NULL,WNDTYPE_BASIC); break; case FT_PROJECT: DlgNewProjectWizard(hOwner); break; case FT_TEXT: NewTextEditWindow(NULL,WNDTYPE_TEXT); break; case FT_HTML: NewTextEditWindow(NULL,WNDTYPE_HTML); break; case FT_ICON: NewIconEditWindow(NULL); break; } #endif } void CloseDocWindow(int WndNum){ int i2,i3; MdiInfo[WndNum].hwnd=0; //ドキュメントコンボボックスから文字列を消去 extern HWND hDocCombo; i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title); SendMessage(hDocCombo,CB_DELETESTRING,i2,0); InvalidateRect(hDocCombo,NULL,1); //タブコントロールからアイテムを消去 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true ); GlobalFree(MdiInfo[WndNum].title); GlobalFree(MdiInfo[WndNum].path); 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;i2undo.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;i2num;i2++){ for(i3=0;i3undo[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;i2num;i2++){ HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]); } HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo); } } 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); SendMessage(hDocCombo,CB_SETCURSEL,i2,0); //タブコントロール pobj_MainTab->MdiActiveEvent(MdiInfo[i].title); 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); } void ResizeOwnerWnd(void){ int width_owner,height_owner; int height_Rebar; int height_MdiClient; RECT rect,StatusRect,RebarRect; GetClientRect(hOwner,&rect); width_owner=rect.right; height_owner=rect.bottom; //Rebar SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner)); UpdateWindow(pobj_Rebar->hRebar); //Status bar #define STATUSBAR_PARTS_NUM 5 int sb_size[STATUSBAR_PARTS_NUM]; sb_size[0]=width_owner-340; sb_size[1]=width_owner-220; sb_size[2]=width_owner-120; sb_size[3]=width_owner-50; sb_size[4]=width_owner; SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size); SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner)); UpdateWindow(hStatusBar); //Status bar int height_Statusbar; SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect); height_Statusbar=StatusRect.bottom; GetWindowRect(pobj_Rebar->hRebar,&RebarRect); height_Rebar=RebarRect.bottom-RebarRect.top+2; int height_dv; //Width of Debugger View int height_cv; //Width of Compiler View height_dv=0; height_cv=0; #ifndef THETEXT if(bClipCompileView){ if(pobj_Debugger->IsDebuggerView()){ //デバッガビューが表示されているとき height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK; } if(hCompileView){ //コンパイラビューが表示されているとき height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK; } } #endif int width_pjv=0; //Width of Project View if(pobj_nv->bClipProjectView){ if(IsWindowVisible(hProjectView)){ //プロジェクトビューが表示されているとき width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK; } } int width_SideWeb=0; if(pobj_SideWeb->bShow){ width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK; } //MDIクライアントの高さ height_MdiClient=height_owner-( height_Rebar+ height_dv+ height_cv+ height_Statusbar ); //タブコントロール int tab_height; if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0; else{ RECT rc; TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc); tab_height=rc.bottom-rc.top; } MoveWindow(pobj_MainTab->hTab, width_pjv, height_Rebar, width_owner-width_pjv-width_SideWeb, tab_height, 1); //MDIクライアント MoveWindow(hClient, width_pjv, height_Rebar+tab_height, width_owner-width_pjv-width_SideWeb, height_MdiClient-tab_height, 1); if(pobj_SideWeb->bShow){ //SideWeb pobj_SideWeb->resize( width_owner - pobj_nv->width_WebSearchView, height_Rebar, pobj_nv->width_WebSearchView, height_MdiClient); } else pobj_SideWeb->resize(0,0,0,0); if(width_pjv){ //プロジェクトビュー MoveWindow(hProjectView, 0, height_Rebar, pobj_nv->width_ClipProjectView, height_MdiClient, 1); InvalidateRect(hProjectView,NULL,0); } if(height_dv){ #ifndef THETEXT //デバッガビュー pobj_Debugger->resize( 0, height_Rebar+height_MdiClient+LEVER_THICK, width_owner, pobj_nv->height_ClipDebuggerView); #endif } if(height_cv){ //コンパイラビュー MoveWindow(hCompileView, 0, height_Rebar+height_MdiClient+height_dv+LEVER_THICK, width_owner, pobj_nv->height_ClipCompileView, 1); } } LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){ int i,i2,i3,WndNum; char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp; HWND hChild,hEdit; RECT rect; POINT pos; LPTOOLTIPTEXT TipText; LPNMHDR lpnmhdr; NMPGCALCSIZE *lpCalcSize; NMPGSCROLL *lpScroll; HDROP hDrop; HGLOBAL hGlobal; CHARRANGE CharRange; HANDLE hFile; BOOL bChecked; static COLORREF colorUser=RGB(255,255,255); 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){ case WM_CREATE: SetupWindow(hwnd); //テキストエディタフォント設定 ResetTextEditFont(hwnd); //バックアップ用タイマーを設定(10秒に一回) SetTimer(hwnd,ID_TIMER_BACKUP,10000,NULL); return 0; case WM_TIMER: //Pro版は自動バックアップ及び復元機能を有効にする _beginthread(backup,0,0); #ifndef THETEXT if(wParam==ID_DEBUGSAFTY){ //BasicCompiler.exeが強制終了しているかどうかを検証 pobj_Debugger->SaftyCheck(); } #endif return 0; case WM_DRAWCLIPBOARD: ResetState_EditMenu(); return 0; case WM_MENUSELECT: MenuAdvice(wParam); return 0; case WM_INITMENU: pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1); #ifndef THETEXT pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0); #endif return 0; case WM_MEASUREITEM: LPMEASUREITEMSTRUCT lpMI; lpMI = (LPMEASUREITEMSTRUCT)lParam; if(lpMI->CtlType==ODT_MENU){ SIZE size; CMenuItemData *pobj_MenuItemData; pobj_MenuItemData=(CMenuItemData *)lpMI->itemData; if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){ //メインメニューの親アイテム pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size); lpMI->itemWidth = size.cx; lpMI->itemHeight = size.cy; } else{ //メインメニューにぶらさがるサブメニュー pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size); lpMI->itemWidth = size.cx; lpMI->itemHeight = size.cy; } } return 0; case WM_DRAWITEM: DRAWITEMSTRUCT *pdis; pdis=(DRAWITEMSTRUCT *)lParam; if(pdis->CtlType==ODT_MENU){ if(!pobj_MainMenu) return 0; CMenuItemData *pobj_MenuItemData; pobj_MenuItemData=(CMenuItemData *)pdis->itemData; if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){ //メインメニューの親アイテム pobj_MainMenu->OwnerDrawMenu(pdis->hDC, &pdis->rcItem, (pdis->itemState&ODS_SELECTED)!=0, pobj_MenuItemData->item_index); } else{ //メインメニューにぶらさがるサブメニュー pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu, pdis->hDC, &pdis->rcItem, (pdis->itemState&ODS_SELECTED)!=0, pobj_MenuItemData->item_index); } } return 0; case WM_NOTIFY: if(!lParam) return 0; TipText=(LPTOOLTIPTEXT)lParam; if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText); lpnmhdr=(LPNMHDR)lParam; extern HWND hStandardToolbarPager; extern HWND hDebuggerToolbarPager; if(pobj_Rebar){ //レバーオブジェクトが存在するとき if(lpnmhdr->hwndFrom==pobj_Rebar->hRebar&&lpnmhdr->code==RBN_HEIGHTCHANGE){ ResizeOwnerWnd(); return 0; } } if(lpnmhdr->hwndFrom==hStandardToolbarPager){ if(lpnmhdr->code==PGN_CALCSIZE){ lpCalcSize=(LPNMPGCALCSIZE)lParam; if(lpCalcSize->dwFlag==PGF_CALCWIDTH) lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8; } else if(lpnmhdr->code==PGN_SCROLL){ lpScroll=(LPNMPGSCROLL)lParam; lpScroll->iScroll=20; } } else if(lpnmhdr->hwndFrom==hDebuggerToolbarPager){ if(lpnmhdr->code==PGN_CALCSIZE){ lpCalcSize=(LPNMPGCALCSIZE)lParam; if(lpCalcSize->dwFlag==PGF_CALCWIDTH) lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8; } else if(lpnmhdr->code==PGN_SCROLL){ lpScroll=(LPNMPGSCROLL)lParam; lpScroll->iScroll=20; } } NMHDR *hdr; hdr=(NMHDR *)lParam; if(pobj_MainTab){ if(hdr->hwndFrom==pobj_MainTab->hTab){ if(hdr->code==TCN_SELCHANGE) pobj_MainTab->SelChangeEvent(); if(hdr->code==NM_RCLICK){ TCHITTESTINFO tcHitTest; GetCursorPos(&tcHitTest.pt); ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt); i=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest); if(i==-1) return 0; TabCtrl_SetCurSel(pobj_MainTab->hTab,i); pobj_MainTab->SelChangeEvent(); ///////////////////// // メニューを表示 ///////////////////// hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); //保存コマンドの文字列をセット MENUITEMINFO mii; mii.cbSize=sizeof(MENUITEMINFO); mii.fMask=MIIM_TYPE; mii.dwTypeData=temporary; mii.fType=MFT_STRING; if(MdiInfo[WndNum].path[0]){ _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2); lstrcat(temporary,temp2); lstrcat(temporary," を保存(&S)"); } else{ lstrcpy(temporary,"保存(&S)"); } SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii); /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」 コマンドを場合によって無効化にする */ if(MdiInfo[WndNum].path[0]){ EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED); EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED); } else{ EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED); EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED); } POINT MousePos; GetCursorPos(&MousePos); TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL); } } } if(pobj_SideWeb){ if(hdr->hwndFrom==pobj_SideWeb->hTab&&hdr->code==TCN_SELCHANGE){ pobj_SideWeb->SelChangeEvent(); } } return 0; case WM_COMMAND: switch(LOWORD(wParam)){ case IDM_NEW: CreateNewFile(); return 0; case IDM_OPEN: //"ファイルを指定してください" if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return 0; OpenFileWithExtension(str); return 0; case IDM_CLOSE: hChild=GetWindow(hClient,GW_CHILD); if(IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0); return 0; #ifndef THETEXT case IDM_PROJECT_OPEN: //"プロジェクト ファイルを指定して下さい" if(!GetFilePathDialog(hwnd,str,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE)) return 0; OpenProject(str); return 0; case IDM_PROJECT_SAVE: SaveProject(); return 0; case IDM_PROJECT_CLOSE: CloseProject(); return 0; case IDM_PROJECT_FOLDER_OPEN: ShellExecute(hwnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL); return 0; #endif case IDM_SAVE: SaveDocument(GetWindow(hClient,GW_CHILD),NULL); return 0; case IDM_NEWSAVE: //"保存先のファイルを指定してください" if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0; SaveDocument(GetWindow(hClient,GW_CHILD),str); return 0; case IDM_CODE_SAVE: //文字コードを指定して保存 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),hOwner,nkfDlgCodeSave); return 0; case IDM_ALLSAVE: for(i=0;ibuffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin); pTemp[CharRange.cpMax-CharRange.cpMin]=0; GlobalUnlock(hGlobal); //クリップボードに保存 OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(CF_TEXT,hGlobal); CloseClipboard(); //選択文字列を消去 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0); } else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){ i2=GetWndInfoNum(MdiInfo[WndNum].path); //クリップボードに格納するためのデータを用意する ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17; ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10; hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2); ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17; ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10; OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(dwRadClipboardID,hGlobal); CloseClipboard(); SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0); } else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){ //クリップボードに格納するためのデータを用意する hGlobal=IconEdit_GetChildInfoClipboardData(WndNum); if(hGlobal==0) return 0; OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(CF_BITMAP,hGlobal); CloseClipboard(); DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp); MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0; IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect); } return 0; case IDM_COPY: hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ hEdit=GetWindow(hChild,GW_CHILD); TextEdit_GetSel(WndNum,&CharRange); hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1); pTemp=(char *)GlobalLock(hGlobal); memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin); pTemp[CharRange.cpMax-CharRange.cpMin]=0; GlobalUnlock(hGlobal); //クリップボードに保存 OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(CF_TEXT,hGlobal); CloseClipboard(); } else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){ i2=GetWndInfoNum(MdiInfo[WndNum].path); //クリップボードに格納するためのデータを用意する hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2); OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(dwRadClipboardID,hGlobal); CloseClipboard(); } else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){ //クリップボードに格納するためのデータを用意する hGlobal=IconEdit_GetChildInfoClipboardData(WndNum); OpenClipboard(hwnd); EmptyClipboard(); SetClipboardData(CF_BITMAP,hGlobal); CloseClipboard(); } return 0; case IDM_PASTE: hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ hEdit=GetWindow(hChild,GW_CHILD); //クリップボードを開く OpenClipboard(hwnd); hGlobal=GetClipboardData(CF_TEXT); if(!hGlobal){ CloseClipboard(); return 0; } if(pobj_nv->bPasteIndent){ //インデント整形 pTemp=CodeFormatter((char *)GlobalLock(hGlobal)); GlobalUnlock(hGlobal); } else pTemp=(char *)GlobalLock(hGlobal); //テキストエディタの文字列をリプレイス TextEdit_ReplaceUpdateUndoData(WndNum, pTemp, 1, 1); if(pobj_nv->bPasteIndent) HeapDefaultFree(pTemp); else GlobalUnlock(hGlobal); //クリップボードを閉じる CloseClipboard(); //キャレット位置までスクロールする TextEdit_ScrollCaret(WndNum,0); ResetCaretPos(WndNum); } else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){ OpenClipboard(hwnd); hGlobal=GetClipboardData(dwRadClipboardID); if(!hGlobal){ CloseClipboard(); return 0; } Rad_PasteChildInfoClipboardData(WndNum,hGlobal); CloseClipboard(); } else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){ OpenClipboard(hwnd); hGlobal=GetClipboardData(CF_BITMAP); if(!hGlobal){ CloseClipboard(); return 0; } IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal); CloseClipboard(); } return 0; case IDM_DELETE: hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ hEdit=GetWindow(hChild,GW_CHILD); TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1); } else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD) SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0); return 0; case IDM_ALLSELECT: hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ hEdit=GetWindow(hChild,GW_CHILD); MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0; MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0; GetCaretPosFromBufferIndex( MdiInfo[WndNum].pMdiTextEdit->buffer, lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer), &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos); InvalidateRect(hEdit,NULL,0); ResetState_EditMenu(); } else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){ i2=GetWndInfoNum(MdiInfo[WndNum].path); for(i3=0;i3SelectingItem[i3]=i3; } DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]); } return 0; case IDM_FIND: DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),hOwner,DlgFind); return 0; case IDM_PERMUTATION: DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),hOwner,DlgPermutation); return 0; /////////////////////// // 変換メニュー /////////////////////// case IDM_CONV_ALPHA_SMALL: case IDM_CONV_ALPHA_BIG: case IDM_CONV_HALF: case IDM_CONV_MULTI: case IDM_CONV_KATAKANA: case IDM_CONV_HIRAGANA: case IDM_CONV_SPACE: case IDM_CONV_TAB: #ifdef THETEXT case IDM_CONV_HASRETURN: case IDM_CONV_QUOTE: #else case IDM_CODEFORMAT: #endif TextEdit_Convert(LOWORD(wParam)); return 0; #ifdef THETEXT /////////////////////// // ツールメニュー /////////////////////// case IDM_STRING_COUNT: DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,DlgStringCount,0); return 0; case IDM_SEL_STRING_COUNT: DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,DlgStringCount,1); return 0; #endif //THETEXT case IDM_PROJECTVIEW: if(pobj_nv->bClipProjectView){ if(IsWindowVisible(hProjectView)){ ShowWindow(hProjectView,SW_HIDE); bChecked=0; } else{ ShowWindow(hProjectView,SW_SHOW); bChecked=1; } } else{ if(IsWindowVisible(hProjectView_ToolWindow)){ ShowWindow(hProjectView_ToolWindow,SW_HIDE); bChecked=0; } else{ ShowWindow(hProjectView_ToolWindow,SW_SHOW); ShowWindow(hProjectView,SW_SHOW); bChecked=1; } } pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked); //再配置 ResizeOwnerWnd(); ShowWindow(hClient,SW_SHOW); return 0; case IDM_PROJECT_OPTION: DlgProjectOptionSetting(hwnd); return 0; case IDM_TOPMOST: if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){ SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); pobj_MainMenu->CheckMenu(IDM_TOPMOST,0); } else{ SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); pobj_MainMenu->CheckMenu(IDM_TOPMOST,1); } return 0; #ifdef THETEXT case IDM_RIGHT_TURN: pobj_nv->bRightTurn^=1; ResetState_ViewMenu(); //トップのウィンドウを再描画 RedrawAllWindow(); return 0; #endif case IDM_SET: DlgOptionSetting(hwnd); return 0; #ifndef THETEXT case IDM_DEBUG: if(pobj_Debugger->IsDebugging()){ pobj_Debugger->DebugContinue(); return 0; } hChild=GetWindow(hClient,GW_CHILD); if(ProjectInfo.name[0]){ //プロジェクトが開かれている場合 if(!SetProjectToRun()) return 0; //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ) sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine); sprintf(temp2,"%spgm.tmp",pj_editor_Dir); hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL); DWORD dwAccessBytes; WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL); CloseHandle(hFile); //ソースファイル名をtemp2へ ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2); //出力ファイル名をtemp3へ lstrcpy(temp3,ProjectInfo.lpszOutput_Debug); GetFullPath(temp3,ProjectInfo.dir); if(IsNeedCompileForProject(1)) sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd); else sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd); //DLLオプション if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll"); //ブレークポイントをセーブ ProjectInfo.pobj_DBBreakPoint->SaveToTempFile(); } else{ //単独ソースコード if(!SetRunning(hChild)) return 0; if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1)) sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd); else sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd); //ブレークポイントをセーブ pobj_DBBreakPoint->SaveToTempFile(); } //コンパイルビューをクリップするかどうか if(bClipCompileView){ lstrcat(temporary," /clip_compile_view"); //コンパイラビューを閉じる if(hCompileView==(HWND)-1) return 0; if(hCompileView){ hChild=hCompileView; hCompileView=(HWND)-1; SendMessage(hChild,WM_COMMAND,IDCANCEL,0); } //重複起動防止のため hCompileView=(HWND)-1; } sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName); ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL); return 0; case IDM_DEBUGCOMPILE: hChild=GetWindow(hClient,GW_CHILD); if(ProjectInfo.name[0]){ //プロジェクトが開かれている場合 if(!SetProjectToRun()) return 0; //ソースファイル名をtemp2へ ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2); //出力ファイル名をtemp3へ lstrcpy(temp3,ProjectInfo.lpszOutput_Debug); GetFullPath(temp3,ProjectInfo.dir); sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd); //DLLオプション if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll"); } else{ //単独ソースコード if(!SetRunning(hChild)) return 0; sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd); } //コンパイルビューをクリップするかどうか if(bClipCompileView){ lstrcat(temporary," /clip_compile_view"); //コンパイラビューを閉じる if(hCompileView==(HWND)-1) return 0; if(hCompileView){ hChild=hCompileView; hCompileView=(HWND)-1; SendMessage(hChild,WM_COMMAND,IDCANCEL,0); } //重複起動防止のため hCompileView=(HWND)-1; } //インクルードディレクトリ sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir); lstrcat(temporary,temp2); sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName); ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL); return 0; case IDM_ATTACH: int idProcess; DWORD dwPlatform; idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,DlgAttach,(LPARAM)&dwPlatform); if(idProcess==0) return 0; sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd); //コンパイルビューをクリップするかどうか if(bClipCompileView){ lstrcat(temporary," /clip_compile_view"); //コンパイラビューを閉じる if(hCompileView==(HWND)-1) return 0; if(hCompileView){ hChild=hCompileView; hCompileView=(HWND)-1; SendMessage(hChild,WM_COMMAND,IDCANCEL,0); } //重複起動防止のため hCompileView=(HWND)-1; } //インクルードディレクトリ sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir); lstrcat(temporary,temp2); if(dwPlatform==IMAGE_FILE_MACHINE_I386) sprintf(str,"%s%s",pj_editor_Dir,WIN32_COMPILER_NAME); else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64) sprintf(str,"%s%s",pj_editor_Dir,WIN64_COMPILER_NAME); ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL); return 0; case IDM_RELEASECOMPILE: hChild=GetWindow(hClient,GW_CHILD); if(ProjectInfo.name[0]){ //プロジェクトが開かれている場合 if(!SetProjectToRun()) return 0; //ソースファイル名をtemp2へ ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2); //出力ファイル名をtemp3へ lstrcpy(temp3,ProjectInfo.lpszOutput_Release); GetFullPath(temp3,ProjectInfo.dir); sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd); //DLLオプション if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll"); } else{ //単独ソースコード if(!SetRunning(hChild)) return 0; sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd); } //コンパイルビューをクリップするかどうか if(bClipCompileView){ lstrcat(temporary," /clip_compile_view"); //コンパイラビューを閉じる if(hCompileView==(HWND)-1) return 0; if(hCompileView){ hChild=hCompileView; hCompileView=(HWND)-1; SendMessage(hChild,WM_COMMAND,IDCANCEL,0); } //重複起動防止のため hCompileView=(HWND)-1; } //インクルードディレクトリ sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir); lstrcat(temporary,temp2); sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName); ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL); return 0; case IDM_RELEASERUN: hChild=GetWindow(hClient,GW_CHILD); if(ProjectInfo.name[0]){ /* //プロジェクトが開かれている場合 if(!SetProjectToRun()) return 0; //必要であればリリースコンパイル if(IsNeedCompileForProject(0)) SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/ if(ProjectInfo.dwModuleType==MT_DLL){ lstrcpy(temporary,ProjectInfo.szExePath); } else{ lstrcpy(temporary,ProjectInfo.lpszOutput_Debug); GetFullPath(temporary,ProjectInfo.dir); } } else{ /* //必要であればリリースコンパイル if(!SetRunning(hChild)) return 0; if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0)) SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/ //単独ソースコード _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL); lstrcat(temporary,temp2); lstrcat(temporary,temp3); lstrcat(temporary,".exe"); } //インクルードディレクトリ sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir); lstrcat(temporary,temp2); ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL); return 0; //////////////////////// // デバッグ コマンド //////////////////////// case IDM_STEP_IN: pobj_Debugger->StepIn(); break; case IDM_STEP_OVER: pobj_Debugger->StepOver(); break; case IDM_STEP_CURSOR: pobj_Debugger->StepToCursor(); break; case IDM_BREAKPOINT: if(ProjectInfo.name[0]){ ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint(); } else{ pobj_DBBreakPoint->Event_BreakPoint(); } break; case IDM_DEBUG_STOP: pobj_Debugger->DebugStop(); break; case IDM_DEBUG_PAUSE: pobj_Debugger->DebugPause(); break; case IDM_COMMUNITY: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/", NULL,SW_SHOWNORMAL); return 0; case IDM_COMMU_SEARCH: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/search.php", NULL,SW_SHOWNORMAL); return 0; case IDM_COMMU_PM: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/privmsg.php?folder=inbox", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM1: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=1", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM2: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=2", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM3: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=5", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM4: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=3", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM5: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=6", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM6: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=8", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM7: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=4", NULL,SW_SHOWNORMAL); return 0; case ID_COMMU_FORUM8: ShellExecute(hwnd,"open","iexplore.exe", "http://www.activebasic.com/forum/viewforum.php?f=7", NULL,SW_SHOWNORMAL); return 0; #endif //THETEXT case IDM_TOPIC: #ifdef THETEXT sprintf(str,"%sTopics\\index.html",pj_editor_Dir); ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL); #else sprintf(str,"%sBasicHelp.chm",pj_editor_Dir); HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0); #endif return 0; #ifdef THETEXT case IDM_DSHOMEPAGE: ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL); return 0; #else case IDM_AB_WEBSITE: ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL); return 0; case IDM_ACTBDL: ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL); return 0; #endif case IDM_ABOUT: DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,DialogAbout); return 0; case IDM_WEB_SEARCH: hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ extern HWND hWebSearchCombo; SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0); } return 0; ////////////////////////////////////////////////////// // レバーコントロールのサブメニューコマンド(レバー追加) ////////////////////////////////////////////////////// case IDM_DOCSELECTBAND: pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO); return 0; case IDM_STANDARDBAND: pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR); return 0; #ifndef THETEXT case IDM_RELEASEBAND: pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR); return 0; case IDM_DEBUGBAND: pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR); return 0; case IDM_SELECTCOMPILERBAND: pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO); return 0; #endif case IDM_BANDMENU_WEB_SEARCH: pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH); return 0; case IDM_NOGRIPPER: if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0; else pobj_nv->bNoGripper=1; //レバーコントロールを再生成 pobj_Rebar->ResetRebar(); //メニュー状態を設定 ResetState_DocMenu(); return 0; case IDM_RESET_REBAR: //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?" if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break; //レバーコントロールを再生成 pobj_Rebar->ResetInitRebar(); //メニュー状態を設定 ResetState_DocMenu(); return 0; //////////////////////////////////////////////////// // メイン タブ コントロールのサブメニューコマンド //////////////////////////////////////////////////// case IDM_ALLCLOSE_OMIT_MYSELF: //このウィンドウ以外をすべて閉じる(&A) hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); for(i=0;iUnModify(); SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0); return 0; case IDM_USER_COLOR: { CHOOSECOLOR cc; COLORREF CusColors[16]={ RGB(255,255,255), RGB(0,0,0), RGB(128,128,128), RGB(192,192,192), RGB(128,0,0), RGB(255,0,0), RGB(128,128,0), RGB(255,255,0), RGB(0,128,0), RGB(0,255,0), RGB(0,128,128), RGB(0,255,255), RGB(0,0,128), RGB(0,0,255), RGB(128,0,128), RGB(255,0,255)}; cc.lStructSize=sizeof(CHOOSECOLOR); cc.hwndOwner=hwnd; cc.rgbResult=colorUser; cc.lpCustColors=CusColors; cc.Flags=CC_RGBINIT|CC_FULLOPEN; if(!ChooseColor(&cc)){ return 0; } colorUser=cc.rgbResult; } case IDM_GRAY: case IDM_WHITE: case IDM_RED: case IDM_GREEN: case IDM_BLUE: case IDM_YELLOW: hChild=GetWindow(hClient,GW_CHILD); WndNum=GetWndNum(hChild); TC_ITEM tcItem; tcItem.mask=TCIF_PARAM; if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY; if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE; if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED; if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN; if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE; if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW; if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser; TabCtrl_SetItem(pobj_MainTab->hTab, TabCtrl_GetCurSel(pobj_MainTab->hTab), &tcItem); InvalidateRect(pobj_MainTab->hTab,NULL,0); return 0; ////////////////////////////////// // SideWeb ////////////////////////////////// case IDC_CLIP: pobj_SideWeb->bShow=0; ResizeOwnerWnd(); return 0; } break; case WM_DROPFILES: hDrop=(HDROP)wParam; i2=DragQueryFile(hDrop,-1,0,0); for(i=0;ibuffer; //行の先頭インデックスを取得(取得する行の番号はwParamで渡される) for(i=0,i2=0;;i++){ if(i2>=(int)wParam) break; if(pTemp[i]=='\0') break; if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){ i++; i2++; } } pos.x=i; //行の終端インデックスを取得 for(;;i++){ if(pTemp[i]=='\0') break; if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break; } pos.y=i; //行を選択する TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE); return 0; #ifndef THETEXT case WM_SETCOMPILEVIEW: //コンパイラウィンドウ(埋め込み型)が表示されたとき hCompileView=(HWND)lParam; ResizeOwnerWnd(); return 0; case WM_DESTROYCOMPILEVIEW: //コンパイラウィンドウ(埋め込み型)が破棄されたとき if((int)hCompileView==-1){ //すぐに次のコンパイラウィンドウが起動するとき hCompileView=0; } else{ //完全にコンパイラウィンドウを閉じたときはリサイズ hCompileView=0; ResizeOwnerWnd(); } 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); ResizeOwnerWnd(); return 0; case WM_DESTROYDEBUGGERVIEW: //デバッガウィンドウ(埋め込み型)が破棄されたとき pobj_Debugger->watch_quit(); ResizeOwnerWnd(); return 0; #endif case WM_SIZE: ResizeOwnerWnd(); return 0; 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; } ResizeOwnerWnd(); 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->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->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へ case WM_QUERYENDSESSION: case WM_CLOSE: extern BOOL bSearchingClasses; if(bSearchingClasses){ pobj_ClassTreeView->bCloseSwitch=1; return 0; } //コンパイラビューを閉じる if(hCompileView) SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0); //次回起動時にMDIウィンドウを最大化させるかを判定 hChild=GetWindow(hClient,GW_CHILD); pobj_nv->bMDIZoomed=IsZoomed(hChild); //プロジェクトを閉じる if(ProjectInfo.name[0]){ if(!CloseProject()) return 0; } //MDIウィンドウの保存確認 hChild=GetWindow(hClient,GW_CHILD); while(hChild){ i=GetWndNum(hChild); if(!DocumentModifyCheck(hChild)) return 0; hChild=GetNextWindow(hChild,GW_HWNDNEXT); } KillTimer(hwnd,ID_TIMER_BACKUP); //ProjectViewの位置を保存、ProjectViewを破棄 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView); DestroyWindow(hProjectView); DestroyWindow(hProjectView_ToolWindow); //Rebarの位置を保存、Rebarを破棄 delete pobj_Rebar; pobj_Rebar=0; //タブコントロールを破棄 delete pobj_MainTab; pobj_MainTab=0; //SideWebを破棄 delete pobj_SideWeb; pobj_SideWeb=0; //メインウィンドウの最大化有無、座標を保存 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1; else if(!IsIconic(hwnd)){ pobj_nv->bWindowMax=0; GetWindowRect(hwnd,&pobj_nv->StartupWindowRect); } hChild=GetWindow(hClient,GW_CHILD); while(hChild){ CloseDocWindow(GetWndNum(hChild)); DestroyWindow(hChild); hChild=GetWindow(hClient,GW_CHILD); } EndProjectEditor(); //ProjectEditorの情報を保存 //エディタ用フォントを破棄 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit; if(hFont_TextEdit) DeleteObject(hFont_TextEdit); if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit); DestroyWindow(hwnd); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefFrameProc(hwnd,hClient,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,"ProjectEditor",(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; hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1)); //メインウィンドウ RECT *prc; prc=&pobj_nv->StartupWindowRect; hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditor",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); 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.name[0]){ for(i=0,i2=0;ihProp_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; }