#include "Common.h" void ScreenToClient(HWND hwnd,RECT *pRect){ ScreenToClient(hwnd,(POINT *)pRect); ScreenToClient(hwnd,(POINT *)(((long)(void *)pRect)+sizeof(POINT))); } void ClientToScreen(HWND hwnd,RECT *pRect){ ClientToScreen(hwnd,(POINT *)pRect); ClientToScreen(hwnd,(POINT *)(((long)(void *)pRect)+sizeof(POINT))); } typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE hProcess,PBOOL Wow64Process); BOOL IsWow64(void){ /////////////////////////////////////////////////////////// // ProjectEditor.exeがWOW64技術で動作しているのかどうか /////////////////////////////////////////////////////////// BOOL bIsWow64 = FALSE; LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process"); if (NULL != fnIsWow64Process) { if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64)) { // handle error bIsWow64 = FALSE; } } return bIsWow64; } void URLEncode(LPSTR pszSrc){ char *temp; temp=(char *)malloc(65535); int i,i2; for (i = 0,i2=0; ; i++,i2++) { if(pszSrc[i]=='\0'){ temp[i2] = 0; break; } // 英数字 _ . - は変換しないでそのまま if (isalnum((BYTE)pszSrc[i]) || pszSrc[i] == '_' || pszSrc[i] == '.' || pszSrc[i] == '-'){ temp[i2] = pszSrc[i]; } // それ以外は %3B のような形式に変換 else{ sprintf(temp+i2,"%%%02X", (BYTE)pszSrc[i]); i2+=lstrlen(temp+i2); i2--; } } lstrcpy(pszSrc,temp); free(temp); } void Digit(int num,char *buffer){ char temporary[255]; int i,iPos; sprintf(temporary,"%d",abs(num)); //カンマが不要の場合は抜ける if(lstrlen(temporary)<=3){ wsprintf(buffer,"%d",num); return; } //合計の文字数からバッファを確保 if(num<0){ buffer[0]='-'; iPos=1; } else{ buffer[0]=0; iPos=0; } //3桁毎にカンマを加えながら文字列をコピーする int iFirst; iFirst=lstrlen(temporary)%3; if(iFirst==0) iFirst=3; memcpy(buffer+iPos,temporary,iFirst); iPos+=iFirst; int i2; i2=(lstrlen(temporary)-4)/3; for(i=0;i<=i2;i++){ buffer[iPos]=','; iPos++; memcpy(buffer+iPos,temporary+i*3+iFirst,3); iPos+=3; buffer[iPos]=0; } } void RectNaturalFormat(RECT *ReadRect,RECT *CopyRect){ if(ReadRect->left > ReadRect->right){ CopyRect->left=ReadRect->right; CopyRect->right=ReadRect->left; } else{ CopyRect->left=ReadRect->left; CopyRect->right=ReadRect->right; } if(ReadRect->top > ReadRect->bottom){ CopyRect->top=ReadRect->bottom; CopyRect->bottom=ReadRect->top; } else{ CopyRect->top=ReadRect->top; CopyRect->bottom=ReadRect->bottom; } } void RectNaturalFormat(int *x1,int *y1,int *x2,int *y2){ int temp; if(*x1>*x2){ temp=*x1; *x1=*x2; *x2=temp; } if(*y1>*y2){ temp=*y1; *y1=*y2; *y2=temp; } } void KillSpaces(char *str1,char *str2){ int i,i2,IsStr; for(i=0,i2=0,IsStr=0;;i++,i2++){ while((str1[i]==' '||str1[i]=='\t')&&IsStr==0&&str1[i]!='\0') i++; if(str1[i]=='\"') IsStr^=1; str2[i2]=str1[i]; if(str1[i]=='\0') break; } } void RemoveStringQuotes(char *str){ int i; if(str[0]!='\"') return; for(i=0;;i++){ str[i]=str[i+1]; if(str[i]=='\"') break; } str[i]=0; } void SlideString(char *buffer, int slide){ char *temp; temp=(char *)malloc(lstrlen(buffer)+1); lstrcpy(temp,buffer); lstrcpy(buffer+slide,temp); free(temp); } void SlideBuffer(char *buffer,int length,int slide){ void *temp; temp=malloc(length+1); memcpy(temp,buffer,length); memcpy(buffer+slide,temp,length); free(temp); } BOOL IsVariableTopChar(char c){ if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c=='_') return 1; return 0; } BOOL IsVariableChar(char c){ if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')|| c=='_'||c=='.'||c=='$') return 1; return 0; } BOOL IsCommandBackDelimitation(char *buffer,int pos){ if(buffer[pos]=='\n'||buffer[pos]==':') return 1; return 0; } BOOL IsCommandDelimitation(char *buffer,int p){ if(buffer[p]=='\r'&&buffer[p+1]=='\n') return 2; if(buffer[p]=='\n'||buffer[p]==':'||buffer[p]=='\0') return 1; return 0; } char *ComparisonString(char *str1,char *str2,BOOL bBigSmall){ int i,i2,i3,len1,len2; len1=lstrlen(str1); len2=lstrlen(str2); for(i=0;icx; BitmapInfo.bmiHeader.biHeight=pSize->cy; BitmapInfo.bmiHeader.biPlanes=1; BitmapInfo.bmiHeader.biBitCount=24; HDC hdc; hdc=GetDC(GetDesktopWindow()); HBITMAP hBitmap; BYTE *pByte; hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0); int i,i2,x,y; COLORREF rgb; i=BitmapInfo.bmiHeader.biWidth*3; if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG)); for(y=0;yBitmapInfo.bmiHeader.biHeight/2+2) rgb=color1; else{ double ratio; ratio=((double)y-((double)BitmapInfo.bmiHeader.biHeight/(double)2-(double)2))/(double)4; //ratio=(double)y/(double)BitmapInfo.bmiHeader.biHeight; rgb=RGB( LOBYTE(LOWORD(color2))+(int)(double)(LOBYTE(LOWORD(color1))-LOBYTE(LOWORD(color2)))*(ratio), //赤要素 HIBYTE(LOWORD(color2))+(int)(double)(HIBYTE(LOWORD(color1))-HIBYTE(LOWORD(color2)))*(ratio), //緑要素 LOBYTE(HIWORD(color2))+(int)(double)(LOBYTE(HIWORD(color1))-LOBYTE(HIWORD(color2)))*(ratio) //青要素 ); } for(x=0;xcx; BitmapInfo.bmiHeader.biHeight=pSize->cy; BitmapInfo.bmiHeader.biPlanes=1; BitmapInfo.bmiHeader.biBitCount=24; HDC hdc; hdc=GetDC(GetDesktopWindow()); HBITMAP hBitmap; BYTE *pByte; hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0); int i,i2,x,y; COLORREF rgb; i=BitmapInfo.bmiHeader.biWidth*3; if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG)); for(y=0;yBitmapInfo.bmiHeader.biHeight/2+2) rgb=color1; else{ double ratio; ratio=(double)y/(double)BitmapInfo.bmiHeader.biHeight; rgb=RGB( LOBYTE(LOWORD(color2))+(int)(double)(LOBYTE(LOWORD(color1))-LOBYTE(LOWORD(color2)))*(ratio), //赤要素 HIBYTE(LOWORD(color2))+(int)(double)(HIBYTE(LOWORD(color1))-HIBYTE(LOWORD(color2)))*(ratio), //緑要素 LOBYTE(HIWORD(color2))+(int)(double)(LOBYTE(HIWORD(color1))-LOBYTE(HIWORD(color2)))*(ratio) //青要素 ); } for(x=0;xcx; BitmapInfo.bmiHeader.biHeight=pSize->cy; BitmapInfo.bmiHeader.biPlanes=1; BitmapInfo.bmiHeader.biBitCount=24; HDC hdc; hdc=GetDC(GetDesktopWindow()); HBITMAP hBitmap; BYTE *pByte; hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0); int i,i2,x,y; COLORREF rgb; i=BitmapInfo.bmiHeader.biWidth*3; if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG)); for(x=0;xcx=pRect->right-pRect->left; pSize->cy=pRect->bottom-pRect->top; } BOOL HitTest(RECT *pRect,POINT *pPos){ if(pRect->left<=pPos->x&&pPos->xright&& pRect->top<=pPos->y&&pPos->ybottom) return 1; return 0; } BOOL Rectangle(HDC hdc,RECT *pRect){ return Rectangle(hdc,pRect->left,pRect->top,pRect->right,pRect->bottom); } void ComboBox_SetSelText(HWND hCombo,char *lpszText){ SendMessage(hCombo,CB_SETCURSEL, SendMessage(hCombo,CB_FINDSTRINGEXACT,0,(LPARAM)lpszText), 0); } void SetCursorByState(int state){ if(state==FRAME_UPPER_LEFT||state==FRAME_LOWER_RIGHT) SetCursor(LoadCursor(0,IDC_SIZENWSE)); else if(state==FRAME_UPPER_RIGHT||state==FRAME_LOWER_LEFT) SetCursor(LoadCursor(0,IDC_SIZENESW)); else if(state==FRAME_LEFT||state==FRAME_RIGHT) SetCursor(LoadCursor(0,IDC_SIZEWE)); else if(state==FRAME_UPPER||state==FRAME_LOWER) SetCursor(LoadCursor(0,IDC_SIZENS)); else if(state==FRAME_INSIDE) SetCursor(LoadCursor(0,IDC_SIZEALL)); else SetCursor(LoadCursor(0,IDC_ARROW)); } void SetTextEditColorDesign(TEXTEDIT_COLOR_INFO *pColorInfo,CTheme *pobj_Theme,BOOL bRedraw){ pColorInfo->rgbDefault=pobj_Theme->TextColorInfo.rgbDefault; pColorInfo->rgbComment=pobj_Theme->TextColorInfo.rgbComment; pColorInfo->rgbStatement=pobj_Theme->TextColorInfo.rgbStatement; pColorInfo->rgbString=pobj_Theme->TextColorInfo.rgbString; pColorInfo->rgbCursorBack=pobj_Theme->TextColorInfo.rgbCursorBack; pColorInfo->rgbBackground=pobj_Theme->TextColorInfo.rgbBackground; //アクティブテーマにセット lstrcpy(pobj_nv->szActiveTheme,pobj_Theme->m_name); //テーマ依存の描画リソースを取得 pobj_DBTheme->unlock(); pobj_DBTheme->lock(); if(bRedraw){ //再描画 extern MDIINFO MdiInfo[MAX_WNDNUM]; int i; for(i=0;ihEdit,NULL,0); } } } } } BOOL SerialCheck(char *buffer){ _int64 i64; i64=_atoi64(buffer); i64=(i64*2-129374); i64=(i64*3-34564); i64=(i64*4-2334); if(i64==SERIAL_HASH_64) return 1; return 0; } void SerialCheck_IniFile(void){ char temporary[MAX_PATH]; sprintf(temporary,"%sUserSetting\\sh.ini",pj_editor_Dir); char *buffer; buffer=ReadBuffer_NonErrMsg(temporary); if(buffer){ _int64 i64; i64=_atoi64(buffer); if(i64==SERIAL_HASH_64){ bProfessional=1; } HeapDefaultFree(buffer); } } void WriteSerialHash(void){ MakeUserSettingDir(); char temporary[MAX_PATH],temp2[255]; sprintf(temporary,"%sUserSetting\\sh.ini",pj_editor_Dir); _i64toa(SERIAL_HASH_64,temp2,10); WriteBuffer(temporary,temp2,lstrlen(temp2)); } BOOL SetupProjectEditor(void){ extern HINSTANCE hInst; int i; char str[MAX_PATH],temporary[MAX_PATH]; //リソース用DLLをマッピング #if defined(JPN) //日本語リソース sprintf(temporary,"%sSubOperation\\res.dll",pj_editor_Dir); #else //英語リソース sprintf(temporary,"%sSubOperation\\res_e.dll",pj_editor_Dir); #endif hResInst=LoadLibrary(temporary); //アイコンリソースDLLをマッピング sprintf(temporary,"%sSubOperation\\icon_res.dll",pj_editor_Dir); hIconResInst=LoadLibrary(temporary); //LuxCtrl.dllをマッピング sprintf(temporary,"%sSubOperation\\LuxCtrl.dll",pj_editor_Dir); hLib_LuxCtrl=LoadLibrary(temporary); if(!hLib_LuxCtrl){ MessageBox(0,"LuxCtrl.dllの読み込みに失敗しました。",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION); return 0; } LuxToolbar_CreateInstance= (PROC_LuxToolbar_CreateInstance)GetProcAddress(hLib_LuxCtrl,"LuxToolbar_CreateInstance"); //モジュールディレクトリを取得 GetModuleFileName(hInst,temporary,MAX_PATH); _splitpath(temporary,pj_editor_Dir,str,NULL,NULL); lstrcat(pj_editor_Dir,str); //ヒープオブジェクトを作成 extern HANDLE hHeap; hHeap=HeapCreate(HEAP_GENERATE_EXCEPTIONS,0,0); /////////////////////////////// // シリアルIDの確認 /////////////////////////////// #ifdef SHAREWARE //Pro版の場合はシリアル確認を行う SerialCheck_IniFile(); if(bProfessional==0){ if(DialogBox(hResInst,MAKEINTRESOURCE(IDD_PASSWORD),0,DlgPassword)){ bProfessional=1; WriteSerialHash(); DialogBox(hResInst,MAKEINTRESOURCE(IDD_PROFESSIONAL_START),0,DlgProfessionalStart); } else{ MessageBox(0,"機能制限がかかったスタンダードモードで起動します。",APPLICATION_NAME,MB_OK); } } #endif #ifndef THETEXT //ProjectEditorの場合はシリアル確認を行う SerialCheck_IniFile(); #endif if(bProfessional){ //Pro版は自動バックアップ及び復元機能を有効にする //自動バックアップ用のディレクトリを生成 CreateBackupDir(); } //COMを初期化 CoInitialize(0); //スクリーンサイズを取得 ScreenX=GetSystemMetrics(SM_CXSCREEN); ScreenY=GetSystemMetrics(SM_CYSCREEN); //コンパイラ名をセット(デフォルトはWin32) extern char *lpszCompilerName; lpszCompilerName=WIN32_COMPILER_NAME; //不揮発性のデータを取得 pobj_nv=new CNonVolatile; pobj_nv->load(); if(!bProfessional){ //フリー版ではWeb検索の結果を残さない pobj_nv->bSaveWebFindStr=0; //フリー版ではCtrlキーによるリンク pobj_nv->bCtrlKeyHyperLink=0; } //アルファブレンド用のAPIを取得 extern FWINLAYER SetLayeredWindowAttributes; extern HINSTANCE hUser32Lib; hUser32Lib=LoadLibrary("user32.dll"); SetLayeredWindowAttributes=(FWINLAYER)GetProcAddress(hUser32Lib,"SetLayeredWindowAttributes"); ///////////////////// // フォントを定義 ///////////////////// //パラメータ ヒント フォント extern METHODCHECKINFO MethodCheckInfo; MethodCheckInfo.hFont=CreateFontIndirect(&MethodCheckInfo.LogFont); i=MethodCheckInfo.LogFont.lfWeight; MethodCheckInfo.LogFont.lfWeight=FW_BOLD; MethodCheckInfo.hBoldFont=CreateFontIndirect(&MethodCheckInfo.LogFont); MethodCheckInfo.LogFont.lfWeight=i; //ステータスバー フォント LOGFONT LogFont; extern HFONT hStatusFont; LogFont.lfHeight=-12; LogFont.lfWidth=0; LogFont.lfEscapement=0; LogFont.lfOrientation=0; LogFont.lfWeight=FW_REGULAR; LogFont.lfItalic=NULL; LogFont.lfUnderline=NULL; LogFont.lfStrikeOut=NULL; LogFont.lfCharSet=SHIFTJIS_CHARSET; LogFont.lfOutPrecision=OUT_STRING_PRECIS; LogFont.lfClipPrecision=CLIP_STROKE_PRECIS; LogFont.lfQuality=DRAFT_QUALITY; LogFont.lfPitchAndFamily=VARIABLE_PITCH; sprintf(LogFont.lfFaceName,"MS Pゴシック"); hStatusFont=CreateFontIndirect(&LogFont); //ハイパーリンク フォント extern HFONT hHyperLinkFont; LogFont.lfHeight=-12; LogFont.lfWidth=0; LogFont.lfEscapement=0; LogFont.lfOrientation=0; LogFont.lfWeight=FW_REGULAR; LogFont.lfItalic=NULL; LogFont.lfUnderline=TRUE; LogFont.lfStrikeOut=NULL; LogFont.lfCharSet=SHIFTJIS_CHARSET; LogFont.lfOutPrecision=OUT_STRING_PRECIS; LogFont.lfClipPrecision=CLIP_STROKE_PRECIS; LogFont.lfQuality=DRAFT_QUALITY; LogFont.lfPitchAndFamily=VARIABLE_PITCH; sprintf(LogFont.lfFaceName,"MS Pゴシック"); hHyperLinkFont=CreateFontIndirect(&LogFont); //ルーラー フォント extern HFONT hRulerFont; LogFont.lfHeight=-10; LogFont.lfWidth=0; LogFont.lfEscapement=0; LogFont.lfOrientation=0; LogFont.lfWeight=FW_REGULAR; LogFont.lfItalic=NULL; LogFont.lfUnderline=0; LogFont.lfStrikeOut=NULL; LogFont.lfCharSet=SHIFTJIS_CHARSET; LogFont.lfOutPrecision=OUT_STRING_PRECIS; LogFont.lfClipPrecision=CLIP_STROKE_PRECIS; LogFont.lfQuality=DRAFT_QUALITY; LogFont.lfPitchAndFamily=VARIABLE_PITCH; sprintf(LogFont.lfFaceName,"MS ゴシック"); hRulerFont=CreateFontIndirect(&LogFont); //行番号の描画用 extern HFONT hFont_LineNumber; LogFont.lfHeight=-11; LogFont.lfWidth=0; LogFont.lfEscapement=0; LogFont.lfOrientation=0; LogFont.lfWeight=FW_BOLD; LogFont.lfItalic=NULL; LogFont.lfUnderline=NULL; LogFont.lfStrikeOut=NULL; LogFont.lfCharSet=ANSI_CHARSET; LogFont.lfOutPrecision=OUT_STRING_PRECIS; LogFont.lfClipPrecision=CLIP_STROKE_PRECIS; LogFont.lfQuality=DRAFT_QUALITY; LogFont.lfPitchAndFamily=VARIABLE_PITCH; sprintf(LogFont.lfFaceName,"Courier New"); hFont_LineNumber=CreateFontIndirect(&LogFont); //メニューフォント NONCLIENTMETRICS NCMetrics; NCMetrics.cbSize = sizeof( NONCLIENTMETRICS ); SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &NCMetrics, 0 ); hMenuFont=CreateFontIndirect(&NCMetrics.lfMenuFont); //背景ブラシ extern HBRUSH h3DFaceBackBrush; h3DFaceBackBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE)); //アイコン extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon; hOwnerIcon=(HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); hBasicProgramIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_BASICPROGRAM),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); hTextDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); hWindowDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_WINDOW),IMAGE_ICON,16,16,LR_DEFAULTCOLOR); //メインメニュー pobj_MainMenu=new CMenuEx(LoadMenu(hResInst,MAKEINTRESOURCE(IDR_MAINMENU))); if(!bProfessional){ //フリー版の場合はプレビュー機能を削除する RemoveMenu(GetSubMenu(pobj_MainMenu->hMenu,0),IDM_PREVIEW,MF_BYCOMMAND); } pobj_MainMenu->InitOwnerDraw(1); //オーナー描画の初期化 CSubMenuEx *pobj_FileMenu; pobj_FileMenu=pobj_MainMenu->ppobj_MenuItemData[0]->pobj_SubMenu; //未完成 extern HMENU hFirstMainMenu; hFirstMainMenu=0; //「最近使ったファイル」サブメニューを取得(と同時にも正規のメニュー文字列を指定) for(i=0;iiMenuItemNum;i++){ if(pobj_FileMenu->ppobj_MenuItemData[i]->str){ if(lstrcmp(pobj_FileMenu->ppobj_MenuItemData[i]->str,"FileHistory")==0){ pobj_FileMenu->RenameMenuItem(i,"最近使ったファイル(&F)"); extern CSubMenuEx *pobj_FileHistoryMenu; pobj_FileHistoryMenu=pobj_FileMenu->ppobj_MenuItemData[i]->pobj_SubMenu; } #ifndef THETEXT //「最近使ったプロジェクト」サブメニューを取得(と同時にも正規のメニュー文字列を指定) //※ProjectEditorのみ if(lstrcmp(pobj_FileMenu->ppobj_MenuItemData[i]->str,"ProjectHistory")==0){ pobj_FileMenu->RenameMenuItem(i,"最近使ったプロジェクト(&J)"); extern CSubMenuEx *pobj_ProjectHistoryMenu; pobj_ProjectHistoryMenu=pobj_FileMenu->ppobj_MenuItemData[i]->pobj_SubMenu; } #endif } } #define ICONSET(itemID,iconID) pobj_MainMenu->SetIcon(itemID,(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(iconID),IMAGE_ICON,16,16,0)); //メニューアイコンをセット //ファイル ICONSET(IDM_NEW,IDI_NEW); ICONSET(IDM_OPEN,IDI_OPEN); ICONSET(IDM_SAVE,IDI_SAVE); ICONSET(IDM_ALLSAVE,IDI_ALLSAVE); ICONSET(IDM_PREVIEW,IDI_PREVIEW); ICONSET(IDM_PRINTOUT,IDI_PRINT); //編集 ICONSET(IDM_CUT,IDI_CUT); ICONSET(IDM_COPY,IDI_COPY); ICONSET(IDM_PASTE,IDI_PASTE); ICONSET(IDM_UNDO,IDI_UNDO); ICONSET(IDM_REDO,IDI_REDO); ICONSET(IDM_FIND,IDI_FIND); //表示 ICONSET(IDM_SET,IDI_OPTION); //変換 ICONSET(IDM_CONV_ALPHA_SMALL,IDI_CONV_ALPHA_SMALL); ICONSET(IDM_CONV_ALPHA_BIG,IDI_CONV_ALPHA_BIG); ICONSET(IDM_CONV_HALF,IDI_CONV_HALF); ICONSET(IDM_CONV_MULTI,IDI_CONV_MULTI); ICONSET(IDM_CONV_KATAKANA,IDI_CONV_KATAKANA); ICONSET(IDM_CONV_HIRAGANA,IDI_CONV_HIRAGANA); //ヘルプ ICONSET(IDM_TOPIC,IDI_HELP); #ifdef THETEXT //TheTextのみの機能 ICONSET(IDM_STRING_COUNT,IDI_STRINGCOUNT); #else //ProjectEditorのみの機能 //リリース ICONSET(IDM_RELEASECOMPILE,IDI_RELEASECOMPILE); ICONSET(IDM_RELEASERUN,IDI_RELEASERUN); //デバッグ ICONSET(IDM_ATTACH,IDI_ATTACH); ICONSET(IDM_DEBUGCOMPILE,IDI_DEBUGCOMPILE); ICONSET(IDM_DEBUG,IDI_DEBUGRUN); ICONSET(IDM_BREAKPOINT,IDI_BREAKPOINT); ICONSET(IDM_STEP_IN,IDI_STEPIN); ICONSET(IDM_STEP_OVER,IDI_STEPOVER); ICONSET(IDM_STEP_CURSOR,IDI_STEPTOCURSOR); ICONSET(IDM_DEBUG_PAUSE,IDI_DEBUGPAUSE); ICONSET(IDM_DEBUG_STOP,IDI_DEBUGSTOP); //コミュニティ ICONSET(IDM_COMMUNITY,IDI_COMMUNITY_MAIN); ICONSET(IDM_COMMU_SEARCH,IDI_COMMUNITY_FIND); ICONSET(IDM_COMMU_PM,IDI_COMMUNITY_PRIVATEMSG); ICONSET(ID_COMMU_FORUM1,IDI_COMMUNITY_FORUM); ICONSET(ID_COMMU_FORUM2,IDI_COMMUNITY_FORUM); ICONSET(ID_COMMU_FORUM3,IDI_COMMUNITY_FORUM); ICONSET(ID_COMMU_FORUM4,IDI_COMMUNITY_FORUM); ICONSET(ID_COMMU_FORUM5,IDI_COMMUNITY_FORUM); ICONSET(ID_COMMU_FORUM6,IDI_COMMUNITY_FORUM_SECRET); ICONSET(ID_COMMU_FORUM7,IDI_COMMUNITY_FORUM); ICONSET(ID_COMMU_FORUM8,IDI_COMMUNITY_FORUM); #endif #undef ICONSET extern HMENU hEditMenuBase,hEditMenu; hEditMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_EDITMENU)); hEditMenu=GetSubMenu(hEditMenuBase,0); extern HMENU hRebarMenuBase,hRebarMenu; hRebarMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_REBARMENU)); hRebarMenu=GetSubMenu(hRebarMenuBase,0); extern HMENU hTabMenuBase,hTabMenu,hTabColorMenu; hTabMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_TABMENU)); hTabMenu=GetSubMenu(hTabMenuBase,0); hTabColorMenu=GetSubMenu(hTabMenu,0); extern HMENU hFileTreeMenuBase; hFileTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_FILETREEMENU)); extern HMENU hProcedureTreeMenuBase; hProcedureTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_PROCEDURETREEMENU)); extern HMENU hMaterialTreeMenuBase; hMaterialTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_MATERIALTREEMENU)); extern HMENU hRadMenuBase; hRadMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_RADCONTEXTMENU)); //クリップボードのデータ形式(RAD用)を新規登録 extern DWORD dwRadClipboardID; dwRadClipboardID=RegisterClipboardFormat("ProjectEditor-RAD"); //256色の標準パレットを読み込む extern RGBQUAD DefaultColorTable256[256]; HANDLE hFile; DWORD dw; sprintf(temporary,"%sSubOperation\\8bit.plt",pj_editor_Dir); hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); if(hFile==INVALID_HANDLE_VALUE){ //"\"%s\" ファイルの読み込みに失敗しました。" sprintf(str,STRING_ERROR_CANT_FILEOPEN,temporary); MessageBox(NULL,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION); return 0; } ReadFile(hFile,DefaultColorTable256,sizeof(RGBQUAD)*256,&dw,NULL); CloseHandle(hFile); //デザインテーマオブジェクトを生成 pobj_DBTheme=new CDBTheme(); ///////////////////////// // カラーデザインを設定 CTheme *pobj_Theme; pobj_Theme=pobj_DBTheme->GetActiveTheme(); if(!pobj_Theme) pobj_Theme=pobj_DBTheme->ppobj_Theme[0]; SetTextEditColorDesign(&tci,pobj_Theme,0); #ifndef THETEXT ///////////////////////////////////////////////////// // ProjectEditorのみ ///////////////////////////////////////////////////// //クラスビュー管理オブジェクトを生成 pobj_ClassTreeView=new CClassTreeView(); ///////////////////////// // basic.sbpの内容を取得 ///////////////////////// extern char *pHeaderBuf; sprintf(temporary,"%sInclude\\basic.sbp",pj_editor_Dir); pHeaderBuf=ReadBuffer(temporary); //ファイルをインクルード pHeaderBuf=IncludeFiles(pHeaderBuf); //デバッガ管理オブジェクトを生成 pobj_Debugger=new CDebugger(); //ブレークポイント管理オブジェクトを生成 extern CDBBreakPoint *pobj_DBBreakPoint; pobj_DBBreakPoint=new CDBBreakPoint(); #endif return 1; } void EndProjectEditor(void){ #ifndef THETEXT ///////////////////////////////////////////////////// // ProjectEditorのみ ///////////////////////////////////////////////////// //クラスビュー管理オブジェクトを破棄 delete pobj_ClassTreeView; pobj_ClassTreeView=0; //basic.sbpのソースコードバッファを解放 extern char *pHeaderBuf; HeapDefaultFree(pHeaderBuf); //デバッガ管理オブジェクトを破棄 delete pobj_Debugger; //ブレークポイント管理オブジェクトを破棄 extern CDBBreakPoint *pobj_DBBreakPoint; delete pobj_DBBreakPoint; #endif //デザインテーマオブジェクトを破棄 delete pobj_DBTheme; //不揮発性のデータを保存 pobj_nv->save(); delete pobj_nv; pobj_nv=0; //メインメニューオブジェクトを破棄 delete pobj_MainMenu; pobj_MainMenu=0; extern HFONT hStatusFont; DeleteObject(hStatusFont); extern HFONT hHyperLinkFont; DeleteObject(hHyperLinkFont); extern HFONT hRulerFont; DeleteObject(hRulerFont); extern HFONT hFont_LineNumber; DeleteObject(hFont_LineNumber); extern METHODCHECKINFO MethodCheckInfo; DeleteObject(MethodCheckInfo.hFont); DeleteObject(MethodCheckInfo.hBoldFont); extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon; DestroyIcon(hOwnerIcon); DestroyIcon(hBasicProgramIcon); DestroyIcon(hTextDocumentIcon); DestroyIcon(hWindowDocumentIcon); extern HMENU hEditMenuBase,hRebarMenuBase,hTabMenuBase; DestroyMenu(hEditMenuBase); DestroyMenu(hRebarMenuBase); DestroyMenu(hTabMenuBase); extern HMENU hFileTreeMenuBase; DestroyMenu(hFileTreeMenuBase); extern HMENU hProcedureTreeMenuBase; DestroyMenu(hProcedureTreeMenuBase); extern HMENU hMaterialTreeMenuBase; DestroyMenu(hMaterialTreeMenuBase); extern HMENU hRadMenuBase; DestroyMenu(hRadMenuBase); //背景ブラシ extern HBRUSH h3DFaceBackBrush; DeleteObject(h3DFaceBackBrush); //スタンダードツールバーを破棄 if(pobj_StandardToolbar){ pobj_StandardToolbar->Release(); pobj_StandardToolbar=0; } //ビルドツールバーを破棄 if(pobj_ReleaseToolbar){ pobj_ReleaseToolbar->Release(); pobj_ReleaseToolbar=0; } //デバッガ用ツールバーを破棄 if(pobj_DebuggerToolbar){ pobj_DebuggerToolbar->Release(); pobj_DebuggerToolbar=0; } //ヒープオブジェクトを解放 extern HANDLE hHeap; HeapDestroy(hHeap); //DLLを解放 FreeLibrary(hResInst); FreeLibrary(hIconResInst); FreeLibrary(hLib_LuxCtrl); //アルファブレンド用のAPIを解放 extern HINSTANCE hUser32Lib; FreeLibrary(hUser32Lib); if(bProfessional){ //Pro版は自動バックアップ及び復元機能を有効にする ////////////////////////////////////// // バックアップ用ファイルを削除 ////////////////////////////////////// extern char szBackupDirPath[MAX_PATH]; RemoveDirectoryStrong(szBackupDirPath); } } //各ウィンドウ生成 void SetupWindow(HWND hwnd){ extern HINSTANCE hInst; extern HMENU hFirstMainMenu; RECT rect; CLIENTCREATESTRUCT ccs; INITCOMMONCONTROLSEX InitCommCtrl; InitCommCtrl.dwSize=sizeof(INITCOMMONCONTROLSEX); InitCommCtrl.dwICC=ICC_COOL_CLASSES|ICC_PAGESCROLLER_CLASS|ICC_WIN95_CLASSES|ICC_TAB_CLASSES; InitCommonControlsEx(&InitCommCtrl); //タブウィンドウ pobj_MainTab=new CMainTab(hwnd); //MDIの親ウィンドウ(クライアントウィンドウ)を作成 ccs.hWindowMenu=hFirstMainMenu; ccs.idFirstChild=ID_FIRSTCHILD; GetClientRect(hwnd,&rect); hClient=CreateWindowEx(WS_EX_CLIENTEDGE,"MDICLIENT",NULL, WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE, 0,0,0,0, hwnd,(HMENU)1,hInst,(LPSTR)&ccs); //レバーオブジェクトを生成 pobj_Rebar=new CMainRebar(hwnd); //ステータスバー extern HWND hStatusBar; extern HFONT hStatusFont; hStatusBar=CreateStatusWindow( WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBARS_SIZEGRIP|CCS_BOTTOM, NULL,hwnd,NULL); SendMessage(hStatusBar,WM_SETFONT,(long)hStatusFont,0); //プロジェクト ビュー extern HWND hProjectView; extern HWND hProjectView_ToolWindow; RECT *prc; prc=&pobj_nv->rectProjectView; hProjectView_ToolWindow=CreateWindowEx(WS_EX_TOOLWINDOW,"ProjectView_ToolWindow","ProjectView", WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_CLIPCHILDREN, prc->left,prc->top,prc->right-prc->left,prc->bottom-prc->top, hwnd,0,hInst,0); hProjectView=CreateWindowEx(WS_EX_STATICEDGE,"ProjectView","ProjectView", WS_CHILD|WS_CLIPCHILDREN, 0,0,0,0, hwnd,0,hInst,0); if(pobj_nv->bClipProjectView==0){ SetWindowLong(hProjectView,GWL_EXSTYLE,0); SetParent(hProjectView,hProjectView_ToolWindow); ResizeProjectView_ToolWindow(); } //メニュー状態を設定 ResetState_DocMenu(); //SideWebを生成 pobj_SideWeb=new CSideWeb(hwnd); } //実行コマンド BOOL SetRunning(HWND hChild){ extern MDIINFO MdiInfo[MAX_WNDNUM]; extern LPSTR DefFileFilter; int WndNum; char temporary[MAX_PATH],temp2[MAX_PATH]; HANDLE hFind; WIN32_FIND_DATA wfd; extern char *lpszCompilerName; sprintf(temporary,"%s%s",pj_editor_Dir,lpszCompilerName); hFind=FindFirstFile(temporary,&wfd); if(hFind==INVALID_HANDLE_VALUE){ //"BasicCompiler.exe が見つかりません" MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION); return FALSE; } FindClose(hFind); WndNum=GetWndNum(hChild); if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){ if(MdiInfo[WndNum].path[0]=='\0'){ //"保存先のファイルを指定してください" if(!GetFilePathDialog(hOwner,temp2,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,0)) return FALSE; if(!SaveDocument(hChild,temp2)) return 0; } else{ if(MdiInfo[WndNum].pmti->bModify){ if(!SaveDocument(hChild,NULL)) return 0; } else{ if(hFind=FindFirstFile(MdiInfo[WndNum].path,&wfd)){ if(hFind==INVALID_HANDLE_VALUE){ if(!SaveDocument(hChild,NULL)) return 0; } else FindClose(hFind); } } } } return 1; } BOOL IsNeedCompile(char *FileName,BOOL bDebug){ char temporary[MAX_PATH],temp2[MAX_PATH],temp3[MAX_PATH]; HANDLE hFind,hFile; WIN32_FIND_DATA wfd; FILETIME SourceTime,ExeTime; _splitpath(FileName,temporary,temp2,temp3,NULL); lstrcat(temporary,temp2); lstrcat(temporary,temp3); if(bDebug) lstrcat(temporary,"_debug.exe"); else lstrcat(temporary,".exe"); hFind=FindFirstFile(temporary,&wfd); if(hFind==INVALID_HANDLE_VALUE) return 1; FindClose(hFind); hFile=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); GetFileTime(hFile,NULL,NULL,&SourceTime); CloseHandle(hFile); hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); GetFileTime(hFile,NULL,NULL,&ExeTime); CloseHandle(hFile); if(SourceTime.dwHighDateTime