#include "stdafx.h" #include "common.h" CDBTheme *pobj_DBTheme; CTheme::CTheme(char *path,char *name){ bActive=0; lstrcpy(m_name,name); if(path==0) return; buffer=ReadBuffer(path); //通常の文字色 GetRGBValue("rgbDefault",&TextColorInfo.rgbDefault); //コメント文字色 GetRGBValue("rgbComment",&TextColorInfo.rgbComment); //特殊ステートメント GetRGBValue("rgbStatement",&TextColorInfo.rgbStatement); //文字列色 GetRGBValue("rgbString",&TextColorInfo.rgbString); //背景色(カーソル行) GetRGBValue("rgbCursorBack",&TextColorInfo.rgbCursorBack); //背景色(一般) GetRGBValue("rgbBackground",&TextColorInfo.rgbBackground); //背景画像 if(!GetStringValue("BackgroundImagePath",szBackgroundImagePath)) szBackgroundImagePath[0]=0; HeapDefaultFree(buffer); } CTheme::CTheme(){ bActive=0; lstrcpy(m_name,THEMENAME_USER); } CTheme::~CTheme(){ } void CTheme::save(){ buffer=(char *)HeapAlloc(hHeap,0,65536); buffer[0]=0; //通常の文字色 SetRGBValue("rgbDefault",TextColorInfo.rgbDefault); //コメント文字色 SetRGBValue("rgbComment",TextColorInfo.rgbComment); //特殊ステートメント SetRGBValue("rgbStatement",TextColorInfo.rgbStatement); //文字列色 SetRGBValue("rgbString",TextColorInfo.rgbString); //背景色(カーソル行) SetRGBValue("rgbCursorBack",TextColorInfo.rgbCursorBack); //背景色(一般) SetRGBValue("rgbBackground",TextColorInfo.rgbBackground); //背景画像 SetStringValue("BackgroundImagePath",szBackgroundImagePath); char path[MAX_PATH]; sprintf(path,"%sTheme\\%s",pj_editor_Dir,m_name); if(!IsExistFile(path)){ CreateDirectory(path,NULL); } sprintf(path,"%sTheme\\%s\\design.ini",pj_editor_Dir,m_name); WriteBuffer(path,buffer,lstrlen(buffer)); HeapDefaultFree(buffer); } CDBTheme::CDBTheme(){ hBackBmp=0; iNum=0; ppobj_Theme=(CTheme **)HeapAlloc(hHeap,0,1); char temporary[MAX_PATH]; sprintf(temporary,"%sTheme\\*",pj_editor_Dir); HANDLE hFind; WIN32_FIND_DATA wfd; hFind=FindFirstFile(temporary,&wfd); if(hFind!=INVALID_HANDLE_VALUE){ do{ if(wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){ if(!(lstrcmp(wfd.cFileName,".")==0||lstrcmp(wfd.cFileName,"..")==0)){ //ディレクトリのとき sprintf(temporary,"%sTheme\\%s\\design.ini",pj_editor_Dir,wfd.cFileName); if(IsExistFile(temporary)){ add(temporary,wfd.cFileName); } } } else{ //ファイルのとき //無視 } }while(FindNextFile(hFind,&wfd)); } } CDBTheme::~CDBTheme(){ int i; for(i=0;im_name,name)==0){ return ppobj_Theme[i]; } } return 0; } CTheme *CDBTheme::add(char *path,char *name){ ppobj_Theme=(CTheme **)HeapReAlloc(hHeap,0,ppobj_Theme,(iNum+1)*sizeof(CTheme *)); ppobj_Theme[iNum]=new CTheme(path,name); iNum++; return ppobj_Theme[iNum-1]; } void CDBTheme::ResetTheme_ToComboBox(HWND hCombo){ int i; for(i=0;im_name); } //選択する for(i=0;im_name,pobj_nv->szActiveTheme)==0){ i=SendMessage(hCombo,CB_FINDSTRINGEXACT,0,(LPARAM)ppobj_Theme[i]->m_name); SendMessage(hCombo,CB_SETCURSEL,i,0); break; } } } CTheme *CDBTheme::GetActiveTheme(){ int i; for(i=0;im_name,pobj_nv->szActiveTheme)==0){ return ppobj_Theme[i]; } } return 0; } void CDBTheme::lock(void){ CTheme *pobj_Theme; pobj_Theme=GetActiveTheme(); if(pobj_Theme->szBackgroundImagePath[0]=='\0'){ hBackBmp=0; return; } char szThemeDir[MAX_PATH]; sprintf(szThemeDir,"%sTheme\\%s\\",pj_editor_Dir,pobj_Theme->m_name); char temporary[MAX_PATH]; lstrcpy(temporary,pobj_Theme->szBackgroundImagePath); GetFullPath(temporary,szThemeDir); hBackBmp=(HBITMAP)LoadImage(0,temporary,IMAGE_BITMAP,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); BITMAP Bitmap; GetObject(hBackBmp,sizeof(BITMAP),&Bitmap); sizeBackBmp.cx=Bitmap.bmWidth; sizeBackBmp.cy=Bitmap.bmHeight; } void CDBTheme::unlock(void){ if(hBackBmp) DeleteObject(hBackBmp); }