| 1 | #include "Common.h"
 | 
|---|
| 2 | 
 | 
|---|
| 3 | 
 | 
|---|
| 4 | void ScreenToClient(HWND hwnd,RECT *pRect){
 | 
|---|
| 5 |     ScreenToClient(hwnd,(POINT *)pRect);
 | 
|---|
| 6 |     ScreenToClient(hwnd,(POINT *)(((long)(void *)pRect)+sizeof(POINT)));
 | 
|---|
| 7 | }
 | 
|---|
| 8 | void ClientToScreen(HWND hwnd,RECT *pRect){
 | 
|---|
| 9 |     ClientToScreen(hwnd,(POINT *)pRect);
 | 
|---|
| 10 |     ClientToScreen(hwnd,(POINT *)(((long)(void *)pRect)+sizeof(POINT)));
 | 
|---|
| 11 | }
 | 
|---|
| 12 | 
 | 
|---|
| 13 | 
 | 
|---|
| 14 | typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE hProcess,PBOOL Wow64Process);
 | 
|---|
| 15 | BOOL IsWow64(void){
 | 
|---|
| 16 |     ///////////////////////////////////////////////////////////
 | 
|---|
| 17 |     // ProjectEditor.exeがWOW64技術で動作しているのかどうか
 | 
|---|
| 18 |     ///////////////////////////////////////////////////////////
 | 
|---|
| 19 |     BOOL bIsWow64 = FALSE;
 | 
|---|
| 20 |     LPFN_ISWOW64PROCESS fnIsWow64Process = (LPFN_ISWOW64PROCESS)GetProcAddress(GetModuleHandle("kernel32"),"IsWow64Process");
 | 
|---|
| 21 | 
 | 
|---|
| 22 |     if (NULL != fnIsWow64Process)
 | 
|---|
| 23 |     {
 | 
|---|
| 24 |         if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
 | 
|---|
| 25 |         {
 | 
|---|
| 26 |             // handle error
 | 
|---|
| 27 |             bIsWow64 = FALSE;
 | 
|---|
| 28 |         }
 | 
|---|
| 29 |     }
 | 
|---|
| 30 |     return bIsWow64;
 | 
|---|
| 31 | }
 | 
|---|
| 32 | 
 | 
|---|
| 33 | void URLEncode(LPSTR pszSrc){
 | 
|---|
| 34 |     char *temp;
 | 
|---|
| 35 |     temp=(char *)malloc(65535);
 | 
|---|
| 36 | 
 | 
|---|
| 37 |     int i,i2;
 | 
|---|
| 38 |     for (i = 0,i2=0; ; i++,i2++)
 | 
|---|
| 39 |     {
 | 
|---|
| 40 |         if(pszSrc[i]=='\0'){
 | 
|---|
| 41 |             temp[i2] = 0;
 | 
|---|
| 42 |             break;
 | 
|---|
| 43 |         }
 | 
|---|
| 44 | 
 | 
|---|
| 45 |         // 英数字 _ . - は変換しないでそのまま
 | 
|---|
| 46 |         if (isalnum((BYTE)pszSrc[i]) || pszSrc[i] == '_' || pszSrc[i] == '.' || pszSrc[i] == '-'){
 | 
|---|
| 47 |             temp[i2] = pszSrc[i];
 | 
|---|
| 48 |         }
 | 
|---|
| 49 |         // それ以外は %3B のような形式に変換
 | 
|---|
| 50 |         else{
 | 
|---|
| 51 |             sprintf(temp+i2,"%%%02X", (BYTE)pszSrc[i]);
 | 
|---|
| 52 |             i2+=lstrlen(temp+i2);
 | 
|---|
| 53 |             i2--;
 | 
|---|
| 54 |         }
 | 
|---|
| 55 |     }
 | 
|---|
| 56 | 
 | 
|---|
| 57 |     lstrcpy(pszSrc,temp);
 | 
|---|
| 58 |     free(temp);
 | 
|---|
| 59 | }
 | 
|---|
| 60 | 
 | 
|---|
| 61 | void Digit(int num,char *buffer){
 | 
|---|
| 62 |     char temporary[255];
 | 
|---|
| 63 |     int i,iPos;
 | 
|---|
| 64 | 
 | 
|---|
| 65 |     sprintf(temporary,"%d",abs(num));
 | 
|---|
| 66 | 
 | 
|---|
| 67 |     //カンマが不要の場合は抜ける
 | 
|---|
| 68 |     if(lstrlen(temporary)<=3){
 | 
|---|
| 69 |         wsprintf(buffer,"%d",num);
 | 
|---|
| 70 |         return;
 | 
|---|
| 71 |     }
 | 
|---|
| 72 | 
 | 
|---|
| 73 |     //合計の文字数からバッファを確保
 | 
|---|
| 74 |     if(num<0){
 | 
|---|
| 75 |         buffer[0]='-';
 | 
|---|
| 76 |         iPos=1;
 | 
|---|
| 77 |     }
 | 
|---|
| 78 |     else{
 | 
|---|
| 79 |         buffer[0]=0;
 | 
|---|
| 80 |         iPos=0;
 | 
|---|
| 81 |     }
 | 
|---|
| 82 | 
 | 
|---|
| 83 |     //3桁毎にカンマを加えながら文字列をコピーする
 | 
|---|
| 84 |     int iFirst;
 | 
|---|
| 85 |     iFirst=lstrlen(temporary)%3;
 | 
|---|
| 86 |     if(iFirst==0) iFirst=3;
 | 
|---|
| 87 |     memcpy(buffer+iPos,temporary,iFirst);
 | 
|---|
| 88 |     iPos+=iFirst;
 | 
|---|
| 89 | 
 | 
|---|
| 90 |     int i2;
 | 
|---|
| 91 |     i2=(lstrlen(temporary)-4)/3;
 | 
|---|
| 92 | 
 | 
|---|
| 93 |     for(i=0;i<=i2;i++){
 | 
|---|
| 94 |         buffer[iPos]=',';
 | 
|---|
| 95 |         iPos++;
 | 
|---|
| 96 |         memcpy(buffer+iPos,temporary+i*3+iFirst,3);
 | 
|---|
| 97 |         iPos+=3;
 | 
|---|
| 98 |         buffer[iPos]=0;
 | 
|---|
| 99 |     }
 | 
|---|
| 100 | }
 | 
|---|
| 101 | 
 | 
|---|
| 102 | void RectNaturalFormat(RECT *ReadRect,RECT *CopyRect){
 | 
|---|
| 103 |     if(ReadRect->left > ReadRect->right){
 | 
|---|
| 104 |         CopyRect->left=ReadRect->right;
 | 
|---|
| 105 |         CopyRect->right=ReadRect->left;
 | 
|---|
| 106 |     }
 | 
|---|
| 107 |     else{
 | 
|---|
| 108 |         CopyRect->left=ReadRect->left;
 | 
|---|
| 109 |         CopyRect->right=ReadRect->right;
 | 
|---|
| 110 |     }
 | 
|---|
| 111 |     if(ReadRect->top > ReadRect->bottom){
 | 
|---|
| 112 |         CopyRect->top=ReadRect->bottom;
 | 
|---|
| 113 |         CopyRect->bottom=ReadRect->top;
 | 
|---|
| 114 |     }
 | 
|---|
| 115 |     else{
 | 
|---|
| 116 |         CopyRect->top=ReadRect->top;
 | 
|---|
| 117 |         CopyRect->bottom=ReadRect->bottom;
 | 
|---|
| 118 |     }
 | 
|---|
| 119 | }
 | 
|---|
| 120 | void RectNaturalFormat(int *x1,int *y1,int *x2,int *y2){
 | 
|---|
| 121 |     int temp;
 | 
|---|
| 122 |     if(*x1>*x2){
 | 
|---|
| 123 |         temp=*x1;
 | 
|---|
| 124 |         *x1=*x2;
 | 
|---|
| 125 |         *x2=temp;
 | 
|---|
| 126 |     }
 | 
|---|
| 127 |     if(*y1>*y2){
 | 
|---|
| 128 |         temp=*y1;
 | 
|---|
| 129 |         *y1=*y2;
 | 
|---|
| 130 |         *y2=temp;
 | 
|---|
| 131 |     }
 | 
|---|
| 132 | }
 | 
|---|
| 133 | void KillSpaces(char *str1,char *str2){
 | 
|---|
| 134 |     int i,i2,IsStr;
 | 
|---|
| 135 |     for(i=0,i2=0,IsStr=0;;i++,i2++){
 | 
|---|
| 136 |         while((str1[i]==' '||str1[i]=='\t')&&IsStr==0&&str1[i]!='\0') i++;
 | 
|---|
| 137 |         if(str1[i]=='\"') IsStr^=1;
 | 
|---|
| 138 |         str2[i2]=str1[i];
 | 
|---|
| 139 |         if(str1[i]=='\0') break;
 | 
|---|
| 140 |     }
 | 
|---|
| 141 | }
 | 
|---|
| 142 | void RemoveStringQuotes(char *str){
 | 
|---|
| 143 |     int i;
 | 
|---|
| 144 |     if(str[0]!='\"') return;
 | 
|---|
| 145 |     for(i=0;;i++){
 | 
|---|
| 146 |         str[i]=str[i+1];
 | 
|---|
| 147 |         if(str[i]=='\"') break;
 | 
|---|
| 148 |     }
 | 
|---|
| 149 |     str[i]=0;
 | 
|---|
| 150 | }
 | 
|---|
| 151 | void SlideString(char *buffer, int slide){
 | 
|---|
| 152 |     char *temp;
 | 
|---|
| 153 |     temp=(char *)malloc(lstrlen(buffer)+1);
 | 
|---|
| 154 |     lstrcpy(temp,buffer);
 | 
|---|
| 155 |     lstrcpy(buffer+slide,temp);
 | 
|---|
| 156 |     free(temp);
 | 
|---|
| 157 | }
 | 
|---|
| 158 | void SlideBuffer(char *buffer,int length,int slide){
 | 
|---|
| 159 |     void *temp;
 | 
|---|
| 160 |     temp=malloc(length+1);
 | 
|---|
| 161 |     memcpy(temp,buffer,length);
 | 
|---|
| 162 |     memcpy(buffer+slide,temp,length);
 | 
|---|
| 163 |     free(temp);
 | 
|---|
| 164 | }
 | 
|---|
| 165 | BOOL IsVariableTopChar(char c){
 | 
|---|
| 166 |     if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||c=='_') return 1;
 | 
|---|
| 167 |     return 0;
 | 
|---|
| 168 | }
 | 
|---|
| 169 | bool IsNumberChar( char c ){
 | 
|---|
| 170 |     if(c>='0'&&c<='9'){
 | 
|---|
| 171 |         return true;
 | 
|---|
| 172 |     }
 | 
|---|
| 173 |     return false;
 | 
|---|
| 174 | }
 | 
|---|
| 175 | BOOL IsVariableChar(char c){
 | 
|---|
| 176 |     if((c>='A'&&c<='Z')||(c>='a'&&c<='z')||(c>='0'&&c<='9')||
 | 
|---|
| 177 |         c=='_'||c=='.'||c=='$') return 1;
 | 
|---|
| 178 |     return 0;
 | 
|---|
| 179 | }
 | 
|---|
| 180 | 
 | 
|---|
| 181 | BOOL IsCommandBackDelimitation(char *buffer,int pos){
 | 
|---|
| 182 |     if(buffer[pos]=='\n'||buffer[pos]==':') return 1;
 | 
|---|
| 183 |     return 0;
 | 
|---|
| 184 | }
 | 
|---|
| 185 | BOOL IsCommandDelimitation(char *buffer,int p){
 | 
|---|
| 186 |     if(buffer[p]=='\r'&&buffer[p+1]=='\n') return 2;
 | 
|---|
| 187 |     if(buffer[p]=='\n'||buffer[p]==':'||buffer[p]=='\0') return 1;
 | 
|---|
| 188 |     return 0;
 | 
|---|
| 189 | }
 | 
|---|
| 190 | 
 | 
|---|
| 191 | char *ComparisonString( char *str1, char *str2, bool isBigSmall, bool isWordUnit ){
 | 
|---|
| 192 |     char *temp1 = (char *)malloc( lstrlen( str1 ) +1 );
 | 
|---|
| 193 |     char *temp2 = (char *)malloc( lstrlen( str2 ) +1 );
 | 
|---|
| 194 | 
 | 
|---|
| 195 |     lstrcpy( temp1, str1 );
 | 
|---|
| 196 |     lstrcpy( temp2, str2 );
 | 
|---|
| 197 | 
 | 
|---|
| 198 |     if( isBigSmall == false ){
 | 
|---|
| 199 |         // 大文字小文字を区別しない場合
 | 
|---|
| 200 |         // すべて大文字にしておく
 | 
|---|
| 201 |         CharUpper( temp1 );
 | 
|---|
| 202 |         CharUpper( temp2 );
 | 
|---|
| 203 |     }
 | 
|---|
| 204 | 
 | 
|---|
| 205 |     int len2 = lstrlen( temp2 );
 | 
|---|
| 206 | 
 | 
|---|
| 207 |     const char *temp3 = strstr( temp1, temp2 );
 | 
|---|
| 208 |     while( temp3 ){
 | 
|---|
| 209 |         if( isWordUnit ){
 | 
|---|
| 210 |             int pos = (int)temp3 - (int)temp1;
 | 
|---|
| 211 |             if( pos == 0 ){
 | 
|---|
| 212 |                 if( !( IsVariableTopChar( temp1[len2] ) || IsNumberChar( temp1[len2] ) ) ){
 | 
|---|
| 213 |                         break;
 | 
|---|
| 214 |                 }
 | 
|---|
| 215 |             }
 | 
|---|
| 216 |             else{
 | 
|---|
| 217 |                 if( !( IsVariableTopChar( temp1[pos-1] ) || IsNumberChar( temp1[pos-1] ) )
 | 
|---|
| 218 |                     && !( IsVariableTopChar( temp1[pos+len2] ) || IsNumberChar( temp1[pos+len2] ) )
 | 
|---|
| 219 |                     ){
 | 
|---|
| 220 |                         break;
 | 
|---|
| 221 |                 }
 | 
|---|
| 222 |             }
 | 
|---|
| 223 |         }
 | 
|---|
| 224 |         else{
 | 
|---|
| 225 |             break;
 | 
|---|
| 226 |         }
 | 
|---|
| 227 | 
 | 
|---|
| 228 |         temp3 = strstr( temp3 + 1, temp2 );
 | 
|---|
| 229 |     }
 | 
|---|
| 230 | 
 | 
|---|
| 231 |     char *result = NULL;
 | 
|---|
| 232 |     if( temp3 ){
 | 
|---|
| 233 |         int pos = (int)temp3 - (int)temp1;
 | 
|---|
| 234 |         result = str1 + pos;
 | 
|---|
| 235 |     }
 | 
|---|
| 236 | 
 | 
|---|
| 237 |     free( temp1 );
 | 
|---|
| 238 |     free( temp2 );
 | 
|---|
| 239 | 
 | 
|---|
| 240 |     return result;
 | 
|---|
| 241 | }
 | 
|---|
| 242 | int GetOneParameter(char *Parameter,int pos,char *retAns){
 | 
|---|
| 243 |     int i,i2,IsStr,PareNum;
 | 
|---|
| 244 |     for(i=pos,i2=0,IsStr=0,PareNum=0;;i++,i2++){
 | 
|---|
| 245 |         if(IsDBCSLeadByte(Parameter[i])){
 | 
|---|
| 246 |             retAns[i2]=Parameter[i];
 | 
|---|
| 247 |             retAns[++i2]=Parameter[++i];
 | 
|---|
| 248 |             continue;
 | 
|---|
| 249 |         }
 | 
|---|
| 250 |         if(Parameter[i]=='\"') IsStr^=1;
 | 
|---|
| 251 |         if(Parameter[i]=='('&&IsStr==0) PareNum++;
 | 
|---|
| 252 |         if(Parameter[i]==')'&&IsStr==0) PareNum--;
 | 
|---|
| 253 |         if(Parameter[i]==','&&IsStr==0&&PareNum==0){
 | 
|---|
| 254 |             retAns[i2]=0;
 | 
|---|
| 255 |             break;
 | 
|---|
| 256 |         }
 | 
|---|
| 257 |         retAns[i2]=Parameter[i];
 | 
|---|
| 258 |         if(Parameter[i]=='\0'||Parameter[i]=='\r'&&Parameter[i+1]=='\n'){
 | 
|---|
| 259 |             retAns[i2]=0;
 | 
|---|
| 260 |             break;
 | 
|---|
| 261 |         }
 | 
|---|
| 262 |     }
 | 
|---|
| 263 |     if(Parameter[i]==',') i++;
 | 
|---|
| 264 |     return i;
 | 
|---|
| 265 | }
 | 
|---|
| 266 | int GetStringInPare(char *buffer,char *ReadBuffer){
 | 
|---|
| 267 |     int i,IsStr,PareNum;
 | 
|---|
| 268 |     for(i=0,IsStr=0,PareNum=0;;i++){
 | 
|---|
| 269 |         buffer[i]=ReadBuffer[i];
 | 
|---|
| 270 |         if(ReadBuffer[i]=='\"') IsStr^=1;
 | 
|---|
| 271 |         else if(ReadBuffer[i]=='('&&IsStr==0) PareNum++;
 | 
|---|
| 272 |         else if(ReadBuffer[i]==')'&&IsStr==0){
 | 
|---|
| 273 |             PareNum--;
 | 
|---|
| 274 |             if(PareNum==0){
 | 
|---|
| 275 |                 i++;
 | 
|---|
| 276 |                 buffer[i]=0;
 | 
|---|
| 277 |                 break;
 | 
|---|
| 278 |             }
 | 
|---|
| 279 |         }
 | 
|---|
| 280 |         else if(ReadBuffer[i]=='\0') return 0;
 | 
|---|
| 281 |     }
 | 
|---|
| 282 |     return i;
 | 
|---|
| 283 | }
 | 
|---|
| 284 | int GetStringInBracket(char *buffer,char *ReadBuffer){
 | 
|---|
| 285 |     int i,IsStr,PareNum;
 | 
|---|
| 286 |     for(i=0,IsStr=0,PareNum=0;;i++){
 | 
|---|
| 287 |         buffer[i]=ReadBuffer[i];
 | 
|---|
| 288 |         if(IsDBCSLeadByte(ReadBuffer[i])){
 | 
|---|
| 289 |             i++;
 | 
|---|
| 290 |             buffer[i]=ReadBuffer[i];
 | 
|---|
| 291 |             continue;
 | 
|---|
| 292 |         }
 | 
|---|
| 293 |         if(ReadBuffer[i]=='\"') IsStr^=1;
 | 
|---|
| 294 |         else if(ReadBuffer[i]=='['&&IsStr==0) PareNum++;
 | 
|---|
| 295 |         else if(ReadBuffer[i]==']'&&IsStr==0){
 | 
|---|
| 296 |             PareNum--;
 | 
|---|
| 297 |             if(PareNum==0){
 | 
|---|
| 298 |                 i++;
 | 
|---|
| 299 |                 buffer[i]=0;
 | 
|---|
| 300 |                 break;
 | 
|---|
| 301 |             }
 | 
|---|
| 302 |         }
 | 
|---|
| 303 |         else if(ReadBuffer[i]=='\0') return 0;
 | 
|---|
| 304 |     }
 | 
|---|
| 305 |     return i;
 | 
|---|
| 306 | }
 | 
|---|
| 307 | void JumpBlank(char *pBuf,int *piPos){
 | 
|---|
| 308 |     int i;
 | 
|---|
| 309 |     i=*piPos;
 | 
|---|
| 310 | 
 | 
|---|
| 311 |     while(1){
 | 
|---|
| 312 |         while(pBuf[i]==' '||pBuf[i]=='\t') i++;
 | 
|---|
| 313 |         if(pBuf[i]=='\0') break;
 | 
|---|
| 314 |         if(pBuf[i]=='\''){
 | 
|---|
| 315 |             //注釈文(一行)
 | 
|---|
| 316 |             for(i++;;i++){
 | 
|---|
| 317 |                 if(pBuf[i]=='\0') break;
 | 
|---|
| 318 |                 if(pBuf[i]=='\r'&&pBuf[i+1]=='\n'){
 | 
|---|
| 319 |                     i+=2;
 | 
|---|
| 320 |                     break;
 | 
|---|
| 321 |                 }
 | 
|---|
| 322 |             }
 | 
|---|
| 323 |             while(pBuf[i]==' '||pBuf[i]=='\t') i++;
 | 
|---|
| 324 |         }
 | 
|---|
| 325 |         if(pBuf[i]=='/'&&pBuf[i+1]=='*'){
 | 
|---|
| 326 |             //注釈文(複数行)
 | 
|---|
| 327 |             i+=2;
 | 
|---|
| 328 |             while(!(pBuf[i]=='*'&&pBuf[i+1]=='/')){
 | 
|---|
| 329 |                 i++;
 | 
|---|
| 330 |                 if(pBuf[i]=='\0') break;
 | 
|---|
| 331 |             }
 | 
|---|
| 332 |             if(pBuf[i]){
 | 
|---|
| 333 |                 i+=2;
 | 
|---|
| 334 |             }
 | 
|---|
| 335 |         }
 | 
|---|
| 336 |         while(pBuf[i]=='\r'&&pBuf[i+1]=='\n') i+=2;
 | 
|---|
| 337 | 
 | 
|---|
| 338 |         if(!(
 | 
|---|
| 339 |             pBuf[i]==' '||
 | 
|---|
| 340 |             pBuf[i]=='\t'||
 | 
|---|
| 341 |             pBuf[i]=='\''||
 | 
|---|
| 342 |             (pBuf[i]=='/'&&pBuf[i+1]=='*')
 | 
|---|
| 343 |             )) break;
 | 
|---|
| 344 |     }
 | 
|---|
| 345 | 
 | 
|---|
| 346 |     *piPos=i;
 | 
|---|
| 347 | }
 | 
|---|
| 348 | 
 | 
|---|
| 349 | BOOL CheckParenthesis(char *buffer){
 | 
|---|
| 350 |     int i,IsStr,PareNum,sw;
 | 
|---|
| 351 |     _int8 bracket[1024];
 | 
|---|
| 352 | 
 | 
|---|
| 353 |     for(i=0,IsStr=0,PareNum=0,sw=0;;i++){
 | 
|---|
| 354 |         if(buffer[i]=='\"'){
 | 
|---|
| 355 |             IsStr^=1;
 | 
|---|
| 356 |             continue;
 | 
|---|
| 357 |         }
 | 
|---|
| 358 | 
 | 
|---|
| 359 |         else if(buffer[i]=='('&&IsStr==0){
 | 
|---|
| 360 |             bracket[PareNum]=0;
 | 
|---|
| 361 |             PareNum++;
 | 
|---|
| 362 |         }
 | 
|---|
| 363 |         else if(buffer[i]=='['&&IsStr==0){
 | 
|---|
| 364 |             bracket[PareNum]=1;
 | 
|---|
| 365 |             PareNum++;
 | 
|---|
| 366 |         }
 | 
|---|
| 367 | 
 | 
|---|
| 368 |         else if(buffer[i]==')'&&IsStr==0){
 | 
|---|
| 369 |             PareNum--;
 | 
|---|
| 370 |             if(bracket[PareNum]!=0||PareNum<0){
 | 
|---|
| 371 |                 //"カッコ \'( )\'"
 | 
|---|
| 372 |                 return 0;
 | 
|---|
| 373 |             }
 | 
|---|
| 374 |         }
 | 
|---|
| 375 |         else if(buffer[i]==']'&&IsStr==0){
 | 
|---|
| 376 |             PareNum--;
 | 
|---|
| 377 |             if(bracket[PareNum]!=1||PareNum<0){
 | 
|---|
| 378 |                 //"カッコ \'( )\'"
 | 
|---|
| 379 |                 return 0;
 | 
|---|
| 380 |             }
 | 
|---|
| 381 |         }
 | 
|---|
| 382 | 
 | 
|---|
| 383 |         else if(buffer[i]=='\n'||buffer[i]=='\0'){
 | 
|---|
| 384 | 
 | 
|---|
| 385 |             //"カッコ \'( )\'"
 | 
|---|
| 386 |             if(buffer[i]=='\0'){
 | 
|---|
| 387 |                 if(PareNum!=0){
 | 
|---|
| 388 |                     return 0;
 | 
|---|
| 389 |                 }
 | 
|---|
| 390 | 
 | 
|---|
| 391 |                 if(IsStr!=0){
 | 
|---|
| 392 |                     return 0;
 | 
|---|
| 393 |                 }
 | 
|---|
| 394 |             }
 | 
|---|
| 395 |             if(buffer[i]=='\0') break;
 | 
|---|
| 396 | 
 | 
|---|
| 397 |             sw=0;
 | 
|---|
| 398 |         }
 | 
|---|
| 399 |     }
 | 
|---|
| 400 |     return 1;
 | 
|---|
| 401 | }
 | 
|---|
| 402 | 
 | 
|---|
| 403 | DWORD GetValue(char *value){
 | 
|---|
| 404 |     unsigned long ans;
 | 
|---|
| 405 |     if(value[0]=='&'){
 | 
|---|
| 406 |         if(value[1]=='o'||value[1]=='O') sscanf(value+2,"%o",&ans);
 | 
|---|
| 407 |         if(value[1]=='h'||value[1]=='H') sscanf(value+2,"%x",&ans);
 | 
|---|
| 408 |     }
 | 
|---|
| 409 |     else ans=atol(value);
 | 
|---|
| 410 |     return ans;
 | 
|---|
| 411 | }
 | 
|---|
| 412 | BOOL IsManagementCommand(int ComNum){
 | 
|---|
| 413 |     switch(ComNum){
 | 
|---|
| 414 |         case -1:
 | 
|---|
| 415 |         case COM_ABSTRACT:
 | 
|---|
| 416 |         case COM_CLASS:
 | 
|---|
| 417 |         case COM_CONST:
 | 
|---|
| 418 |         case COM_DEBUG:
 | 
|---|
| 419 |         case COM_DECLARE:
 | 
|---|
| 420 |         case COM_DEF:
 | 
|---|
| 421 |         case COM_DIM:
 | 
|---|
| 422 |         case COM_DO:
 | 
|---|
| 423 |         case COM_END:
 | 
|---|
| 424 |         case COM_ENUM:
 | 
|---|
| 425 |         case COM_FOR:
 | 
|---|
| 426 |         case COM_FUNCTION:
 | 
|---|
| 427 |         case COM_GOSUB:
 | 
|---|
| 428 |         case COM_GOTO:
 | 
|---|
| 429 |         case COM_IF:
 | 
|---|
| 430 |         case COM_INHERITS:
 | 
|---|
| 431 |         case COM_INTERFACE:
 | 
|---|
| 432 |         case COM_LOOP:
 | 
|---|
| 433 |         case COM_NAMESPACE:
 | 
|---|
| 434 |         case COM_NEXT:
 | 
|---|
| 435 |         case COM_PRIVATE:
 | 
|---|
| 436 |         case COM_PROTECTED:
 | 
|---|
| 437 |         case COM_PUBLIC:
 | 
|---|
| 438 |         case COM_RETURN:
 | 
|---|
| 439 |         case COM_SELECT:
 | 
|---|
| 440 |         case COM_SUB:
 | 
|---|
| 441 |         case COM_TYPE:
 | 
|---|
| 442 |         case COM_TYPEDEF:
 | 
|---|
| 443 |         case COM_VIRTUAL:
 | 
|---|
| 444 |         case COM_OVERRIDE:
 | 
|---|
| 445 |         case COM_WEND:
 | 
|---|
| 446 |         case COM_WHILE:
 | 
|---|
| 447 |         case COM_WITH:
 | 
|---|
| 448 |             return 1;
 | 
|---|
| 449 |         default:
 | 
|---|
| 450 |             break;
 | 
|---|
| 451 |     }
 | 
|---|
| 452 |     return 0;
 | 
|---|
| 453 | }
 | 
|---|
| 454 | int IsBasicReservedWord(char *str){
 | 
|---|
| 455 |     if(str[0]=='a'||str[0]=='A'){
 | 
|---|
| 456 |         if(lstrcmpi(str,"Abstract")==0) return COM_ABSTRACT;
 | 
|---|
| 457 |         if(lstrcmpi(str,"As")==0) return -1;
 | 
|---|
| 458 |     }
 | 
|---|
| 459 |     else if(str[0]=='b'||str[0]=='B'){
 | 
|---|
| 460 |         if(lstrcmpi(str,"Beep")==0) return COM_BEEP;
 | 
|---|
| 461 |         if(lstrcmp(str,"Boolean")==0) return -1;
 | 
|---|
| 462 |         if(lstrcmpi(str,"ByRef")==0) return -1;
 | 
|---|
| 463 |         if(lstrcmpi(str,"ByVal")==0) return -1;
 | 
|---|
| 464 |         if(lstrcmp(str,"Byte")==0) return -1;
 | 
|---|
| 465 |     }
 | 
|---|
| 466 |     else if(str[0]=='c'||str[0]=='C'){
 | 
|---|
| 467 |         if(lstrcmpi(str,"Case")==0) return -1;
 | 
|---|
| 468 |         if(lstrcmp(str,"Char")==0) return -1;
 | 
|---|
| 469 |         if(lstrcmpi(str,"ChDir")==0) return COM_CHDIR;
 | 
|---|
| 470 |         if(lstrcmpi(str,"Circle")==0) return COM_CIRCLE;
 | 
|---|
| 471 |         if(lstrcmpi(str,"Class")==0) return COM_CLASS;
 | 
|---|
| 472 |         if(lstrcmpi(str,"Close")==0) return COM_CLOSE;
 | 
|---|
| 473 |         if(lstrcmpi(str,"Cls")==0) return COM_CLS;
 | 
|---|
| 474 |         if(lstrcmpi(str,"Color")==0) return COM_COLOR;
 | 
|---|
| 475 |         if(lstrcmpi(str,"Const")==0) return COM_CONST;
 | 
|---|
| 476 |         if(lstrcmpi(str,"Continue")==0) return -1;
 | 
|---|
| 477 |     }
 | 
|---|
| 478 |     else if(str[0]=='d'||str[0]=='D'){
 | 
|---|
| 479 |         if(lstrcmpi(str,"Debug")==0) return COM_DEBUG;
 | 
|---|
| 480 |         if(lstrcmpi(str,"Declare")==0) return COM_DECLARE;
 | 
|---|
| 481 |         if(lstrcmpi(str,"Def")==0) return COM_DEF;
 | 
|---|
| 482 |         if(lstrcmpi(str,"Delete")==0) return -1;
 | 
|---|
| 483 |         if(lstrcmpi(str,"DelWnd")==0) return COM_DELWND;
 | 
|---|
| 484 |         if(lstrcmpi(str,"Dim")==0) return COM_DIM;
 | 
|---|
| 485 |         if(lstrcmpi(str,"Do")==0) return COM_DO;
 | 
|---|
| 486 |         if(lstrcmp(str,"Double")==0) return -1;
 | 
|---|
| 487 |         if(lstrcmp(str,"DWord")==0) return -1;
 | 
|---|
| 488 |     }
 | 
|---|
| 489 |     else if(str[0]=='e'||str[0]=='E'){
 | 
|---|
| 490 |         if(lstrcmpi(str,"Else")==0) return -1;
 | 
|---|
| 491 |         if(lstrcmpi(str,"ElseIf")==0) return -1;
 | 
|---|
| 492 |         if(lstrcmpi(str,"End")==0) return COM_END;
 | 
|---|
| 493 |         if(lstrcmpi(str,"EndIf")==0) return -1;
 | 
|---|
| 494 |         if(lstrcmpi(str,"EndFunction")==0) return -1;
 | 
|---|
| 495 |         if(lstrcmpi(str,"EndSub")==0) return -1;
 | 
|---|
| 496 |         if(lstrcmpi(str,"EndType")==0) return -1;
 | 
|---|
| 497 |         if(lstrcmpi(str,"EndSelect")==0) return -1;
 | 
|---|
| 498 |         if(lstrcmpi(str,"EndWith")==0) return -1;
 | 
|---|
| 499 |         if(lstrcmpi(str,"Enum")==0) return COM_ENUM;
 | 
|---|
| 500 |         if(lstrcmpi(str,"Exit")==0) return -1;
 | 
|---|
| 501 |         if(lstrcmpi(str,"ExitDo")==0) return -1;
 | 
|---|
| 502 |         if(lstrcmpi(str,"ExitFor")==0) return -1;
 | 
|---|
| 503 |         if(lstrcmpi(str,"ExitFunction")==0) return -1;
 | 
|---|
| 504 |         if(lstrcmpi(str,"ExitSub")==0) return -1;
 | 
|---|
| 505 |         if(lstrcmpi(str,"ExitWhile")==0) return -1;
 | 
|---|
| 506 |     }
 | 
|---|
| 507 |     else if(str[0]=='f'||str[0]=='F'){
 | 
|---|
| 508 |         if(lstrcmp(str,"False")==0) return -1;
 | 
|---|
| 509 |         if(lstrcmpi(str,"Field")==0) return COM_FIELD;
 | 
|---|
| 510 |         if(lstrcmpi(str,"For")==0) return COM_FOR;
 | 
|---|
| 511 |         if(lstrcmpi(str,"Function")==0) return COM_FUNCTION;
 | 
|---|
| 512 |     }
 | 
|---|
| 513 |     else if(str[0]=='g'||str[0]=='G'){
 | 
|---|
| 514 |         if(lstrcmpi(str,"Get")==0) return COM_GET;
 | 
|---|
| 515 |         if(lstrcmpi(str,"GoSub")==0) return COM_GOSUB;
 | 
|---|
| 516 |         if(lstrcmpi(str,"Goto")==0) return COM_GOTO;
 | 
|---|
| 517 |     }
 | 
|---|
| 518 |     else if(str[0]=='i'||str[0]=='I'){
 | 
|---|
| 519 |         if(lstrcmpi(str,"If")==0) return COM_IF;
 | 
|---|
| 520 |         if(lstrcmpi(str,"Imports")==0) return -1;
 | 
|---|
| 521 |         if(lstrcmpi(str,"Implements")==0) return -1;
 | 
|---|
| 522 |         if(lstrcmpi(str,"Inherits")==0) return COM_INHERITS;
 | 
|---|
| 523 |         if(lstrcmpi(str,"Input")==0) return COM_INPUT;
 | 
|---|
| 524 |         if(lstrcmp(str,"Int64")==0) return -1;
 | 
|---|
| 525 |         if(lstrcmp(str,"Integer")==0) return -1;
 | 
|---|
| 526 |         if(lstrcmpi(str,"Interface")==0) return COM_INTERFACE;
 | 
|---|
| 527 |     }
 | 
|---|
| 528 |     else if(str[0]=='k'||str[0]=='K'){
 | 
|---|
| 529 |         if(lstrcmpi(str,"Kill")==0) return COM_KILL;
 | 
|---|
| 530 |     }
 | 
|---|
| 531 |     else if(str[0]=='l'||str[0]=='L'){
 | 
|---|
| 532 |         if(lstrcmpi(str,"Let")==0) return COM_LET;
 | 
|---|
| 533 |         if(lstrcmpi(str,"Line")==0) return COM_LINE;
 | 
|---|
| 534 |         if(lstrcmpi(str,"Locate")==0) return COM_LOCATE;
 | 
|---|
| 535 |         if(lstrcmp(str,"Long")==0) return -1;
 | 
|---|
| 536 |         if(lstrcmpi(str,"Loop")==0) return COM_LOOP;
 | 
|---|
| 537 |     }
 | 
|---|
| 538 |     else if(str[0]=='m'||str[0]=='M'){
 | 
|---|
| 539 |         if(lstrcmpi(str,"MkDir")==0) return COM_MKDIR;
 | 
|---|
| 540 |         if(lstrcmpi(str,"MsgBox")==0) return COM_MSGBOX;
 | 
|---|
| 541 |     }
 | 
|---|
| 542 |     else if(str[0]=='n'||str[0]=='N'){
 | 
|---|
| 543 |         if(lstrcmpi(str,"Namespace")==0) return COM_NAMESPACE;
 | 
|---|
| 544 |         if(lstrcmpi(str,"Next")==0) return COM_NEXT;
 | 
|---|
| 545 |         if(lstrcmpi(str,"New")==0) return -1;
 | 
|---|
| 546 |         if(lstrcmpi(str,"Nothing")==0) return -1;
 | 
|---|
| 547 |     }
 | 
|---|
| 548 |     else if(str[0]=='o'||str[0]=='O'){
 | 
|---|
| 549 |         if(lstrcmp(str,"Object")==0) return -1;
 | 
|---|
| 550 |         if(lstrcmpi(str,"Open")==0) return COM_OPEN;
 | 
|---|
| 551 |         if(lstrcmpi(str,"Operator")==0) return -1;
 | 
|---|
| 552 |         if(lstrcmpi(str,"Override")==0) return COM_OVERRIDE;
 | 
|---|
| 553 |     }
 | 
|---|
| 554 |     else if(str[0]=='p'||str[0]=='P'){
 | 
|---|
| 555 |         if(lstrcmpi(str,"Paint")==0) return COM_PAINT;
 | 
|---|
| 556 |         if(lstrcmpi(str,"Print")==0) return COM_PRINT;
 | 
|---|
| 557 |         if(lstrcmpi(str,"Private")==0) return COM_PRIVATE;
 | 
|---|
| 558 |         if(lstrcmpi(str,"Protected")==0) return COM_PROTECTED;
 | 
|---|
| 559 |         if(lstrcmpi(str,"PSet")==0) return COM_PSET;
 | 
|---|
| 560 |         if(lstrcmpi(str,"Put")==0) return COM_PUT;
 | 
|---|
| 561 |         if(lstrcmpi(str,"Public")==0) return COM_PUBLIC;
 | 
|---|
| 562 |     }
 | 
|---|
| 563 |     else if(str[0]=='q'||str[0]=='Q'){
 | 
|---|
| 564 |         if(lstrcmp(str,"QWord")==0) return -1;
 | 
|---|
| 565 |     }
 | 
|---|
| 566 |     else if(str[0]=='r'||str[0]=='R'){
 | 
|---|
| 567 |         if(lstrcmpi(str,"Randomize")==0) return COM_RANDOMIZE;
 | 
|---|
| 568 |         if(lstrcmpi(str,"Rem")==0) return COM_REM;
 | 
|---|
| 569 |         if(lstrcmpi(str,"Return")==0) return COM_RETURN;
 | 
|---|
| 570 |     }
 | 
|---|
| 571 |     else if(str[0]=='s'||str[0]=='S'){
 | 
|---|
| 572 |         if(lstrcmp(str,"SByte")==0) return -1;
 | 
|---|
| 573 |         if(lstrcmpi(str,"Select")==0) return COM_SELECT;
 | 
|---|
| 574 |         if(lstrcmpi(str,"SelectCase")==0) return COM_SELECT;
 | 
|---|
| 575 |         if(lstrcmp(str,"Single")==0) return -1;
 | 
|---|
| 576 |         if(lstrcmpi(str,"Sleep")==0) return COM_SLEEP;
 | 
|---|
| 577 |         if(lstrcmp(str,"Static")==0) return -1;
 | 
|---|
| 578 |         if(lstrcmp(str,"String")==0) return -1;
 | 
|---|
| 579 |         if(lstrcmpi(str,"Sub")==0) return COM_SUB;
 | 
|---|
| 580 |         if(lstrcmpi(str,"Super")==0) return -1;
 | 
|---|
| 581 |     }
 | 
|---|
| 582 |     else if(str[0]=='t'||str[0]=='T'){
 | 
|---|
| 583 |         if(lstrcmpi(str,"Then")==0) return -1;
 | 
|---|
| 584 |         if(lstrcmpi(str,"This")==0) return -1;
 | 
|---|
| 585 |         if(lstrcmp(str,"True")==0) return -1;
 | 
|---|
| 586 |         if(lstrcmpi(str,"Type")==0) return COM_TYPE;
 | 
|---|
| 587 |         if(lstrcmpi(str,"TypeDef")==0) return COM_TYPEDEF;
 | 
|---|
| 588 |     }
 | 
|---|
| 589 |     else if(str[0]=='u'||str[0]=='U'){
 | 
|---|
| 590 |         if(lstrcmpi(str,"Until")==0) return -1;
 | 
|---|
| 591 |     }
 | 
|---|
| 592 |     else if(str[0]=='v'||str[0]=='V'){
 | 
|---|
| 593 |         if(lstrcmpi(str,"Virtual")==0) return COM_VIRTUAL;
 | 
|---|
| 594 |     }
 | 
|---|
| 595 |     else if(str[0]=='w'||str[0]=='W'){
 | 
|---|
| 596 |         if(lstrcmpi(str,"Wend")==0) return COM_WEND;
 | 
|---|
| 597 |         if(lstrcmpi(str,"While")==0) return COM_WHILE;
 | 
|---|
| 598 |         if(lstrcmpi(str,"Window")==0) return COM_WINDOW;
 | 
|---|
| 599 |         if(lstrcmpi(str,"With")==0) return COM_WITH;
 | 
|---|
| 600 |         if(lstrcmp(str,"Word")==0) return -1;
 | 
|---|
| 601 |         if(lstrcmpi(str,"Write")==0) return COM_WRITE;
 | 
|---|
| 602 |     }
 | 
|---|
| 603 |     else if(str[0]=='#'){
 | 
|---|
| 604 |         if(lstrcmpi(str,"#include")==0) return -1;
 | 
|---|
| 605 |         if(lstrcmpi(str,"#strict")==0) return -1;
 | 
|---|
| 606 |         if(lstrcmpi(str,"#console")==0) return -1;
 | 
|---|
| 607 |         if(lstrcmpi(str,"#prompt")==0) return -1;
 | 
|---|
| 608 |         if(lstrcmpi(str,"#N88BASIC")==0) return -1;
 | 
|---|
| 609 |         if(lstrcmpi(str,"#define")==0) return -1;
 | 
|---|
| 610 |         if(lstrcmpi(str,"#ifdef")==0) return -1;
 | 
|---|
| 611 |         if(lstrcmpi(str,"#ifndef")==0) return -1;
 | 
|---|
| 612 |         if(lstrcmpi(str,"#else")==0) return -1;
 | 
|---|
| 613 |         if(lstrcmpi(str,"#endif")==0) return -1;
 | 
|---|
| 614 |     }
 | 
|---|
| 615 |     return 0;
 | 
|---|
| 616 | }
 | 
|---|
| 617 | 
 | 
|---|
| 618 | HBITMAP CreateGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2){
 | 
|---|
| 619 |     //グラデーションビットマップを生成
 | 
|---|
| 620 | 
 | 
|---|
| 621 |     BITMAPINFO BitmapInfo;
 | 
|---|
| 622 |     memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
 | 
|---|
| 623 |     BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
 | 
|---|
| 624 |     BitmapInfo.bmiHeader.biWidth=pSize->cx;
 | 
|---|
| 625 |     BitmapInfo.bmiHeader.biHeight=pSize->cy;
 | 
|---|
| 626 |     BitmapInfo.bmiHeader.biPlanes=1;
 | 
|---|
| 627 |     BitmapInfo.bmiHeader.biBitCount=24;
 | 
|---|
| 628 | 
 | 
|---|
| 629 |     HDC hdc;
 | 
|---|
| 630 |     hdc=GetDC(GetDesktopWindow());
 | 
|---|
| 631 | 
 | 
|---|
| 632 |     HBITMAP hBitmap;
 | 
|---|
| 633 |     BYTE *pByte;
 | 
|---|
| 634 |     hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
 | 
|---|
| 635 | 
 | 
|---|
| 636 |     int i,i2,x,y;
 | 
|---|
| 637 |     COLORREF rgb;
 | 
|---|
| 638 |     i=BitmapInfo.bmiHeader.biWidth*3;
 | 
|---|
| 639 |     if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
 | 
|---|
| 640 |     for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
 | 
|---|
| 641 |         if(y<BitmapInfo.bmiHeader.biHeight/2-2) rgb=color2;
 | 
|---|
| 642 |         else if(y>BitmapInfo.bmiHeader.biHeight/2+2) rgb=color1;
 | 
|---|
| 643 |         else{
 | 
|---|
| 644 |             double ratio;
 | 
|---|
| 645 |             ratio=((double)y-((double)BitmapInfo.bmiHeader.biHeight/(double)2-(double)2))/(double)4;
 | 
|---|
| 646 |             //ratio=(double)y/(double)BitmapInfo.bmiHeader.biHeight;
 | 
|---|
| 647 |             rgb=RGB(
 | 
|---|
| 648 |                 LOBYTE(LOWORD(color2))+(int)(double)(LOBYTE(LOWORD(color1))-LOBYTE(LOWORD(color2)))*(ratio),    //赤要素
 | 
|---|
| 649 |                 HIBYTE(LOWORD(color2))+(int)(double)(HIBYTE(LOWORD(color1))-HIBYTE(LOWORD(color2)))*(ratio),    //緑要素
 | 
|---|
| 650 |                 LOBYTE(HIWORD(color2))+(int)(double)(LOBYTE(HIWORD(color1))-LOBYTE(HIWORD(color2)))*(ratio)     //青要素
 | 
|---|
| 651 |                 );
 | 
|---|
| 652 |         }
 | 
|---|
| 653 |         for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
 | 
|---|
| 654 |             i2=y*i+x*3;
 | 
|---|
| 655 |             pByte[i2+2]=LOBYTE(LOWORD(rgb));
 | 
|---|
| 656 |             pByte[i2+1]=HIBYTE(LOWORD(rgb));
 | 
|---|
| 657 |             pByte[i2]=LOBYTE(HIWORD(rgb));
 | 
|---|
| 658 |         }
 | 
|---|
| 659 |     }
 | 
|---|
| 660 | 
 | 
|---|
| 661 |     ReleaseDC(GetDesktopWindow(),hdc);
 | 
|---|
| 662 | 
 | 
|---|
| 663 |     return hBitmap;
 | 
|---|
| 664 | }
 | 
|---|
| 665 | HBITMAP CreateVertGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2){
 | 
|---|
| 666 |     //グラデーションビットマップを生成
 | 
|---|
| 667 | 
 | 
|---|
| 668 |     BITMAPINFO BitmapInfo;
 | 
|---|
| 669 |     memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
 | 
|---|
| 670 |     BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
 | 
|---|
| 671 |     BitmapInfo.bmiHeader.biWidth=pSize->cx;
 | 
|---|
| 672 |     BitmapInfo.bmiHeader.biHeight=pSize->cy;
 | 
|---|
| 673 |     BitmapInfo.bmiHeader.biPlanes=1;
 | 
|---|
| 674 |     BitmapInfo.bmiHeader.biBitCount=24;
 | 
|---|
| 675 | 
 | 
|---|
| 676 |     HDC hdc;
 | 
|---|
| 677 |     hdc=GetDC(GetDesktopWindow());
 | 
|---|
| 678 | 
 | 
|---|
| 679 |     HBITMAP hBitmap;
 | 
|---|
| 680 |     BYTE *pByte;
 | 
|---|
| 681 |     hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
 | 
|---|
| 682 | 
 | 
|---|
| 683 |     int i,i2,x,y;
 | 
|---|
| 684 |     COLORREF rgb;
 | 
|---|
| 685 |     i=BitmapInfo.bmiHeader.biWidth*3;
 | 
|---|
| 686 |     if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
 | 
|---|
| 687 |     for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
 | 
|---|
| 688 |         if(y<BitmapInfo.bmiHeader.biHeight/2-2) rgb=color2;
 | 
|---|
| 689 |         else if(y>BitmapInfo.bmiHeader.biHeight/2+2) rgb=color1;
 | 
|---|
| 690 |         else{
 | 
|---|
| 691 |             double ratio;
 | 
|---|
| 692 |             ratio=(double)y/(double)BitmapInfo.bmiHeader.biHeight;
 | 
|---|
| 693 |             rgb=RGB(
 | 
|---|
| 694 |                 LOBYTE(LOWORD(color2))+(int)(double)(LOBYTE(LOWORD(color1))-LOBYTE(LOWORD(color2)))*(ratio),    //赤要素
 | 
|---|
| 695 |                 HIBYTE(LOWORD(color2))+(int)(double)(HIBYTE(LOWORD(color1))-HIBYTE(LOWORD(color2)))*(ratio),    //緑要素
 | 
|---|
| 696 |                 LOBYTE(HIWORD(color2))+(int)(double)(LOBYTE(HIWORD(color1))-LOBYTE(HIWORD(color2)))*(ratio)     //青要素
 | 
|---|
| 697 |                 );
 | 
|---|
| 698 |         }
 | 
|---|
| 699 |         for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
 | 
|---|
| 700 |             i2=y*i+x*3;
 | 
|---|
| 701 |             pByte[i2+2]=LOBYTE(LOWORD(rgb));
 | 
|---|
| 702 |             pByte[i2+1]=HIBYTE(LOWORD(rgb));
 | 
|---|
| 703 |             pByte[i2]=LOBYTE(HIWORD(rgb));
 | 
|---|
| 704 |         }
 | 
|---|
| 705 |     }
 | 
|---|
| 706 | 
 | 
|---|
| 707 |     ReleaseDC(GetDesktopWindow(),hdc);
 | 
|---|
| 708 | 
 | 
|---|
| 709 |     return hBitmap;
 | 
|---|
| 710 | }
 | 
|---|
| 711 | HBITMAP CreateHorzGradationBitmap(SIZE *pSize,COLORREF color1,COLORREF color2){
 | 
|---|
| 712 |     //グラデーションビットマップを生成
 | 
|---|
| 713 | 
 | 
|---|
| 714 |     BITMAPINFO BitmapInfo;
 | 
|---|
| 715 |     memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
 | 
|---|
| 716 |     BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
 | 
|---|
| 717 |     BitmapInfo.bmiHeader.biWidth=pSize->cx;
 | 
|---|
| 718 |     BitmapInfo.bmiHeader.biHeight=pSize->cy;
 | 
|---|
| 719 |     BitmapInfo.bmiHeader.biPlanes=1;
 | 
|---|
| 720 |     BitmapInfo.bmiHeader.biBitCount=24;
 | 
|---|
| 721 | 
 | 
|---|
| 722 |     HDC hdc;
 | 
|---|
| 723 |     hdc=GetDC(GetDesktopWindow());
 | 
|---|
| 724 | 
 | 
|---|
| 725 |     HBITMAP hBitmap;
 | 
|---|
| 726 |     BYTE *pByte;
 | 
|---|
| 727 |     hBitmap=CreateDIBSection(hdc,&BitmapInfo,DIB_RGB_COLORS,(void **)&pByte,0,0);
 | 
|---|
| 728 | 
 | 
|---|
| 729 |     int i,i2,x,y;
 | 
|---|
| 730 |     COLORREF rgb;
 | 
|---|
| 731 |     i=BitmapInfo.bmiHeader.biWidth*3;
 | 
|---|
| 732 |     if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
 | 
|---|
| 733 |     for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
 | 
|---|
| 734 |         double ratio;
 | 
|---|
| 735 |         ratio=(double)x/(double)BitmapInfo.bmiHeader.biWidth;
 | 
|---|
| 736 |         rgb=RGB(
 | 
|---|
| 737 |             LOBYTE(LOWORD(color1))+(int)(double)(LOBYTE(LOWORD(color2))-LOBYTE(LOWORD(color1)))*(ratio),    //赤要素
 | 
|---|
| 738 |             HIBYTE(LOWORD(color1))+(int)(double)(HIBYTE(LOWORD(color2))-HIBYTE(LOWORD(color1)))*(ratio),    //緑要素
 | 
|---|
| 739 |             LOBYTE(HIWORD(color1))+(int)(double)(LOBYTE(HIWORD(color2))-LOBYTE(HIWORD(color1)))*(ratio)     //青要素
 | 
|---|
| 740 |             );
 | 
|---|
| 741 |         for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
 | 
|---|
| 742 |             i2=y*i+x*3;
 | 
|---|
| 743 |             pByte[i2+2]=LOBYTE(LOWORD(rgb));
 | 
|---|
| 744 |             pByte[i2+1]=HIBYTE(LOWORD(rgb));
 | 
|---|
| 745 |             pByte[i2]=LOBYTE(HIWORD(rgb));
 | 
|---|
| 746 |         }
 | 
|---|
| 747 |     }
 | 
|---|
| 748 | 
 | 
|---|
| 749 |     ReleaseDC(GetDesktopWindow(),hdc);
 | 
|---|
| 750 | 
 | 
|---|
| 751 |     return hBitmap;
 | 
|---|
| 752 | }
 | 
|---|
| 753 | HICON CreateGrayIcon(HICON hBaseIcon){
 | 
|---|
| 754 |     ////////////////////////
 | 
|---|
| 755 |     // 淡色アイコンを生成
 | 
|---|
| 756 |     ////////////////////////
 | 
|---|
| 757 | 
 | 
|---|
| 758 |     HICON hGrayIcon;
 | 
|---|
| 759 | 
 | 
|---|
| 760 |     ICONINFO IconInfo;
 | 
|---|
| 761 |     GetIconInfo(hBaseIcon,&IconInfo);
 | 
|---|
| 762 | 
 | 
|---|
| 763 | 
 | 
|---|
| 764 |     //ビットマップを加工
 | 
|---|
| 765 |     BITMAP Bitmap;
 | 
|---|
| 766 |     GetObject(IconInfo.hbmColor,sizeof(Bitmap),&Bitmap);
 | 
|---|
| 767 | 
 | 
|---|
| 768 |     BITMAPINFO BitmapInfo;
 | 
|---|
| 769 |     memset(&BitmapInfo.bmiHeader,0,sizeof(BITMAPINFOHEADER));
 | 
|---|
| 770 |     BitmapInfo.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
 | 
|---|
| 771 |     BitmapInfo.bmiHeader.biWidth=Bitmap.bmWidth;
 | 
|---|
| 772 |     BitmapInfo.bmiHeader.biHeight=Bitmap.bmHeight;
 | 
|---|
| 773 |     BitmapInfo.bmiHeader.biPlanes=1;
 | 
|---|
| 774 |     BitmapInfo.bmiHeader.biBitCount=24;
 | 
|---|
| 775 |     BitmapInfo.bmiHeader.biCompression=BI_RGB;
 | 
|---|
| 776 | 
 | 
|---|
| 777 |     HDC hdc;
 | 
|---|
| 778 |     hdc=GetDC(GetDesktopWindow());
 | 
|---|
| 779 | 
 | 
|---|
| 780 |     BYTE *pByte;
 | 
|---|
| 781 |     pByte=(BYTE *)HeapAlloc(hHeap,0,Bitmap.bmWidth*Bitmap.bmHeight*sizeof(COLORREF));
 | 
|---|
| 782 |     GetDIBits(hdc,
 | 
|---|
| 783 |         IconInfo.hbmColor,
 | 
|---|
| 784 |         0,
 | 
|---|
| 785 |         Bitmap.bmHeight,
 | 
|---|
| 786 |         (void *)pByte,
 | 
|---|
| 787 |         &BitmapInfo,
 | 
|---|
| 788 |         DIB_RGB_COLORS);
 | 
|---|
| 789 | 
 | 
|---|
| 790 |     int i,i2,x,y;
 | 
|---|
| 791 |     i=BitmapInfo.bmiHeader.biWidth*3;
 | 
|---|
| 792 |     if(i%sizeof(LONG)!=0) i+=sizeof(LONG)-(i%sizeof(LONG));
 | 
|---|
| 793 |     for(x=0;x<BitmapInfo.bmiHeader.biWidth;x++){
 | 
|---|
| 794 |         for(y=0;y<BitmapInfo.bmiHeader.biHeight;y++){
 | 
|---|
| 795 |             i2=y*i+x*3;
 | 
|---|
| 796 |             if(pByte[i2+2]==0&&pByte[i2+1]==0&&pByte[i2]==0){
 | 
|---|
| 797 |                 //透明色
 | 
|---|
| 798 |                 //何もしない
 | 
|---|
| 799 |             }
 | 
|---|
| 800 |             else{
 | 
|---|
| 801 |                 double ratio=0.5;   //明るさ
 | 
|---|
| 802 | 
 | 
|---|
| 803 |                 pByte[i2+2]+=(BYTE)((double)(255-pByte[i2+2])*ratio);
 | 
|---|
| 804 |                 pByte[i2+1]+=(BYTE)((double)(255-pByte[i2+1])*ratio);
 | 
|---|
| 805 |                 pByte[i2]+=(BYTE)((double)(255-pByte[i2])*ratio);
 | 
|---|
| 806 | 
 | 
|---|
| 807 |                 pByte[i2+2]=(BYTE)(((int)pByte[i2+2]+(int)pByte[i2+1]+(int)pByte[i2])/3);
 | 
|---|
| 808 |                 pByte[i2+1]=pByte[i2+2];
 | 
|---|
| 809 |                 pByte[i2]=pByte[i2+2];
 | 
|---|
| 810 |             }
 | 
|---|
| 811 |         }
 | 
|---|
| 812 |     }
 | 
|---|
| 813 | 
 | 
|---|
| 814 |     SetDIBits(hdc,
 | 
|---|
| 815 |         IconInfo.hbmColor,
 | 
|---|
| 816 |         0,
 | 
|---|
| 817 |         Bitmap.bmHeight,
 | 
|---|
| 818 |         (void *)pByte,
 | 
|---|
| 819 |         &BitmapInfo,
 | 
|---|
| 820 |         DIB_RGB_COLORS);
 | 
|---|
| 821 | 
 | 
|---|
| 822 |     HeapDefaultFree(pByte);
 | 
|---|
| 823 | 
 | 
|---|
| 824 |     ReleaseDC(GetDesktopWindow(),hdc);
 | 
|---|
| 825 | 
 | 
|---|
| 826 | 
 | 
|---|
| 827 |     hGrayIcon=CreateIconIndirect(&IconInfo);
 | 
|---|
| 828 | 
 | 
|---|
| 829 |     //不要なビットマップを破棄
 | 
|---|
| 830 |     DeleteObject(IconInfo.hbmMask);
 | 
|---|
| 831 |     DeleteObject(IconInfo.hbmColor);
 | 
|---|
| 832 | 
 | 
|---|
| 833 |     return hGrayIcon;
 | 
|---|
| 834 | }
 | 
|---|
| 835 | void GetSize(SIZE *pSize,RECT *pRect){
 | 
|---|
| 836 |     pSize->cx=pRect->right-pRect->left;
 | 
|---|
| 837 |     pSize->cy=pRect->bottom-pRect->top;
 | 
|---|
| 838 | }
 | 
|---|
| 839 | BOOL HitTest(RECT *pRect,POINT *pPos){
 | 
|---|
| 840 |     if(pRect->left<=pPos->x&&pPos->x<pRect->right&&
 | 
|---|
| 841 |         pRect->top<=pPos->y&&pPos->y<pRect->bottom) return 1;
 | 
|---|
| 842 |     return 0;
 | 
|---|
| 843 | }
 | 
|---|
| 844 | BOOL Rectangle(HDC hdc,RECT *pRect){
 | 
|---|
| 845 |     return Rectangle(hdc,pRect->left,pRect->top,pRect->right,pRect->bottom);
 | 
|---|
| 846 | }
 | 
|---|
| 847 | 
 | 
|---|
| 848 | void ComboBox_SetSelText(HWND hCombo,char *lpszText){
 | 
|---|
| 849 |     SendMessage(hCombo,CB_SETCURSEL,
 | 
|---|
| 850 |         SendMessage(hCombo,CB_FINDSTRINGEXACT,0,(LPARAM)lpszText),
 | 
|---|
| 851 |         0);
 | 
|---|
| 852 | }
 | 
|---|
| 853 | 
 | 
|---|
| 854 | void SetCursorByState(int state){
 | 
|---|
| 855 |     if(state==FRAME_UPPER_LEFT||state==FRAME_LOWER_RIGHT) SetCursor(LoadCursor(0,IDC_SIZENWSE));
 | 
|---|
| 856 |     else if(state==FRAME_UPPER_RIGHT||state==FRAME_LOWER_LEFT) SetCursor(LoadCursor(0,IDC_SIZENESW));
 | 
|---|
| 857 |     else if(state==FRAME_LEFT||state==FRAME_RIGHT) SetCursor(LoadCursor(0,IDC_SIZEWE));
 | 
|---|
| 858 |     else if(state==FRAME_UPPER||state==FRAME_LOWER) SetCursor(LoadCursor(0,IDC_SIZENS));
 | 
|---|
| 859 |     else if(state==FRAME_INSIDE) SetCursor(LoadCursor(0,IDC_SIZEALL));
 | 
|---|
| 860 |     else SetCursor(LoadCursor(0,IDC_ARROW));
 | 
|---|
| 861 | }
 | 
|---|
| 862 | 
 | 
|---|
| 863 | void SetTextEditColorDesign(TEXTEDIT_COLOR_INFO *pColorInfo,CTheme *pobj_Theme,BOOL bRedraw){
 | 
|---|
| 864 |     pColorInfo->rgbDefault=pobj_Theme->TextColorInfo.rgbDefault;
 | 
|---|
| 865 |     pColorInfo->rgbComment=pobj_Theme->TextColorInfo.rgbComment;
 | 
|---|
| 866 |     pColorInfo->rgbStatement=pobj_Theme->TextColorInfo.rgbStatement;
 | 
|---|
| 867 |     pColorInfo->rgbString=pobj_Theme->TextColorInfo.rgbString;
 | 
|---|
| 868 |     pColorInfo->rgbCursorBack=pobj_Theme->TextColorInfo.rgbCursorBack;
 | 
|---|
| 869 |     pColorInfo->rgbBackground=pobj_Theme->TextColorInfo.rgbBackground;
 | 
|---|
| 870 | 
 | 
|---|
| 871 |     //アクティブテーマにセット
 | 
|---|
| 872 |     lstrcpy(pobj_nv->szActiveTheme,pobj_Theme->m_name);
 | 
|---|
| 873 | 
 | 
|---|
| 874 |     //テーマ依存の描画リソースを取得
 | 
|---|
| 875 |     pobj_DBTheme->unlock();
 | 
|---|
| 876 |     pobj_DBTheme->lock();
 | 
|---|
| 877 | 
 | 
|---|
| 878 |     if(bRedraw){
 | 
|---|
| 879 |         //再描画
 | 
|---|
| 880 |         extern MDIINFO MdiInfo[MAX_WNDNUM];
 | 
|---|
| 881 |         int i;
 | 
|---|
| 882 |         for(i=0;i<MAX_WNDNUM;i++){
 | 
|---|
| 883 |             if(MdiInfo[i].hwnd){
 | 
|---|
| 884 |                 if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
 | 
|---|
| 885 |                     SetTextEditWordColor(i);
 | 
|---|
| 886 |                     InvalidateRect(MdiInfo[i].pMdiTextEdit->hEdit,NULL,0);
 | 
|---|
| 887 |                 }
 | 
|---|
| 888 |             }
 | 
|---|
| 889 |         }
 | 
|---|
| 890 |     }
 | 
|---|
| 891 | }
 | 
|---|
| 892 | 
 | 
|---|
| 893 | BOOL SetupProjectEditor(void){
 | 
|---|
| 894 |     extern HINSTANCE hInst;
 | 
|---|
| 895 |     int i;
 | 
|---|
| 896 |     char str[MAX_PATH],temporary[MAX_PATH];
 | 
|---|
| 897 | 
 | 
|---|
| 898 | 
 | 
|---|
| 899 |     //リソース用DLLをマッピング
 | 
|---|
| 900 | #if defined(JPN)
 | 
|---|
| 901 |     //日本語リソース
 | 
|---|
| 902 |     sprintf(temporary,"%sSubOperation\\res.dll",pj_editor_Dir);
 | 
|---|
| 903 | #else
 | 
|---|
| 904 |     //英語リソース
 | 
|---|
| 905 |     sprintf(temporary,"%sSubOperation\\res_e.dll",pj_editor_Dir);
 | 
|---|
| 906 | #endif
 | 
|---|
| 907 |     hResInst=LoadLibrary(temporary);
 | 
|---|
| 908 | 
 | 
|---|
| 909 |     //アイコンリソースDLLをマッピング
 | 
|---|
| 910 |     sprintf(temporary,"%sSubOperation\\icon_res.dll",pj_editor_Dir);
 | 
|---|
| 911 |     hIconResInst=LoadLibrary(temporary);
 | 
|---|
| 912 | 
 | 
|---|
| 913 |     //LuxCtrl.dllをマッピング
 | 
|---|
| 914 |     sprintf(temporary,"%sSubOperation\\LuxCtrl.dll",pj_editor_Dir);
 | 
|---|
| 915 |     hLib_LuxCtrl=LoadLibrary(temporary);
 | 
|---|
| 916 |     if(!hLib_LuxCtrl){
 | 
|---|
| 917 |         MessageBox(0,"LuxCtrl.dllの読み込みに失敗しました。",APPLICATION_NAME,MB_OK|MB_ICONEXCLAMATION);
 | 
|---|
| 918 |         return 0;
 | 
|---|
| 919 |     }
 | 
|---|
| 920 |     LuxToolbar_CreateInstance=
 | 
|---|
| 921 |         (PROC_LuxToolbar_CreateInstance)GetProcAddress(hLib_LuxCtrl,"LuxToolbar_CreateInstance");
 | 
|---|
| 922 | 
 | 
|---|
| 923 | 
 | 
|---|
| 924 |     //モジュールディレクトリを取得
 | 
|---|
| 925 |     GetModuleFileName(hInst,temporary,MAX_PATH);
 | 
|---|
| 926 |     _splitpath(temporary,pj_editor_Dir,str,NULL,NULL);
 | 
|---|
| 927 |     lstrcat(pj_editor_Dir,str);
 | 
|---|
| 928 | 
 | 
|---|
| 929 |     //ヒープオブジェクトを作成
 | 
|---|
| 930 |     extern HANDLE hHeap;
 | 
|---|
| 931 |     hHeap=HeapCreate(HEAP_GENERATE_EXCEPTIONS,0,0);
 | 
|---|
| 932 | 
 | 
|---|
| 933 | 
 | 
|---|
| 934 |     //自動バックアップ用のディレクトリを生成
 | 
|---|
| 935 |     CreateBackupDir();
 | 
|---|
| 936 | 
 | 
|---|
| 937 | 
 | 
|---|
| 938 |     //COMを初期化
 | 
|---|
| 939 |     CoInitialize(0);
 | 
|---|
| 940 | 
 | 
|---|
| 941 |     //スクリーンサイズを取得
 | 
|---|
| 942 |     ScreenX=GetSystemMetrics(SM_CXSCREEN);
 | 
|---|
| 943 |     ScreenY=GetSystemMetrics(SM_CYSCREEN);
 | 
|---|
| 944 | 
 | 
|---|
| 945 |     //コンパイラ名をセット(デフォルトはWin32)
 | 
|---|
| 946 |     extern char *lpszCompilerName;
 | 
|---|
| 947 |     lpszCompilerName=WIN32_COMPILER_NAME;
 | 
|---|
| 948 | 
 | 
|---|
| 949 |     //不揮発性のデータを取得
 | 
|---|
| 950 |     pobj_nv=new CNonVolatile;
 | 
|---|
| 951 |     pobj_nv->load();
 | 
|---|
| 952 | 
 | 
|---|
| 953 | 
 | 
|---|
| 954 |     //アルファブレンド用のAPIを取得
 | 
|---|
| 955 |     extern FWINLAYER pSetLayeredWindowAttributes;
 | 
|---|
| 956 |     extern HINSTANCE hUser32Lib;
 | 
|---|
| 957 |     hUser32Lib=LoadLibrary("user32.dll");
 | 
|---|
| 958 |     pSetLayeredWindowAttributes=(FWINLAYER)GetProcAddress(hUser32Lib,"pSetLayeredWindowAttributes");
 | 
|---|
| 959 | 
 | 
|---|
| 960 | 
 | 
|---|
| 961 | 
 | 
|---|
| 962 | 
 | 
|---|
| 963 |     /////////////////////
 | 
|---|
| 964 |     // フォントを定義
 | 
|---|
| 965 |     /////////////////////
 | 
|---|
| 966 | 
 | 
|---|
| 967 |     //パラメータ ヒント フォント
 | 
|---|
| 968 |     extern METHODCHECKINFO MethodCheckInfo;
 | 
|---|
| 969 |     MethodCheckInfo.hFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
 | 
|---|
| 970 |     i=MethodCheckInfo.LogFont.lfWeight;
 | 
|---|
| 971 |     MethodCheckInfo.LogFont.lfWeight=FW_BOLD;
 | 
|---|
| 972 |     MethodCheckInfo.hBoldFont=CreateFontIndirect(&MethodCheckInfo.LogFont);
 | 
|---|
| 973 |     MethodCheckInfo.LogFont.lfWeight=i;
 | 
|---|
| 974 | 
 | 
|---|
| 975 |     //ステータスバー フォント
 | 
|---|
| 976 |     LOGFONT LogFont;
 | 
|---|
| 977 |     extern HFONT hStatusFont;
 | 
|---|
| 978 |     LogFont.lfHeight=-12;
 | 
|---|
| 979 |     LogFont.lfWidth=0;
 | 
|---|
| 980 |     LogFont.lfEscapement=0;
 | 
|---|
| 981 |     LogFont.lfOrientation=0;
 | 
|---|
| 982 |     LogFont.lfWeight=FW_REGULAR;
 | 
|---|
| 983 |     LogFont.lfItalic=NULL;
 | 
|---|
| 984 |     LogFont.lfUnderline=NULL;
 | 
|---|
| 985 |     LogFont.lfStrikeOut=NULL;
 | 
|---|
| 986 |     LogFont.lfCharSet=SHIFTJIS_CHARSET;
 | 
|---|
| 987 |     LogFont.lfOutPrecision=OUT_STRING_PRECIS;
 | 
|---|
| 988 |     LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
 | 
|---|
| 989 |     LogFont.lfQuality=DRAFT_QUALITY;
 | 
|---|
| 990 |     LogFont.lfPitchAndFamily=VARIABLE_PITCH;
 | 
|---|
| 991 |     sprintf(LogFont.lfFaceName,"MS Pゴシック");
 | 
|---|
| 992 |     hStatusFont=CreateFontIndirect(&LogFont);
 | 
|---|
| 993 | 
 | 
|---|
| 994 |     //ハイパーリンク フォント
 | 
|---|
| 995 |     extern HFONT hHyperLinkFont;
 | 
|---|
| 996 |     LogFont.lfHeight=-12;
 | 
|---|
| 997 |     LogFont.lfWidth=0;
 | 
|---|
| 998 |     LogFont.lfEscapement=0;
 | 
|---|
| 999 |     LogFont.lfOrientation=0;
 | 
|---|
| 1000 |     LogFont.lfWeight=FW_REGULAR;
 | 
|---|
| 1001 |     LogFont.lfItalic=NULL;
 | 
|---|
| 1002 |     LogFont.lfUnderline=TRUE;
 | 
|---|
| 1003 |     LogFont.lfStrikeOut=NULL;
 | 
|---|
| 1004 |     LogFont.lfCharSet=SHIFTJIS_CHARSET;
 | 
|---|
| 1005 |     LogFont.lfOutPrecision=OUT_STRING_PRECIS;
 | 
|---|
| 1006 |     LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
 | 
|---|
| 1007 |     LogFont.lfQuality=DRAFT_QUALITY;
 | 
|---|
| 1008 |     LogFont.lfPitchAndFamily=VARIABLE_PITCH;
 | 
|---|
| 1009 |     sprintf(LogFont.lfFaceName,"MS Pゴシック");
 | 
|---|
| 1010 |     hHyperLinkFont=CreateFontIndirect(&LogFont);
 | 
|---|
| 1011 | 
 | 
|---|
| 1012 |     //ルーラー フォント
 | 
|---|
| 1013 |     extern HFONT hRulerFont;
 | 
|---|
| 1014 |     LogFont.lfHeight=-10;
 | 
|---|
| 1015 |     LogFont.lfWidth=0;
 | 
|---|
| 1016 |     LogFont.lfEscapement=0;
 | 
|---|
| 1017 |     LogFont.lfOrientation=0;
 | 
|---|
| 1018 |     LogFont.lfWeight=FW_REGULAR;
 | 
|---|
| 1019 |     LogFont.lfItalic=NULL;
 | 
|---|
| 1020 |     LogFont.lfUnderline=0;
 | 
|---|
| 1021 |     LogFont.lfStrikeOut=NULL;
 | 
|---|
| 1022 |     LogFont.lfCharSet=SHIFTJIS_CHARSET;
 | 
|---|
| 1023 |     LogFont.lfOutPrecision=OUT_STRING_PRECIS;
 | 
|---|
| 1024 |     LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
 | 
|---|
| 1025 |     LogFont.lfQuality=DRAFT_QUALITY;
 | 
|---|
| 1026 |     LogFont.lfPitchAndFamily=VARIABLE_PITCH;
 | 
|---|
| 1027 |     sprintf(LogFont.lfFaceName,"MS ゴシック");
 | 
|---|
| 1028 |     hRulerFont=CreateFontIndirect(&LogFont);
 | 
|---|
| 1029 | 
 | 
|---|
| 1030 |     //行番号の描画用
 | 
|---|
| 1031 |     extern HFONT hFont_LineNumber;
 | 
|---|
| 1032 |     LogFont.lfHeight=-11;
 | 
|---|
| 1033 |     LogFont.lfWidth=0;
 | 
|---|
| 1034 |     LogFont.lfEscapement=0;
 | 
|---|
| 1035 |     LogFont.lfOrientation=0;
 | 
|---|
| 1036 |     LogFont.lfWeight=FW_BOLD;
 | 
|---|
| 1037 |     LogFont.lfItalic=NULL;
 | 
|---|
| 1038 |     LogFont.lfUnderline=NULL;
 | 
|---|
| 1039 |     LogFont.lfStrikeOut=NULL;
 | 
|---|
| 1040 |     LogFont.lfCharSet=ANSI_CHARSET;
 | 
|---|
| 1041 |     LogFont.lfOutPrecision=OUT_STRING_PRECIS;
 | 
|---|
| 1042 |     LogFont.lfClipPrecision=CLIP_STROKE_PRECIS;
 | 
|---|
| 1043 |     LogFont.lfQuality=DRAFT_QUALITY;
 | 
|---|
| 1044 |     LogFont.lfPitchAndFamily=VARIABLE_PITCH;
 | 
|---|
| 1045 |     sprintf(LogFont.lfFaceName,"Courier New");
 | 
|---|
| 1046 |     hFont_LineNumber=CreateFontIndirect(&LogFont);
 | 
|---|
| 1047 | 
 | 
|---|
| 1048 |     //メニューフォント
 | 
|---|
| 1049 |     NONCLIENTMETRICS NCMetrics;
 | 
|---|
| 1050 |     NCMetrics.cbSize = sizeof( NONCLIENTMETRICS );
 | 
|---|
| 1051 |     SystemParametersInfo( SPI_GETNONCLIENTMETRICS, sizeof( NONCLIENTMETRICS ), &NCMetrics, 0 );
 | 
|---|
| 1052 |     hMenuFont=CreateFontIndirect(&NCMetrics.lfMenuFont);
 | 
|---|
| 1053 | 
 | 
|---|
| 1054 | 
 | 
|---|
| 1055 | 
 | 
|---|
| 1056 |     //背景ブラシ
 | 
|---|
| 1057 |     extern HBRUSH h3DFaceBackBrush;
 | 
|---|
| 1058 |     h3DFaceBackBrush=CreateSolidBrush(GetSysColor(COLOR_3DFACE));
 | 
|---|
| 1059 | 
 | 
|---|
| 1060 |     //アイコン
 | 
|---|
| 1061 |     extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon;
 | 
|---|
| 1062 |     hOwnerIcon=(HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MAIN),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
 | 
|---|
| 1063 |     hBasicProgramIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_BASICPROGRAM),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
 | 
|---|
| 1064 |     hTextDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
 | 
|---|
| 1065 |     hWindowDocumentIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_WINDOW),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
 | 
|---|
| 1066 | 
 | 
|---|
| 1067 | 
 | 
|---|
| 1068 | 
 | 
|---|
| 1069 | 
 | 
|---|
| 1070 |     //メインメニュー
 | 
|---|
| 1071 |     pobj_MainMenu=new CMenuEx(LoadMenu(hResInst,MAKEINTRESOURCE(IDR_MAINMENU)));
 | 
|---|
| 1072 | 
 | 
|---|
| 1073 |     pobj_MainMenu->InitOwnerDraw(1);            //オーナー描画の初期化
 | 
|---|
| 1074 | 
 | 
|---|
| 1075 |     CSubMenuEx *pobj_FileMenu;
 | 
|---|
| 1076 |     pobj_FileMenu=pobj_MainMenu->ppobj_MenuItemData[0]->pobj_SubMenu;
 | 
|---|
| 1077 | 
 | 
|---|
| 1078 |     //未完成
 | 
|---|
| 1079 |     extern HMENU hFirstMainMenu;
 | 
|---|
| 1080 |     hFirstMainMenu=0;
 | 
|---|
| 1081 | 
 | 
|---|
| 1082 |     //「最近使ったファイル」サブメニューを取得(と同時にも正規のメニュー文字列を指定)
 | 
|---|
| 1083 |     for(i=0;i<pobj_FileMenu->iMenuItemNum;i++){
 | 
|---|
| 1084 |         if(pobj_FileMenu->ppobj_MenuItemData[i]->str){
 | 
|---|
| 1085 |             if(lstrcmp(pobj_FileMenu->ppobj_MenuItemData[i]->str,"FileHistory")==0){
 | 
|---|
| 1086 |                 pobj_FileMenu->RenameMenuItem(i,"最近使ったファイル(&F)");
 | 
|---|
| 1087 | 
 | 
|---|
| 1088 |                 extern CSubMenuEx *pobj_FileHistoryMenu;
 | 
|---|
| 1089 |                 pobj_FileHistoryMenu=pobj_FileMenu->ppobj_MenuItemData[i]->pobj_SubMenu;
 | 
|---|
| 1090 |             }
 | 
|---|
| 1091 | 
 | 
|---|
| 1092 | #ifndef THETEXT
 | 
|---|
| 1093 |             //「最近使ったプロジェクト」サブメニューを取得(と同時にも正規のメニュー文字列を指定)
 | 
|---|
| 1094 |             //※ProjectEditorのみ
 | 
|---|
| 1095 |             if(lstrcmp(pobj_FileMenu->ppobj_MenuItemData[i]->str,"ProjectHistory")==0){
 | 
|---|
| 1096 |                 pobj_FileMenu->RenameMenuItem(i,"最近使ったプロジェクト(&J)");
 | 
|---|
| 1097 | 
 | 
|---|
| 1098 |                 extern CSubMenuEx *pobj_ProjectHistoryMenu;
 | 
|---|
| 1099 |                 pobj_ProjectHistoryMenu=pobj_FileMenu->ppobj_MenuItemData[i]->pobj_SubMenu;
 | 
|---|
| 1100 |             }
 | 
|---|
| 1101 | #endif
 | 
|---|
| 1102 |         }
 | 
|---|
| 1103 |     }
 | 
|---|
| 1104 | 
 | 
|---|
| 1105 | #define ICONSET(itemID,iconID) pobj_MainMenu->SetIcon(itemID,(HICON)LoadImage(hIconResInst,MAKEINTRESOURCE(iconID),IMAGE_ICON,16,16,0));
 | 
|---|
| 1106 |     //メニューアイコンをセット
 | 
|---|
| 1107 | 
 | 
|---|
| 1108 |     //ファイル
 | 
|---|
| 1109 |     ICONSET(IDM_NEW,IDI_NEW);
 | 
|---|
| 1110 |     ICONSET(IDM_OPEN,IDI_OPEN);
 | 
|---|
| 1111 |     ICONSET(IDM_SAVE,IDI_SAVE);
 | 
|---|
| 1112 |     ICONSET(IDM_ALLSAVE,IDI_ALLSAVE);
 | 
|---|
| 1113 |     ICONSET(IDM_PREVIEW,IDI_PREVIEW);
 | 
|---|
| 1114 |     ICONSET(IDM_PRINTOUT,IDI_PRINT);
 | 
|---|
| 1115 | 
 | 
|---|
| 1116 |     //編集
 | 
|---|
| 1117 |     ICONSET(IDM_CUT,IDI_CUT);
 | 
|---|
| 1118 |     ICONSET(IDM_COPY,IDI_COPY);
 | 
|---|
| 1119 |     ICONSET(IDM_PASTE,IDI_PASTE);
 | 
|---|
| 1120 |     ICONSET(IDM_UNDO,IDI_UNDO);
 | 
|---|
| 1121 |     ICONSET(IDM_REDO,IDI_REDO);
 | 
|---|
| 1122 |     ICONSET(IDM_FIND,IDI_FIND);
 | 
|---|
| 1123 | 
 | 
|---|
| 1124 |     //表示
 | 
|---|
| 1125 |     ICONSET(IDM_SET,IDI_OPTION);
 | 
|---|
| 1126 | 
 | 
|---|
| 1127 |     //変換
 | 
|---|
| 1128 |     ICONSET(IDM_CONV_ALPHA_SMALL,IDI_CONV_ALPHA_SMALL);
 | 
|---|
| 1129 |     ICONSET(IDM_CONV_ALPHA_BIG,IDI_CONV_ALPHA_BIG);
 | 
|---|
| 1130 |     ICONSET(IDM_CONV_HALF,IDI_CONV_HALF);
 | 
|---|
| 1131 |     ICONSET(IDM_CONV_MULTI,IDI_CONV_MULTI);
 | 
|---|
| 1132 |     ICONSET(IDM_CONV_KATAKANA,IDI_CONV_KATAKANA);
 | 
|---|
| 1133 |     ICONSET(IDM_CONV_HIRAGANA,IDI_CONV_HIRAGANA);
 | 
|---|
| 1134 | 
 | 
|---|
| 1135 |     //ヘルプ
 | 
|---|
| 1136 |     ICONSET(IDM_TOPIC,IDI_HELP);
 | 
|---|
| 1137 | 
 | 
|---|
| 1138 | #ifdef THETEXT
 | 
|---|
| 1139 |     //TheTextのみの機能
 | 
|---|
| 1140 |     ICONSET(IDM_STRING_COUNT,IDI_STRINGCOUNT);
 | 
|---|
| 1141 | #else
 | 
|---|
| 1142 |     //ProjectEditorのみの機能
 | 
|---|
| 1143 | 
 | 
|---|
| 1144 |     //リリース
 | 
|---|
| 1145 |     ICONSET(IDM_RELEASECOMPILE,IDI_RELEASECOMPILE);
 | 
|---|
| 1146 |     ICONSET(IDM_RELEASERUN,IDI_RELEASERUN);
 | 
|---|
| 1147 | 
 | 
|---|
| 1148 |     //デバッグ
 | 
|---|
| 1149 |     ICONSET(IDM_ATTACH,IDI_ATTACH);
 | 
|---|
| 1150 |     ICONSET(IDM_DEBUGCOMPILE,IDI_DEBUGCOMPILE);
 | 
|---|
| 1151 |     ICONSET(IDM_DEBUG,IDI_DEBUGRUN);
 | 
|---|
| 1152 |     ICONSET(IDM_BREAKPOINT,IDI_BREAKPOINT);
 | 
|---|
| 1153 |     ICONSET(IDM_STEP_IN,IDI_STEPIN);
 | 
|---|
| 1154 |     ICONSET(IDM_STEP_OVER,IDI_STEPOVER);
 | 
|---|
| 1155 |     ICONSET(IDM_STEP_CURSOR,IDI_STEPTOCURSOR);
 | 
|---|
| 1156 |     ICONSET(IDM_DEBUG_PAUSE,IDI_DEBUGPAUSE);
 | 
|---|
| 1157 |     ICONSET(IDM_DEBUG_STOP,IDI_DEBUGSTOP);
 | 
|---|
| 1158 | 
 | 
|---|
| 1159 |     //コミュニティ
 | 
|---|
| 1160 |     ICONSET(IDM_COMMUNITY,IDI_COMMUNITY_MAIN);
 | 
|---|
| 1161 |     ICONSET(IDM_COMMU_SEARCH,IDI_COMMUNITY_FIND);
 | 
|---|
| 1162 |     ICONSET(IDM_COMMU_PM,IDI_COMMUNITY_PRIVATEMSG);
 | 
|---|
| 1163 |     ICONSET(ID_COMMU_FORUM1,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1164 |     ICONSET(ID_COMMU_FORUM2,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1165 |     ICONSET(ID_COMMU_FORUM3,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1166 |     ICONSET(ID_COMMU_FORUM4,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1167 |     ICONSET(ID_COMMU_FORUM5,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1168 |     ICONSET(ID_COMMU_FORUM6,IDI_COMMUNITY_FORUM_SECRET);
 | 
|---|
| 1169 |     ICONSET(ID_COMMU_FORUM7,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1170 |     ICONSET(ID_COMMU_FORUM8,IDI_COMMUNITY_FORUM);
 | 
|---|
| 1171 | #endif
 | 
|---|
| 1172 | 
 | 
|---|
| 1173 | #undef ICONSET
 | 
|---|
| 1174 | 
 | 
|---|
| 1175 | 
 | 
|---|
| 1176 | 
 | 
|---|
| 1177 | 
 | 
|---|
| 1178 |     extern HMENU hEditMenuBase,hEditMenu;
 | 
|---|
| 1179 |     hEditMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_EDITMENU));
 | 
|---|
| 1180 |     hEditMenu=GetSubMenu(hEditMenuBase,0);
 | 
|---|
| 1181 | 
 | 
|---|
| 1182 |     extern HMENU hRebarMenuBase,hRebarMenu;
 | 
|---|
| 1183 |     hRebarMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_REBARMENU));
 | 
|---|
| 1184 |     hRebarMenu=GetSubMenu(hRebarMenuBase,0);
 | 
|---|
| 1185 | 
 | 
|---|
| 1186 |     extern HMENU hTabMenuBase,hTabMenu,hTabColorMenu;
 | 
|---|
| 1187 |     hTabMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_TABMENU));
 | 
|---|
| 1188 |     hTabMenu=GetSubMenu(hTabMenuBase,0);
 | 
|---|
| 1189 |     hTabColorMenu=GetSubMenu(hTabMenu,0);
 | 
|---|
| 1190 | 
 | 
|---|
| 1191 |     extern HMENU hFileTreeMenuBase;
 | 
|---|
| 1192 |     hFileTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_FILETREEMENU));
 | 
|---|
| 1193 | 
 | 
|---|
| 1194 |     extern HMENU hProcedureTreeMenuBase;
 | 
|---|
| 1195 |     hProcedureTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_PROCEDURETREEMENU));
 | 
|---|
| 1196 | 
 | 
|---|
| 1197 |     extern HMENU hMaterialTreeMenuBase;
 | 
|---|
| 1198 |     hMaterialTreeMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_PROJECTVIEW_MATERIALTREEMENU));
 | 
|---|
| 1199 | 
 | 
|---|
| 1200 |     extern HMENU hRadMenuBase;
 | 
|---|
| 1201 |     hRadMenuBase=LoadMenu(hResInst,MAKEINTRESOURCE(IDR_RADCONTEXTMENU));
 | 
|---|
| 1202 | 
 | 
|---|
| 1203 |     //クリップボードのデータ形式(RAD用)を新規登録
 | 
|---|
| 1204 |     extern DWORD dwRadClipboardID;
 | 
|---|
| 1205 |     dwRadClipboardID=RegisterClipboardFormat("ProjectEditor-RAD");
 | 
|---|
| 1206 | 
 | 
|---|
| 1207 |     //256色の標準パレットを読み込む
 | 
|---|
| 1208 |     extern RGBQUAD DefaultColorTable256[256];
 | 
|---|
| 1209 |     HANDLE hFile;
 | 
|---|
| 1210 |     DWORD dw;
 | 
|---|
| 1211 |     sprintf(temporary,"%sSubOperation\\8bit.plt",pj_editor_Dir);
 | 
|---|
| 1212 |     hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 | 
|---|
| 1213 |     if(hFile==INVALID_HANDLE_VALUE){
 | 
|---|
| 1214 |         //"\"%s\" ファイルの読み込みに失敗しました。"
 | 
|---|
| 1215 |         sprintf(str,STRING_ERROR_CANT_FILEOPEN,temporary);
 | 
|---|
| 1216 |         MessageBox(NULL,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
 | 
|---|
| 1217 |         return 0;
 | 
|---|
| 1218 |     }
 | 
|---|
| 1219 |     ReadFile(hFile,DefaultColorTable256,sizeof(RGBQUAD)*256,&dw,NULL);
 | 
|---|
| 1220 |     CloseHandle(hFile);
 | 
|---|
| 1221 | 
 | 
|---|
| 1222 | 
 | 
|---|
| 1223 | 
 | 
|---|
| 1224 |     //デザインテーマオブジェクトを生成
 | 
|---|
| 1225 |     pobj_DBTheme=new CDBTheme();
 | 
|---|
| 1226 | 
 | 
|---|
| 1227 | 
 | 
|---|
| 1228 |     /////////////////////////
 | 
|---|
| 1229 |     // カラーデザインを設定
 | 
|---|
| 1230 |     CTheme *pobj_Theme;
 | 
|---|
| 1231 |     pobj_Theme=pobj_DBTheme->GetActiveTheme();
 | 
|---|
| 1232 |     if(!pobj_Theme) pobj_Theme=pobj_DBTheme->ppobj_Theme[0];
 | 
|---|
| 1233 | 
 | 
|---|
| 1234 |     SetTextEditColorDesign(&tci,pobj_Theme,0);
 | 
|---|
| 1235 | 
 | 
|---|
| 1236 | 
 | 
|---|
| 1237 | #ifndef THETEXT
 | 
|---|
| 1238 |     /////////////////////////////////////////////////////
 | 
|---|
| 1239 |     // ProjectEditorのみ
 | 
|---|
| 1240 |     /////////////////////////////////////////////////////
 | 
|---|
| 1241 | 
 | 
|---|
| 1242 | 
 | 
|---|
| 1243 |     //クラスビュー管理オブジェクトを生成
 | 
|---|
| 1244 |     pobj_ClassTreeView=new CClassTreeView();
 | 
|---|
| 1245 | 
 | 
|---|
| 1246 | 
 | 
|---|
| 1247 |     /////////////////////////
 | 
|---|
| 1248 |     // basic.sbpの内容を取得
 | 
|---|
| 1249 |     /////////////////////////
 | 
|---|
| 1250 | 
 | 
|---|
| 1251 |     extern char *pHeaderBuf;
 | 
|---|
| 1252 |     sprintf(temporary,"%sbasic.sbp",pobj_nv->szIncludeDir);
 | 
|---|
| 1253 |     GetFullPath( temporary, pj_editor_Dir );
 | 
|---|
| 1254 |     pHeaderBuf=ReadBuffer(temporary);
 | 
|---|
| 1255 | 
 | 
|---|
| 1256 |     if( !pHeaderBuf ){
 | 
|---|
| 1257 |         pHeaderBuf=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
 | 
|---|
| 1258 |     }
 | 
|---|
| 1259 | 
 | 
|---|
| 1260 |     //ファイルをインクルード
 | 
|---|
| 1261 |     pHeaderBuf=IncludeFiles(pHeaderBuf);
 | 
|---|
| 1262 | 
 | 
|---|
| 1263 | 
 | 
|---|
| 1264 |     //デバッガ管理オブジェクトを生成
 | 
|---|
| 1265 |     pobj_Debugger=new CDebugger();
 | 
|---|
| 1266 | #endif
 | 
|---|
| 1267 | 
 | 
|---|
| 1268 | 
 | 
|---|
| 1269 |     //ブレークポイント管理オブジェクトを生成
 | 
|---|
| 1270 |     extern CDBBreakPoint *pobj_DBBreakPoint;
 | 
|---|
| 1271 |     pobj_DBBreakPoint=new CDBBreakPoint();
 | 
|---|
| 1272 | 
 | 
|---|
| 1273 | 
 | 
|---|
| 1274 |     return 1;
 | 
|---|
| 1275 | }
 | 
|---|
| 1276 | void EndProjectEditor(void){
 | 
|---|
| 1277 | 
 | 
|---|
| 1278 | #ifndef THETEXT
 | 
|---|
| 1279 |     /////////////////////////////////////////////////////
 | 
|---|
| 1280 |     // ProjectEditorのみ
 | 
|---|
| 1281 |     /////////////////////////////////////////////////////
 | 
|---|
| 1282 | 
 | 
|---|
| 1283 | 
 | 
|---|
| 1284 |     //クラスビュー管理オブジェクトを破棄
 | 
|---|
| 1285 |     delete pobj_ClassTreeView;
 | 
|---|
| 1286 |     pobj_ClassTreeView=0;
 | 
|---|
| 1287 | 
 | 
|---|
| 1288 |     //basic.sbpのソースコードバッファを解放
 | 
|---|
| 1289 |     extern char *pHeaderBuf;
 | 
|---|
| 1290 |     HeapDefaultFree(pHeaderBuf);
 | 
|---|
| 1291 | 
 | 
|---|
| 1292 |     //デバッガ管理オブジェクトを破棄
 | 
|---|
| 1293 |     delete pobj_Debugger;
 | 
|---|
| 1294 | #endif
 | 
|---|
| 1295 | 
 | 
|---|
| 1296 |     //ブレークポイント管理オブジェクトを破棄
 | 
|---|
| 1297 |     extern CDBBreakPoint *pobj_DBBreakPoint;
 | 
|---|
| 1298 |     delete pobj_DBBreakPoint;
 | 
|---|
| 1299 | 
 | 
|---|
| 1300 |     //デザインテーマオブジェクトを破棄
 | 
|---|
| 1301 |     delete pobj_DBTheme;
 | 
|---|
| 1302 | 
 | 
|---|
| 1303 |     //不揮発性のデータを保存
 | 
|---|
| 1304 |     pobj_nv->save();
 | 
|---|
| 1305 |     delete pobj_nv;
 | 
|---|
| 1306 |     pobj_nv=0;
 | 
|---|
| 1307 | 
 | 
|---|
| 1308 |     //メインメニューオブジェクトを破棄
 | 
|---|
| 1309 |     delete pobj_MainMenu;
 | 
|---|
| 1310 |     pobj_MainMenu=0;
 | 
|---|
| 1311 | 
 | 
|---|
| 1312 |     extern HFONT hStatusFont;
 | 
|---|
| 1313 |     DeleteObject(hStatusFont);
 | 
|---|
| 1314 |     extern HFONT hHyperLinkFont;
 | 
|---|
| 1315 |     DeleteObject(hHyperLinkFont);
 | 
|---|
| 1316 |     extern HFONT hRulerFont;
 | 
|---|
| 1317 |     DeleteObject(hRulerFont);
 | 
|---|
| 1318 |     extern HFONT hFont_LineNumber;
 | 
|---|
| 1319 |     DeleteObject(hFont_LineNumber);
 | 
|---|
| 1320 |     extern METHODCHECKINFO MethodCheckInfo;
 | 
|---|
| 1321 |     DeleteObject(MethodCheckInfo.hFont);
 | 
|---|
| 1322 |     DeleteObject(MethodCheckInfo.hBoldFont);
 | 
|---|
| 1323 |     extern HICON hOwnerIcon,hBasicProgramIcon,hTextDocumentIcon,hWindowDocumentIcon;
 | 
|---|
| 1324 |     DestroyIcon(hOwnerIcon);
 | 
|---|
| 1325 |     DestroyIcon(hBasicProgramIcon);
 | 
|---|
| 1326 |     DestroyIcon(hTextDocumentIcon);
 | 
|---|
| 1327 |     DestroyIcon(hWindowDocumentIcon);
 | 
|---|
| 1328 |     extern HMENU hEditMenuBase,hRebarMenuBase,hTabMenuBase;
 | 
|---|
| 1329 |     DestroyMenu(hEditMenuBase);
 | 
|---|
| 1330 |     DestroyMenu(hRebarMenuBase);
 | 
|---|
| 1331 |     DestroyMenu(hTabMenuBase);
 | 
|---|
| 1332 |     extern HMENU hFileTreeMenuBase;
 | 
|---|
| 1333 |     DestroyMenu(hFileTreeMenuBase);
 | 
|---|
| 1334 |     extern HMENU hProcedureTreeMenuBase;
 | 
|---|
| 1335 |     DestroyMenu(hProcedureTreeMenuBase);
 | 
|---|
| 1336 |     extern HMENU hMaterialTreeMenuBase;
 | 
|---|
| 1337 |     DestroyMenu(hMaterialTreeMenuBase);
 | 
|---|
| 1338 |     extern HMENU hRadMenuBase;
 | 
|---|
| 1339 |     DestroyMenu(hRadMenuBase);
 | 
|---|
| 1340 | 
 | 
|---|
| 1341 |     //背景ブラシ
 | 
|---|
| 1342 |     extern HBRUSH h3DFaceBackBrush;
 | 
|---|
| 1343 |     DeleteObject(h3DFaceBackBrush);
 | 
|---|
| 1344 | 
 | 
|---|
| 1345 |     //スタンダードツールバーを破棄
 | 
|---|
| 1346 |     if(pobj_StandardToolbar){
 | 
|---|
| 1347 |         pobj_StandardToolbar->Release();
 | 
|---|
| 1348 |         pobj_StandardToolbar=0;
 | 
|---|
| 1349 |     }
 | 
|---|
| 1350 | 
 | 
|---|
| 1351 |     //ビルドツールバーを破棄
 | 
|---|
| 1352 |     if(pobj_ReleaseToolbar){
 | 
|---|
| 1353 |         pobj_ReleaseToolbar->Release();
 | 
|---|
| 1354 |         pobj_ReleaseToolbar=0;
 | 
|---|
| 1355 |     }
 | 
|---|
| 1356 | 
 | 
|---|
| 1357 |     //デバッガ用ツールバーを破棄
 | 
|---|
| 1358 |     if(pobj_DebuggerToolbar){
 | 
|---|
| 1359 |         pobj_DebuggerToolbar->Release();
 | 
|---|
| 1360 |         pobj_DebuggerToolbar=0;
 | 
|---|
| 1361 |     }
 | 
|---|
| 1362 | 
 | 
|---|
| 1363 |     //ヒープオブジェクトを解放
 | 
|---|
| 1364 |     extern HANDLE hHeap;
 | 
|---|
| 1365 |     HeapDestroy(hHeap);
 | 
|---|
| 1366 | 
 | 
|---|
| 1367 |     //DLLを解放
 | 
|---|
| 1368 |     FreeLibrary(hResInst);
 | 
|---|
| 1369 |     FreeLibrary(hIconResInst);
 | 
|---|
| 1370 |     FreeLibrary(hLib_LuxCtrl);
 | 
|---|
| 1371 | 
 | 
|---|
| 1372 |     //アルファブレンド用のAPIを解放
 | 
|---|
| 1373 |     extern HINSTANCE hUser32Lib;
 | 
|---|
| 1374 |     FreeLibrary(hUser32Lib);
 | 
|---|
| 1375 | 
 | 
|---|
| 1376 | 
 | 
|---|
| 1377 | 
 | 
|---|
| 1378 | 
 | 
|---|
| 1379 |     //////////////////////////////////////
 | 
|---|
| 1380 |     // バックアップ用ファイルを削除
 | 
|---|
| 1381 |     //////////////////////////////////////
 | 
|---|
| 1382 |     extern char szBackupDirPath[MAX_PATH];
 | 
|---|
| 1383 |     RemoveDirectoryStrong(szBackupDirPath);
 | 
|---|
| 1384 | 
 | 
|---|
| 1385 | }
 | 
|---|
| 1386 | 
 | 
|---|
| 1387 | //各ウィンドウ生成
 | 
|---|
| 1388 | void SetupWindow(HWND hwnd){
 | 
|---|
| 1389 |     extern HINSTANCE hInst;
 | 
|---|
| 1390 |     extern HMENU hFirstMainMenu;
 | 
|---|
| 1391 |     RECT rect;
 | 
|---|
| 1392 |     CLIENTCREATESTRUCT ccs;
 | 
|---|
| 1393 | 
 | 
|---|
| 1394 |     INITCOMMONCONTROLSEX InitCommCtrl;
 | 
|---|
| 1395 |     InitCommCtrl.dwSize=sizeof(INITCOMMONCONTROLSEX);
 | 
|---|
| 1396 |     InitCommCtrl.dwICC=ICC_COOL_CLASSES|ICC_PAGESCROLLER_CLASS|ICC_WIN95_CLASSES|ICC_TAB_CLASSES;
 | 
|---|
| 1397 |     InitCommonControlsEx(&InitCommCtrl);
 | 
|---|
| 1398 | 
 | 
|---|
| 1399 |     //タブウィンドウ
 | 
|---|
| 1400 |     pobj_MainTab=new CMainTab(hwnd);
 | 
|---|
| 1401 | 
 | 
|---|
| 1402 |     //MDIの親ウィンドウ(クライアントウィンドウ)を作成
 | 
|---|
| 1403 |     ccs.hWindowMenu=hFirstMainMenu;
 | 
|---|
| 1404 |     ccs.idFirstChild=ID_FIRSTCHILD;
 | 
|---|
| 1405 |     GetClientRect(hwnd,&rect);
 | 
|---|
| 1406 |     hClient=CreateWindowEx(WS_EX_CLIENTEDGE,"MDICLIENT",NULL,
 | 
|---|
| 1407 |         WS_CHILD|WS_CLIPCHILDREN|WS_CLIPSIBLINGS|WS_VISIBLE,
 | 
|---|
| 1408 |         0,0,0,0,
 | 
|---|
| 1409 |         hwnd,(HMENU)1,hInst,(LPSTR)&ccs);
 | 
|---|
| 1410 | 
 | 
|---|
| 1411 |     //レバーオブジェクトを生成
 | 
|---|
| 1412 |     pobj_Rebar=new CMainRebar(hwnd);
 | 
|---|
| 1413 | 
 | 
|---|
| 1414 |     //ステータスバー
 | 
|---|
| 1415 |     extern HWND hStatusBar;
 | 
|---|
| 1416 |     extern HFONT hStatusFont;
 | 
|---|
| 1417 |     hStatusBar=CreateStatusWindow(
 | 
|---|
| 1418 |         WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS|SBARS_SIZEGRIP|CCS_BOTTOM,
 | 
|---|
| 1419 |         NULL,hwnd,NULL);
 | 
|---|
| 1420 |     SendMessage(hStatusBar,WM_SETFONT,(long)hStatusFont,0);
 | 
|---|
| 1421 | 
 | 
|---|
| 1422 |     //プロジェクト ビュー
 | 
|---|
| 1423 |     extern HWND hProjectView;
 | 
|---|
| 1424 |     extern HWND hProjectView_ToolWindow;
 | 
|---|
| 1425 |     RECT *prc;
 | 
|---|
| 1426 |     prc=&pobj_nv->rectProjectView;
 | 
|---|
| 1427 |     hProjectView_ToolWindow=CreateWindowEx(WS_EX_TOOLWINDOW,"ProjectView_ToolWindow","ProjectView",
 | 
|---|
| 1428 |         WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_CLIPCHILDREN,
 | 
|---|
| 1429 |         prc->left,prc->top,prc->right-prc->left,prc->bottom-prc->top,
 | 
|---|
| 1430 |         hwnd,0,hInst,0);
 | 
|---|
| 1431 |     hProjectView=CreateWindowEx(WS_EX_STATICEDGE,"ProjectView","ProjectView",
 | 
|---|
| 1432 |         WS_CHILD|WS_CLIPCHILDREN,
 | 
|---|
| 1433 |         0,0,0,0,
 | 
|---|
| 1434 |         hwnd,0,hInst,0);
 | 
|---|
| 1435 |     if(pobj_nv->bClipProjectView==0){
 | 
|---|
| 1436 |         SetWindowLongPtr(hProjectView,GWL_EXSTYLE,0);
 | 
|---|
| 1437 |         SetParent(hProjectView,hProjectView_ToolWindow);
 | 
|---|
| 1438 |         ResizeProjectView_ToolWindow();
 | 
|---|
| 1439 |     }
 | 
|---|
| 1440 | 
 | 
|---|
| 1441 |     //メニュー状態を設定
 | 
|---|
| 1442 |     ResetState_DocMenu();
 | 
|---|
| 1443 | 
 | 
|---|
| 1444 | 
 | 
|---|
| 1445 |     //SideWebを生成
 | 
|---|
| 1446 |     pobj_SideWeb=new CSideWeb(hwnd);
 | 
|---|
| 1447 | }
 | 
|---|
| 1448 | 
 | 
|---|
| 1449 | //実行コマンド
 | 
|---|
| 1450 | BOOL SetRunning(HWND hChild){
 | 
|---|
| 1451 |     extern MDIINFO MdiInfo[MAX_WNDNUM];
 | 
|---|
| 1452 |     extern LPSTR DefFileFilter;
 | 
|---|
| 1453 |     int WndNum;
 | 
|---|
| 1454 |     char temporary[MAX_PATH],temp2[MAX_PATH];
 | 
|---|
| 1455 |     HANDLE hFind;
 | 
|---|
| 1456 |     WIN32_FIND_DATA wfd;
 | 
|---|
| 1457 | 
 | 
|---|
| 1458 |     extern char *lpszCompilerName;
 | 
|---|
| 1459 |     sprintf(temporary,"%s%s",pj_editor_Dir,lpszCompilerName);
 | 
|---|
| 1460 |     hFind=FindFirstFile(temporary,&wfd);
 | 
|---|
| 1461 |     if(hFind==INVALID_HANDLE_VALUE){
 | 
|---|
| 1462 |         //"BasicCompiler.exe が見つかりません"
 | 
|---|
| 1463 |         MessageBox(hOwner,STRING_ERROR_NOBASICCOMPILER,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
 | 
|---|
| 1464 |         return FALSE;
 | 
|---|
| 1465 |     }
 | 
|---|
| 1466 |     FindClose(hFind);
 | 
|---|
| 1467 | 
 | 
|---|
| 1468 |     WndNum=GetWndNum(hChild);
 | 
|---|
| 1469 |     if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
 | 
|---|
| 1470 |         if(MdiInfo[WndNum].path[0]=='\0'){
 | 
|---|
| 1471 |             //"保存先のファイルを指定してください"
 | 
|---|
| 1472 |             if(!GetFilePathDialog(hOwner,temp2,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,0)) return FALSE;
 | 
|---|
| 1473 | 
 | 
|---|
| 1474 |             if(!SaveDocument(hChild,temp2)) return 0;
 | 
|---|
| 1475 |         }
 | 
|---|
| 1476 |         else{
 | 
|---|
| 1477 |             if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ){
 | 
|---|
| 1478 |                 if(!SaveDocument(hChild,NULL)) return 0;
 | 
|---|
| 1479 |             }
 | 
|---|
| 1480 |             else{
 | 
|---|
| 1481 |                 if(hFind=FindFirstFile(MdiInfo[WndNum].path,&wfd)){
 | 
|---|
| 1482 |                     if(hFind==INVALID_HANDLE_VALUE){
 | 
|---|
| 1483 |                         if(!SaveDocument(hChild,NULL)) return 0;
 | 
|---|
| 1484 |                     }
 | 
|---|
| 1485 |                     else FindClose(hFind);
 | 
|---|
| 1486 |                 }
 | 
|---|
| 1487 |             }
 | 
|---|
| 1488 |         }
 | 
|---|
| 1489 |     }
 | 
|---|
| 1490 |     return 1;
 | 
|---|
| 1491 | }
 | 
|---|
| 1492 | 
 | 
|---|
| 1493 | BOOL IsNeedCompile(char *FileName,BOOL bDebug){
 | 
|---|
| 1494 |     char temporary[MAX_PATH],temp2[MAX_PATH],temp3[MAX_PATH];
 | 
|---|
| 1495 |     HANDLE hFind,hFile;
 | 
|---|
| 1496 |     WIN32_FIND_DATA wfd;
 | 
|---|
| 1497 |     FILETIME SourceTime,ExeTime;
 | 
|---|
| 1498 | 
 | 
|---|
| 1499 |     _splitpath(FileName,temporary,temp2,temp3,NULL);
 | 
|---|
| 1500 |     lstrcat(temporary,temp2);
 | 
|---|
| 1501 |     lstrcat(temporary,temp3);
 | 
|---|
| 1502 |     if(bDebug) lstrcat(temporary,"_debug.exe");
 | 
|---|
| 1503 |     else lstrcat(temporary,".exe");
 | 
|---|
| 1504 | 
 | 
|---|
| 1505 |     hFind=FindFirstFile(temporary,&wfd);
 | 
|---|
| 1506 |     if(hFind==INVALID_HANDLE_VALUE) return 1;
 | 
|---|
| 1507 |     FindClose(hFind);
 | 
|---|
| 1508 | 
 | 
|---|
| 1509 |     hFile=CreateFile(FileName,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 | 
|---|
| 1510 |     GetFileTime(hFile,NULL,NULL,&SourceTime);
 | 
|---|
| 1511 |     CloseHandle(hFile);
 | 
|---|
| 1512 | 
 | 
|---|
| 1513 |     hFile=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 | 
|---|
| 1514 |     GetFileTime(hFile,NULL,NULL,&ExeTime);
 | 
|---|
| 1515 |     CloseHandle(hFile);
 | 
|---|
| 1516 | 
 | 
|---|
| 1517 |     if(SourceTime.dwHighDateTime<ExeTime.dwHighDateTime) return 0;
 | 
|---|
| 1518 |     else if(SourceTime.dwHighDateTime==ExeTime.dwHighDateTime&&
 | 
|---|
| 1519 |         SourceTime.dwLowDateTime<=ExeTime.dwLowDateTime) return 0;
 | 
|---|
| 1520 |     return 1;
 | 
|---|
| 1521 | }
 | 
|---|
| 1522 | 
 | 
|---|
| 1523 | string GetLastErrorString(){
 | 
|---|
| 1524 |     char *lpMsgBuf;
 | 
|---|
| 1525 | 
 | 
|---|
| 1526 |     FormatMessage( 
 | 
|---|
| 1527 |         FORMAT_MESSAGE_ALLOCATE_BUFFER | 
 | 
|---|
| 1528 |         FORMAT_MESSAGE_FROM_SYSTEM | 
 | 
|---|
| 1529 |         FORMAT_MESSAGE_IGNORE_INSERTS,
 | 
|---|
| 1530 |         NULL,
 | 
|---|
| 1531 |         GetLastError(),
 | 
|---|
| 1532 |         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // デフォルト言語
 | 
|---|
| 1533 |         (LPTSTR) &lpMsgBuf,
 | 
|---|
| 1534 |         0,
 | 
|---|
| 1535 |         NULL 
 | 
|---|
| 1536 |     );
 | 
|---|
| 1537 | 
 | 
|---|
| 1538 |     string result = lpMsgBuf;
 | 
|---|
| 1539 | 
 | 
|---|
| 1540 |     LocalFree( lpMsgBuf );
 | 
|---|
| 1541 | 
 | 
|---|
| 1542 |     return result;
 | 
|---|
| 1543 | }
 | 
|---|