source: dev/trunk/ab5.0/abdev/abdev/abdev.cpp @ 681

Last change on this file since 681 was 655, checked in by dai_9181, 15 years ago

FileManager周りをリファクタリング

File size: 48.9 KB
Line 
1#include "stdafx.h"
2
3#include "abdev.h"
4
5
6#if defined HeapAlloc
7#define MEM_MAX 65536
8LPVOID pCheckMem[MEM_MAX];
9int now;
10#undef HeapAlloc
11#undef HeapReAlloc
12LPVOID CheckHeapAlloc(HANDLE hf,DWORD dwFlags,DWORD dwBytes){
13    LPVOID ret;
14    ret=HeapAlloc(hf,dwFlags,dwBytes);
15    pCheckMem[now]=ret;
16
17    //この部分にnowのチェックを挿入
18
19
20    now++;
21    if(now>=MEM_MAX){
22        MessageBox(0,"pCheckMemの最大値を超えました","Check",0);
23    }
24    return ret;
25}
26LPVOID CheckHeapReAlloc(HANDLE hf,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes){
27    int i;
28    LPVOID ret;
29    for(i=0;;i++){
30        if(lpMem==pCheckMem[i]) break;
31        if(i>=MEM_MAX){
32            MessageBox(0,"エラー","CheckHeapReAlloc",0);
33            break;
34        }
35    }
36    ret=HeapReAlloc(hf,dwFlags,lpMem,dwBytes);
37    pCheckMem[i]=ret;
38    return ret;
39}
40void HeapDefaultFree(LPVOID lpMem){
41    int i;
42    for(i=0;;i++){
43        if(lpMem==pCheckMem[i]) break;
44        if(i>=MEM_MAX){
45            MessageBox(0,"エラー","HeapDefaultFree",0);
46            break;
47        }
48    }
49    pCheckMem[i]=0;
50    HeapFree(hHeap,0,lpMem);
51}
52void CheckHeapCheck(){
53    int i,i2;
54    char temp[100];
55    temp[0]=0;
56    for(i=0,i2=0;i<MEM_MAX;i++){
57        if(pCheckMem[i]){
58            sprintf(temp+lstrlen(temp),"%d\r\n",i);
59            i2++;
60            if(i2==10){
61                lstrcat(temp,"これ以上の未解放が確認されています");
62                break;
63            }
64        }
65    }
66    if(temp[0]) MessageBox(0,temp,"Check - BasicCompiler.exe",0);
67}
68#define HeapAlloc CheckHeapAlloc
69#define HeapReAlloc CheckHeapReAlloc
70#else
71void HeapDefaultFree(LPVOID lpMem){
72    HeapFree(hHeap,0,lpMem);
73}
74#endif
75
76#ifdef DeleteObject
77#undef DeleteObject
78BOOL CheckDeleteObject(HGDIOBJ hObject){
79    BOOL bRet;
80    bRet=DeleteObject(hObject);
81
82    if(bRet==0){
83        MessageBox(0,"DeleteObject Error","Check",0);
84    }
85    return bRet;
86}
87#define DeleteObject CheckDeleteObject
88#endif
89
90
91void ToBigChar(char str[]){
92    int i;
93    for(i=0;TRUE;i++){
94        str[i]=(char)toupper((int)str[i]);
95        if(str[i]=='\0') break;
96    }
97}
98int GetWndNum(HWND hChild){
99    int i;
100    if(!IsWindow(hChild)) return -1;
101    for(i=0;i<MdiInfo.size();i++){
102        if(hChild==MdiInfo[i]->hwnd) break;
103    }
104    if(i==MdiInfo.size()) i=-1;
105    return i;
106}
107int GetNowWndNum(void){
108    return GetWndNum(GetWindow(hClient,GW_CHILD));
109}
110int GetFileNum(int WndNum){
111    if( !projectInfo.IsOpened() ){
112        return -1;
113    }
114
115    for(int i=0;i<projectInfo.fileSystem.root.files.size();i++)
116    {
117        if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),projectInfo.fileSystem.root.files[i].GetFullPath().c_str())==0) return i;
118    }
119    return -1;
120}
121
122void SendTextEditResizeEvent(HWND hwnd){
123    RECT rect;
124    GetClientRect(hwnd,&rect);
125    ResizeTextEditWnd(hwnd,rect.right,rect.bottom);
126}
127
128void RedrawAllWindow(void){
129    HWND hChild;
130    hChild=GetWindow(hClient,GW_CHILD);
131    if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD));
132    while(hChild){
133        int WndNum;
134        WndNum=GetWndNum(hChild);
135        if(WndNum==-1) break;
136
137        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
138            //コントロールタブスペースの幅と行番号の文字数を更新
139            MdiInfo[WndNum]->pMdiTextEdit->iWidth_ControlTabSpace=
140                GetControlTabSpace(WndNum,&MdiInfo[WndNum]->pMdiTextEdit->iLineNumberTextCount);
141
142            InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->hEdit,NULL,0);
143            InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
144
145            SendTextEditResizeEvent(MdiInfo[WndNum]->hwnd);
146        }
147        else{
148            HWND hEdit;
149            hEdit=GetWindow(hChild,GW_CHILD);
150            InvalidateRect(hEdit,NULL,0);
151        }
152
153        hChild=GetWindow(hChild,GW_HWNDNEXT);
154    }
155}
156
157int DocumentModifyCheck(HWND hChild){   //終了保存確認
158    int BoxID,WndNum,sw;
159    char str[MAX_PATH],temporary[MAX_PATH];
160
161    WndNum=GetWndNum(hChild);
162    sw=0;
163    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
164        if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ) sw=1;
165    }
166    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
167        if(MdiInfo[WndNum]->MdiIconEditInfo->bModify) sw=1;
168    }
169
170    if(sw){
171        GetWindowText(hChild,temporary,MAX_PATH);
172
173        //"\"%s\" ファイルは変更されています。保存しますか?"
174        sprintf(str,STRING_MODIFYCHECK_FILE,temporary);
175        BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION);
176
177        if(BoxID==IDYES){
178            if(!SaveDocument(hChild,NULL)) return 0;
179        }
180        else if(BoxID==IDCANCEL) return 0;
181    }
182    return 1;
183}
184void SetStatusText(char *MenuText){
185    //////////////////////////
186    // ステータスバーの更新
187    //////////////////////////
188
189    int WndNum;
190    double BufSize;
191    char temporary[255];
192    HWND hChild;
193
194    if(MenuText){
195        SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText);
196        if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0;
197    }
198
199    hChild=GetWindow(hClient,GW_CHILD);
200    WndNum=GetWndNum(hChild);
201    if(WndNum==-1) return;
202    hChild=GetWindow(hChild,GW_CHILD);
203    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
204        //////////////////////
205        // テキストエディタ
206        //////////////////////
207
208        //サイズ
209        BufSize=(double)lstrlen(MdiInfo[WndNum]->pMdiTextEdit->buffer);
210        if(IsWindow(hChild)){
211            if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
212            else if(BufSize<1024*1024){
213                BufSize/=1024;
214                sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize);
215            }
216            else{
217                BufSize/=1024*1024;
218                sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize);
219            }
220        }
221        else temporary[0]=0;
222        SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
223
224        //行と桁
225        if(IsWindow(hChild)){
226#if defined(JPN)
227            //日本語
228            sprintf(temporary,"%d 行、%d 列",
229                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1,
230                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1);
231#else
232            //英語
233            sprintf(temporary,"%d : %d",
234                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1,
235                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1);
236#endif
237        }
238        else temporary[0]=0;
239        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
240
241        //文字コード
242        nkf.GetCharCodeName(MdiInfo[WndNum]->pMdiTextEdit->iCharCode,temporary);
243        SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
244
245        //文字コード
246        nkf.GetLfCodeName(MdiInfo[WndNum]->pMdiTextEdit->iLfCode,temporary);
247        SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
248    }
249    else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
250        ////////////////
251        // RADツール
252        ////////////////
253
254        ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path);
255        if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
256            sprintf(temporary,"pos %d, %d",
257                RadInfo.DraggingRect[0].left-MdiInfo[WndNum]->MdiRadInfo->ClientPos.x,
258                RadInfo.DraggingRect[0].top-MdiInfo[WndNum]->MdiRadInfo->ClientPos.y);
259            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
260            sprintf(temporary,"size %d * %d",
261                RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left,
262                RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
263            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
264        }
265        else if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
266            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
267            sprintf(temporary,"size %d * %d",pWindowInfo->size.cx,pWindowInfo->size.cy);
268            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
269        }
270        else{
271            sprintf(temporary,"pos %d, %d",
272                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.x,
273                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.y);
274            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
275            sprintf(temporary,"size %d * %d",
276                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cx,
277                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cy);
278            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
279        }
280    }
281    else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
282        //////////////////
283        // MENU エディタ
284        //////////////////
285
286        SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
287        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
288    }
289    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
290        //////////////////
291        // ICON エディタ
292        //////////////////
293
294        SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
295        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
296    }
297}
298void ResetState_UndoMenu(void){             //「元に戻す、やり直し」のメニュー表示制御
299    int i,i2;
300    HWND hChild;
301
302    hChild=GetWindow(hClient,GW_CHILD);
303    i=GetWndNum(hChild);
304    if(i==-1){
305        pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
306        EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
307        pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
308        pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
309        EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
310        pobj_StandardToolbar->EnableItem(IDM_REDO,0);
311    }
312    else if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){
313        i2=MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos-1;
314        if(i2==-1) i2=MAX_UNDONUM-1;
315        if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[i2]){
316            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
317            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
318            pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
319        }
320        else{
321            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
322            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
323            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
324        }
325        if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos]){
326            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
327            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
328            pobj_StandardToolbar->EnableItem(IDM_REDO,0);
329        }
330        else{
331            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
332            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
333            pobj_StandardToolbar->EnableItem(IDM_REDO,1);
334        }
335    }
336    else if(MdiInfo[i]->DocType==WNDTYPE_RAD){
337        i2=MdiInfo[i]->MdiRadInfo->undo.NowPos-1;
338        if(i2==-1) i2=MAX_UNDONUM-1;
339        if(!MdiInfo[i]->MdiRadInfo->undo.Command[i2]){
340            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
341            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
342            pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
343        }
344        else{
345            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
346            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
347            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
348        }
349        if(!MdiInfo[i]->MdiRadInfo->undo.Command[MdiInfo[i]->MdiRadInfo->undo.NowPos]){
350            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
351            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
352            pobj_StandardToolbar->EnableItem(IDM_REDO,0);
353        }
354        else{
355            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
356            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
357            pobj_StandardToolbar->EnableItem(IDM_REDO,1);
358        }
359    }
360    else if(MdiInfo[i]->DocType==WNDTYPE_MENU){
361        pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
362        EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
363        pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
364
365        pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
366        EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
367        pobj_StandardToolbar->EnableItem(IDM_REDO,0);
368    }
369    else if(MdiInfo[i]->DocType==WNDTYPE_ICONEDIT){
370        i2=MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos-1;
371        if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
372        if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[i2]){
373            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
374            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
375            pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
376        }
377        else{
378            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
379            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
380            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
381        }
382        if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos]){
383            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
384            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
385            pobj_StandardToolbar->EnableItem(IDM_REDO,0);
386        }
387        else{
388            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
389            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
390            pobj_StandardToolbar->EnableItem(IDM_REDO,1);
391        }
392    }
393}
394void ResetState_ConvMenu(BOOL bEnable){
395    int MenuMsg;
396    if(bEnable)
397        MenuMsg=MF_BYCOMMAND|MF_ENABLED;
398    else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
399
400    pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg);
401    pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg);
402    pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg);
403    pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg);
404    pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg);
405    pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg);
406    pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg);
407    pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg);
408#ifdef THETEXT
409    pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg);
410    pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg);
411#else
412    pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg);
413#endif
414}
415void ResetState_PrintMenu(void);
416void ResetState_EditMenu(void){             //編集メニューの表示制御
417    HWND hChild;
418    int WndNum;
419    long MenuMsg,ToolbarMsg;
420
421    //印刷メニューの状態を設定
422    ResetState_PrintMenu();
423
424    hChild=GetWindow(hClient,GW_CHILD);
425    if(!IsWindow(hChild)){
426        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
427        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
428#ifdef THETEXT
429        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
430#endif
431        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
432
433        pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
434        pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
435        pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
436        EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
437        EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
438        EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
439        pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
440        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
441        pobj_StandardToolbar->EnableItem(IDM_CUT,0);
442        pobj_StandardToolbar->EnableItem(IDM_COPY,0);
443        pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
444
445        ResetState_ConvMenu(0);
446
447        ResetState_UndoMenu();
448        return;
449    }
450    WndNum=GetWndNum(hChild);
451    if(WndNum==-1) return;
452    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
453        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
454        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
455        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED);
456#ifdef THETEXT
457        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED);
458#endif
459        pobj_StandardToolbar->EnableItem(IDM_FIND,1);
460
461        BOOL bConvEnable;
462        hChild=GetWindow(hChild,GW_CHILD);
463        if(!(
464            MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x&&
465            MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y
466            )){
467            MenuMsg=MF_BYCOMMAND|MF_ENABLED;
468            ToolbarMsg=1;
469
470            bConvEnable=1;
471        }
472        else{
473            MenuMsg=MF_BYCOMMAND|MF_GRAYED;
474            ToolbarMsg=0;
475
476            bConvEnable=0;
477        }
478        pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg);
479        pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg);
480        pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg);
481        EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg);
482        EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg);
483        EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg);
484        pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg);
485        pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg);
486
487        if(IsClipboardFormatAvailable(CF_TEXT)){
488            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
489            pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
490        }
491        else{
492            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
493            pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
494        }
495
496
497        //変換コマンド
498        ResetState_ConvMenu(bConvEnable);
499    }
500    else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
501        //検索、置換、文字カウントを無効化
502        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
503        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
504#ifdef THETEXT
505        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
506#endif
507        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
508
509        if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
510            //切り取り、コピー、削除を有効化
511            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
512            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
513            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
514            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
515            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
516            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
517            pobj_StandardToolbar->EnableItem(IDM_CUT,0);
518            pobj_StandardToolbar->EnableItem(IDM_COPY,0);
519        }
520        else{
521            //切り取り、コピー、削除を無効化
522            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
523            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
524            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
525            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
526            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
527            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
528            pobj_StandardToolbar->EnableItem(IDM_CUT,1);
529            pobj_StandardToolbar->EnableItem(IDM_COPY,1);
530        }
531
532        //すべて選択を有効化
533        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
534
535        if(IsClipboardFormatAvailable(dwRadClipboardID)){
536            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
537            pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
538        }
539        else{
540            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
541            pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
542        }
543
544        ResetState_ConvMenu(0);
545    }
546    else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
547        //検索、置換、文字カウントを無効化
548        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
549        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
550#ifdef THETEXT
551        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
552#endif
553        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
554
555        pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
556        pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
557        pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
558        EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
559        EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
560        EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
561        pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
562        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
563        pobj_StandardToolbar->EnableItem(IDM_CUT,0);
564        pobj_StandardToolbar->EnableItem(IDM_COPY,0);
565        pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
566
567        ResetState_ConvMenu(0);
568    }
569    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
570        //検索、置換、文字カウントを無効化
571        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
572        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
573#ifdef THETEXT
574        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
575#endif
576        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
577
578        if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==0){
579            //切り取り、コピー、削除を無効化
580            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
581            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
582            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
583            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
584            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
585            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
586            pobj_StandardToolbar->EnableItem(IDM_CUT,0);
587            pobj_StandardToolbar->EnableItem(IDM_COPY,0);
588        }
589        else{
590            //切り取り、コピー、削除を有効化
591            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
592            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
593            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
594            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
595            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
596            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
597            pobj_StandardToolbar->EnableItem(IDM_CUT,1);
598            pobj_StandardToolbar->EnableItem(IDM_COPY,1);
599        }
600
601        //すべて選択を有効化
602        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
603
604        if(IsClipboardFormatAvailable(CF_BITMAP)){
605            //貼り付けを有効化
606            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
607            pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
608        }
609        else{
610            //貼り付けを無効化
611            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
612            pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
613        }
614
615        ResetState_ConvMenu(0);
616    }
617
618    ResetState_UndoMenu();
619}
620void ResetState_ViewMenu(void){
621    // 表示 メニューの状態を設定
622
623
624#ifdef THETEXT
625    pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn);
626#endif
627}
628void ResetState_PrintMenu(void){                //編集メニューの表示制御
629    HWND hChild;
630    int WndNum;
631    hChild=GetWindow(hClient,GW_CHILD);
632    if(!IsWindow(hChild)){
633        pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
634
635        pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
636
637        pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
638        return;
639    }
640    WndNum=GetWndNum(hChild);
641    if( WndNum != -1 )
642    {
643        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
644            pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
645
646            pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
647
648            pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED);
649        }
650        else{
651            pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
652
653            pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
654
655            pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
656        }
657    }
658}
659void ResetState_DocMenu(void){
660    long MenuMsg,ToolbarMsg;
661    HWND hChild;
662
663    hChild=GetWindow(hClient,GW_CHILD);
664
665
666    /////////////////////////////////////////
667    // 共通ドキュメント メニューの状態を設定
668    /////////////////////////////////////////
669
670    if(!IsWindow(hChild)){
671        MenuMsg=MF_GRAYED;
672        ToolbarMsg=0;
673    }
674    else{
675        MenuMsg=MF_ENABLED;
676        ToolbarMsg=1;
677    }
678    pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg);
679    pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg);
680    pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg);
681    pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg);
682    pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg);
683
684    pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg);
685    pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg);
686    pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg);
687
688
689#ifndef THETEXT
690    /////////////////////////////////////////////////
691    // プロジェクトドキュメント メニューの状態を設定
692    /////////////////////////////////////////////////
693
694    if( projectInfo.IsOpened() ){
695        pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED);
696        pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1);
697
698        MenuMsg=MF_ENABLED;
699        ToolbarMsg=TBSTATE_ENABLED;
700    }
701    else{
702        MenuMsg=MF_GRAYED;
703        ToolbarMsg=TBSTATE_INDETERMINATE;
704    }
705    pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg);
706    pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg);
707    pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg);
708    pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg);
709
710    //デバッガ メニューの状態を設定
711    pobj_Debugger->ResetCommandEnabled();
712#endif
713
714
715    //編集メニューの状態を設定
716    ResetState_EditMenu();
717
718    //表示メニューの状態を設定
719    ResetState_ViewMenu();
720}
721void DuplicateTitleCheck(char *lpszTitle){
722    int i;
723    for(i=0;i<MdiInfo.size();i++){
724        if(MdiInfo[i]->hwnd){
725            if(lstrcmpi(MdiInfo[i]->title.c_str(),lpszTitle)==0){
726                lstrcat(lpszTitle,"_");
727                DuplicateTitleCheck(lpszTitle);
728                return;
729            }
730        }
731    }
732}
733HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor)
734{
735    int i;
736    char str[MAX_PATH],str2[32],*buffer;
737    HWND hChild,hEdit;
738    RECT rect;
739    int iCharCode=NKF_SHIFT_JIS;
740    int iLfCode=LFCODE_CRLF;
741
742    if(filepath){
743
744        //すでに指定されたファイルが開かれている場合
745        hChild=::GetWindow(hClient,GW_CHILD);
746        while(hChild){
747            i=GetWndNum(hChild);
748            if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){
749                if(lstrcmpi(MdiInfo[i]->path.c_str(),filepath)==0) break;
750            }
751            hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
752        }
753        if(hChild){
754            //前面に表示して終了
755            ::BringWindowToTop(hChild);
756            return hChild;
757        }
758
759
760        //////////////////////////////////////////////////////
761        //ファイル読み込み(正常に読み込めるかの確認も含む)
762        //////////////////////////////////////////////////////
763
764        HANDLE hFile;
765        hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
766        if(hFile==INVALID_HANDLE_VALUE){
767            sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
768            ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
769            return 0;
770        }
771        int length;
772        length=GetFileSize(hFile,NULL);
773
774        char *temp;
775        temp=(char *)HeapAlloc(hHeap,0,length+1);
776        DWORD dw;
777        ReadFile(hFile,temp,length,&dw,NULL);
778        CloseHandle(hFile);
779        for(i=0;i<length;i++){
780            if(temp[i]=='\0') temp[i]=' ';
781        }
782        temp[length]=0;
783
784
785        ///////////////////////
786        // 改行コードを判別
787        ///////////////////////
788
789        char *temp2;
790        for(i=0;i<length;i++){
791            if(temp[i]=='\r'){
792                if(temp[i+1]=='\n')
793                    iLfCode=LFCODE_CRLF;
794                else
795                    iLfCode=LFCODE_CR;
796                break;
797            }
798            if(temp[i]=='\n'){
799                iLfCode=LFCODE_LF;
800                break;
801            }
802        }
803
804        //改行コードを変換
805        if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){
806            temp2=nkf.ToCRLF(iLfCode,temp);
807            HeapDefaultFree(temp);
808            temp=temp2;
809
810            length=lstrlen(temp);
811        }
812
813
814        /////////////////////
815        // Shift-JISに変換
816        /////////////////////
817
818        buffer=(char *)HeapAlloc(hHeap,0,length*2+1);
819        nkf.pSetNkfOption("-sx");   //Shift-JISに変換(xは半角カタカナを全角に変換しないオプション)
820        nkf.pNkfConvert(buffer,temp);
821        buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1);
822        HeapDefaultFree(temp);
823
824        //変換前の文字コードを判別
825        iCharCode=nkf.pNkfGetKanjiCode();
826        if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){
827            //判別不能な場合は、Shift-JISにする
828            iCharCode=NKF_SHIFT_JIS;
829        }
830        else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){
831            //EUC、JISの場合で、判別不能な場合は、Shift-JISを優先
832            for(i=0;;i++){
833                if(buffer[i]=='\0'){
834                    //半角コードのみ
835                    iCharCode=NKF_SHIFT_JIS;
836                    break;
837                }
838                if(IsDBCSLeadByte(buffer[i])) break;
839            }
840        }
841
842
843        //////////////////////////
844        // ファイルパスをセット
845        //////////////////////////
846
847        _splitpath(filepath,NULL,NULL,str,str2);
848        lstrcat(str,str2);
849    }
850    else{
851        buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
852        extern int DocumentCounter;
853        DocumentCounter++;
854        sprintf(str,"Document[%d]",DocumentCounter);
855    }
856
857    MDICREATESTRUCT mdic;
858    mdic.szClass="MDIClientWindow_TextEdit";
859    mdic.hOwner=hInst;
860    mdic.x=CW_USEDEFAULT;
861    mdic.y=CW_USEDEFAULT;
862    mdic.cx=CW_USEDEFAULT;
863    mdic.cy=CW_USEDEFAULT;
864    mdic.szTitle=str;
865
866    hChild=::GetWindow(hClient,GW_CHILD);
867    if(::IsWindow(hChild)){
868        if(::IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
869        else mdic.style=0;
870    }
871    else{
872        if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
873        else mdic.style=0;
874    }
875
876    //ファイルアイコンをセット
877    SHFILEINFO shfi;
878    if(filepath)
879        SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
880    else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
881    mdic.lParam=(LPARAM)shfi.hIcon;
882
883    mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
884    hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);   //ウィンドウ作成
885
886    //TextEditorコントロールを設置
887    ::GetClientRect(hChild,&rect);
888    hEdit=CreateWindow("TextEditor",NULL,
889        WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
890        0,0,0,0,
891        hChild,NULL,hInst,NULL);
892
893
894    //ウィンドウのID登録
895    MdiInfo.push_back( new MDIINFO() );
896    i = MdiInfo.size()-1;
897    MdiInfo[i]->hwnd=hChild;
898    MdiInfo[i]->DocType=DocumentType;
899    DuplicateTitleCheck(str);
900    MdiInfo[i]->title = str;
901    if(filepath)
902    {
903        MdiInfo[i]->path = filepath;
904    }
905    else
906    {
907        MdiInfo[i]->path = "";
908    }
909
910    MdiInfo[i]->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] );
911
912    MdiInfo[i]->pMdiTextEdit->hEdit=hEdit;
913    MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
914    MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,MdiInfo[i]);
915    MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon;
916    MdiInfo[i]->pMdiTextEdit->buffer=buffer;
917    MdiInfo[i]->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
918    MdiInfo[i]->pMdiTextEdit->iUnderStart=-1;
919    MdiInfo[i]->pMdiTextEdit->iUnderEnd=-1;
920    MdiInfo[i]->pMdiTextEdit->StartCaretPos.x=0;
921    MdiInfo[i]->pMdiTextEdit->StartCaretPos.y=0;
922    MdiInfo[i]->pMdiTextEdit->EndCaretPos.x=0;
923    MdiInfo[i]->pMdiTextEdit->EndCaretPos.y=0;
924    MdiInfo[i]->pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
925    MdiInfo[i]->pMdiTextEdit->bAutoScroll=0;
926    MdiInfo[i]->pMdiTextEdit->iWidth_ControlTabSpace=
927        GetControlTabSpace(i,&MdiInfo[i]->pMdiTextEdit->iLineNumberTextCount);
928    MdiInfo[i]->pMdiTextEdit->iCharCode=iCharCode;
929    MdiInfo[i]->pMdiTextEdit->iLfCode=iLfCode;
930    MdiInfo[i]->IndentStr=0;
931
932
933    int flag;
934    if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
935    else flag=0;
936    SendTextEditResizeEvent(hChild);
937
938
939    //ワードカラーをセット
940    if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(MdiInfo.size()-1);
941
942    //Docコンボボックスに追加
943    extern HWND hDocCombo;
944    if( hDocCombo )
945    {
946        i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
947        SendMessage(hDocCombo,CB_SETCURSEL,i,0);
948    }
949
950    //タブに追加
951    pobj_MainTab->InsertItem( str, true, TabColor );
952
953    ::SetFocus(hEdit);
954    SetStatusText(NULL);
955
956    //メニュー状態を設定
957    ResetState_DocMenu();
958
959    if( DocumentType == WNDTYPE_BASIC && !projectInfo.IsOpened() ){
960        // 単体ソースコードを開いたとき
961        extern HWND hProjectView;
962        if( !::IsWindowVisible( hProjectView ) ){
963            // クラスビューを表示する
964            SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
965            ShowClassView();
966
967            // クラスビューを更新
968            ResetClassTree((HTREEITEM)-1);
969        }
970    }
971
972    return hChild;
973}
974void CloseDocWindow(int WndNum){
975    int i2,i3;
976
977    MdiInfo[WndNum]->hwnd=0;
978
979    //ドキュメントコンボボックスから文字列を消去
980    extern HWND hDocCombo;
981    i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
982    SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
983
984    //タブコントロールからアイテムを消去
985    if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum]->title.c_str(), true );
986
987
988    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
989        ////////////////////////////
990        // テキストエディタを閉じる
991        ////////////////////////////
992
993        extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
994        if(ComplementWndInfo.hWnd){
995            //コード補完リストを破棄する
996            DestroyWindow(ComplementWndInfo.hWnd);
997            ComplementWndInfo.hWnd=0;
998        }
999
1000        HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->buffer);
1001        HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->pColorRef);
1002
1003        if(MdiInfo[WndNum]->IndentStr) HeapDefaultFree(MdiInfo[WndNum]->IndentStr);
1004
1005        //エディットコントロールを破棄
1006        DestroyWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit);
1007
1008        //Web検索ウィンドウを破棄
1009        delete MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult;
1010        MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult=0;
1011
1012        //ルーラーウィンドウを破棄
1013        delete MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler;
1014        MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler=0;
1015
1016        //アイコンを破棄
1017        if(MdiInfo[WndNum]->pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum]->pMdiTextEdit->hIcon);
1018
1019        delete MdiInfo[WndNum]->pMdiTextEdit;
1020        MdiInfo[WndNum]->pMdiTextEdit=0;
1021    }
1022    else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
1023        /////////////////////
1024        // RADツールを閉じる
1025        /////////////////////
1026
1027        for(i2=0;i2<MAX_UNDONUM;i2++){
1028            if(MdiInfo[WndNum]->MdiRadInfo->undo.Command[i2])
1029                Rad_DeleteUndoData(WndNum,i2);
1030        }
1031        DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hTools);
1032        DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hRad);
1033        SelectObject(MdiInfo[WndNum]->MdiRadInfo->hMemDC,MdiInfo[WndNum]->MdiRadInfo->hOldBitmap);
1034        DeleteDC(MdiInfo[WndNum]->MdiRadInfo->hMemDC);
1035        DeleteObject(MdiInfo[WndNum]->MdiRadInfo->hBitmap);
1036        GlobalFree(MdiInfo[WndNum]->MdiRadInfo);
1037    }
1038    else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
1039        ////////////////////////////
1040        // メニューエディタを閉じる
1041        ////////////////////////////
1042
1043        DestroyWindow(MdiInfo[WndNum]->MdiMenuInfo->hList);
1044        GlobalFree(MdiInfo[WndNum]->MdiMenuInfo);
1045    }
1046    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
1047        ////////////////////////////
1048        // アイコンエディタを閉じる
1049        ////////////////////////////
1050
1051        for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){
1052            for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1053                if(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3])
1054                    HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3]);
1055            }
1056        }
1057
1058        DeleteDC(MdiInfo[WndNum]->MdiIconEditInfo->memdc);
1059        DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hMemBmp);
1060        DestroyWindow(MdiInfo[WndNum]->MdiIconEditInfo->hMain);
1061        for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){
1062            HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[i2]);
1063        }
1064        HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo);
1065    }
1066    else
1067    {
1068        throw;
1069    }
1070
1071    delete MdiInfo[WndNum];
1072    Jenga::Common::EraseVectorItem<std::vector<MDIINFO *>>( MdiInfo, WndNum );
1073}
1074void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1075    int WndNum;
1076    WndNum=GetWndNum(hwnd);
1077    if(WndNum==-1) return;
1078
1079    int WebResultWndHeight;
1080    WebResultWndHeight=LINK_ITEM_HEIGHT;
1081    //未完成
1082    WebResultWndHeight=0;
1083
1084    int iHeightRuler;
1085    if(pobj_nv->bEditor_Ruler){
1086        //ルーラー
1087        MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->resize(
1088            0,
1089            0,
1090            cx,
1091            HEIGHT_RULER);
1092
1093        iHeightRuler=HEIGHT_RULER;
1094
1095        ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1096    }
1097    else{
1098        iHeightRuler=0;
1099
1100        ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1101    }
1102
1103    //エディットウィンドウ
1104    MoveWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit,
1105        0,
1106        iHeightRuler,
1107        cx,
1108        cy-WebResultWndHeight-iHeightRuler,
1109        1);
1110
1111    //Web検索ウィンドウ
1112    MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult->resize(
1113        0,
1114        cy-WebResultWndHeight,
1115        cx,
1116        WebResultWndHeight);
1117}
1118LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1119    int i,i2;
1120    HWND hEdit;
1121
1122    switch(message){
1123        case WM_CREATE:
1124            CREATESTRUCT *lpcs;
1125            lpcs=(CREATESTRUCT *)lParam;
1126            MDICREATESTRUCT *lpmcs;
1127            lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1128            SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1129            break;
1130        case WM_MDIACTIVATE:
1131            //以前のMDIウィンドウのパラメータ ヒントを破棄する
1132            if(MethodCheckInfo.hWnd){
1133                DestroyWindow(MethodCheckInfo.hWnd);
1134                MethodCheckInfo.hWnd=0;
1135            }
1136
1137            //以前のコード補完リストを破棄する
1138            if(ComplementWndInfo.hWnd){
1139                DestroyWindow(ComplementWndInfo.hWnd);
1140                ComplementWndInfo.hWnd=0;
1141            }
1142
1143            if(!lParam) return 0;
1144            i=GetWndNum((HWND)lParam);
1145            if(i==-1) return 0; //ウィンドウが初期状態の場合
1146
1147#ifndef THETEXT
1148            //デバッガ メニューの状態を設定
1149            pobj_Debugger->ResetCommandEnabled();
1150#endif
1151
1152            //ドキュメント セレクト コンボボックス
1153            extern HWND hDocCombo;
1154            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i]->title.c_str());
1155            SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1156
1157            //タブコントロール
1158            pobj_MainTab->MdiActiveEvent(MdiInfo[i]->title.c_str());
1159
1160            if( !projectInfo.IsOpened() ){
1161                ResetClassTree((HTREEITEM)-1);
1162            }
1163
1164            return 0;
1165        case WM_SETFOCUS:
1166            hEdit=GetWindow(hwnd,GW_CHILD);
1167            SetFocus(hEdit);
1168            SetStatusText(CmdMsg);
1169            ResetState_EditMenu();
1170            ResetState_ViewMenu();
1171            break;
1172        case WM_SIZE:
1173            ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1174            break;
1175        case WM_CLOSE:
1176            if(!DocumentModifyCheck(hwnd)) return 0;
1177            CloseDocWindow(GetWndNum(hwnd));
1178            pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1179            i=DefMDIChildProc(hwnd,message,wParam,lParam);
1180
1181            //メニュー状態を設定
1182            ResetState_DocMenu();
1183
1184            return i;
1185    }
1186    return DefMDIChildProc(hwnd,message,wParam,lParam);
1187}
1188
1189WNDPROC oldMainFrameWndProc;
1190LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1191    char str[MAX_PATH];
1192    RECT rect;
1193    POINT pos;
1194
1195    if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1196        //「最近使ったファイル」メニューコマンド
1197        lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1198        OpenFileWithExtension(str);
1199        return 0;
1200    }
1201
1202    if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1203        //「最近使ったプロジェクト」メニューコマンド
1204        lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1205        OpenFileWithExtension(str);
1206        return 0;
1207    }
1208
1209    switch(message)
1210    {
1211
1212#ifndef THETEXT
1213        case WM_SETCOMPILEVIEW:
1214            //コンパイラウィンドウ(埋め込み型)が表示されたとき
1215            hCompileView=(HWND)lParam;
1216            ActiveBasic::IDE::Program::mainFrame.Resized();
1217            return 0;
1218        case WM_DESTROYCOMPILEVIEW:
1219            //コンパイラウィンドウ(埋め込み型)が破棄されたとき
1220            if((int)hCompileView==-1){
1221                //すぐに次のコンパイラウィンドウが起動するとき
1222                hCompileView=0;
1223            }
1224            else{
1225                //完全にコンパイラウィンドウを閉じたときはリサイズ
1226                hCompileView=0;
1227               
1228                ActiveBasic::IDE::Program::mainFrame.Resized();
1229            }
1230            return 0;
1231
1232        case WM_SETDEBUGGERBASE:
1233            //デバッガベースウィンドウ(埋め込み型)が表示されたとき
1234            pobj_Debugger->begin();
1235
1236            //BasicCompiler.exeの強制終了を考慮
1237            SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
1238
1239            return 0;
1240        case WM_DESTROYDEBUGGERBASE:
1241            //BasicCompiler.exeの強制終了を考慮
1242            KillTimer(hOwner,ID_DEBUGSAFTY);
1243
1244            //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
1245            pobj_Debugger->end();
1246
1247            return 0;
1248
1249        case WM_SETDEBUGGERVIEW:
1250            //デバッガウィンドウ(埋め込み型)が表示されたとき
1251            pobj_Debugger->watch_start((HWND)lParam);
1252            ActiveBasic::IDE::Program::mainFrame.Resized();
1253            return 0;
1254        case WM_DESTROYDEBUGGERVIEW:
1255            //デバッガウィンドウ(埋め込み型)が破棄されたとき
1256            pobj_Debugger->watch_quit();
1257            ActiveBasic::IDE::Program::mainFrame.Resized();
1258            return 0;
1259#endif
1260
1261
1262        case WM_MOUSEMOVE:
1263            static DWORD dwDragLever;
1264            static POINT PrevMousePos;
1265            static int start;
1266
1267            pos.x=(long)(short)LOWORD(lParam);
1268            pos.y=(long)(short)HIWORD(lParam);
1269            ClientToScreen(hwnd,&pos);
1270
1271            if(dwDragLever){
1272                GetClientRect(hwnd,&rect);
1273
1274                if(dwDragLever==1){
1275                    //プロジェクトビューをリサイズ中
1276                    pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
1277                    if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
1278                    if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
1279                }
1280                else if(dwDragLever==2){
1281                    //デバッガビューをリサイズ中
1282                    pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
1283                    if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
1284                    if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
1285                        pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
1286                }
1287                else if(dwDragLever==3){
1288                    //コンパイラビューをリサイズ中
1289                    pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
1290                    if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
1291                    if(rect.bottom-100<pobj_nv->height_ClipCompileView)
1292                        pobj_nv->height_ClipCompileView=rect.bottom-100;
1293                }
1294                else if(dwDragLever==4){
1295                    //SideWebをリサイズ中
1296                    pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
1297                    if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
1298                    if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
1299                }
1300
1301                ActiveBasic::IDE::Program::mainFrame.Resized();
1302                UpdateWindow(hwnd);
1303            }
1304            if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1305                //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1306                GetWindowRect(hProjectView,&rect);
1307                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1308                    rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1309                    SetCursor(LoadCursor(0,IDC_SIZEWE));
1310                }
1311            }
1312#ifndef THETEXT
1313            if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1314                //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1315                GetWindowRect(pobj_Debugger->hwnd,&rect);
1316                if(rect.left<=pos.x&&pos.x<=rect.right&&
1317                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1318                    SetCursor(LoadCursor(0,IDC_SIZENS));
1319                }
1320            }
1321            if(bClipCompileView&&IsWindowVisible(hCompileView)){
1322                //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1323                GetWindowRect(hCompileView,&rect);
1324                if(rect.left<=pos.x&&pos.x<=rect.right&&
1325                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1326                    SetCursor(LoadCursor(0,IDC_SIZENS));
1327                }
1328            }
1329#endif
1330            if( pobj_SideWeb )
1331            {
1332                if(pobj_SideWeb->bShow){
1333                    //SideWebとMDIクライアントの境目のサイズ変更ライン
1334                    pobj_SideWeb->GetRect(&rect);
1335                    ClientToScreen(hwnd,&rect);
1336                    if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1337                        rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1338                        SetCursor(LoadCursor(0,IDC_SIZEWE));
1339                    }
1340                }
1341            }
1342            return 0;
1343        case WM_LBUTTONDOWN:
1344            pos.x=LOWORD(lParam);
1345            pos.y=HIWORD(lParam);
1346            ClientToScreen(hwnd,&pos);
1347
1348            if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1349                //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1350                GetWindowRect(hProjectView,&rect);
1351                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1352                    rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1353                    SetCursor(LoadCursor(0,IDC_SIZEWE));
1354
1355                    dwDragLever=1;
1356                    SetCapture(hwnd);
1357
1358                    PrevMousePos=pos;
1359                    start=pobj_nv->width_ClipProjectView;
1360                }
1361            }
1362#ifndef THETEXT
1363            if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1364                //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1365                GetWindowRect(pobj_Debugger->hwnd,&rect);
1366                if(rect.left<=pos.x&&pos.x<=rect.right&&
1367                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1368                    SetCursor(LoadCursor(0,IDC_SIZENS));
1369
1370                    dwDragLever=2;
1371                    SetCapture(hwnd);
1372
1373                    PrevMousePos=pos;
1374                    start=pobj_nv->height_ClipDebuggerView;
1375                }
1376            }
1377            if(bClipCompileView&&IsWindowVisible(hCompileView)){
1378                //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1379                GetWindowRect(hCompileView,&rect);
1380                if(rect.left<=pos.x&&pos.x<=rect.right&&
1381                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1382                    SetCursor(LoadCursor(0,IDC_SIZENS));
1383
1384                    dwDragLever=3;
1385                    SetCapture(hwnd);
1386
1387                    PrevMousePos=pos;
1388                    start=pobj_nv->height_ClipCompileView;
1389                }
1390            }
1391#endif
1392            if( pobj_SideWeb && pobj_SideWeb->bShow){
1393                //SideWebとMDIクライアントの境目のサイズ変更ライン
1394                pobj_SideWeb->GetRect(&rect);
1395                ClientToScreen(hwnd,&rect);
1396                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1397                    rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1398                    SetCursor(LoadCursor(0,IDC_SIZENS));
1399
1400                    dwDragLever=4;
1401                    SetCapture(hwnd);
1402
1403                    PrevMousePos=pos;
1404                    start=pobj_nv->width_WebSearchView;
1405                }
1406            }
1407            return 0;
1408        case WM_LBUTTONUP:
1409            if(dwDragLever){
1410                dwDragLever=0;
1411                ReleaseCapture();
1412            }
1413            return 0;
1414
1415
1416        case WM_SYSCOMMAND:
1417            //ウィンドウの最小化前にウィンドウ位置を保存
1418            if(wParam==SC_MINIMIZE){
1419                if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
1420                else if(!IsIconic(hwnd)){
1421                    pobj_nv->bWindowMax=0;
1422                    GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
1423                }
1424            }
1425            break;  //処理をDefFrameProcへ
1426    }
1427
1428    return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
1429}
1430
1431int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
1432    WNDCLASSEX wcl;
1433
1434    wcl.cbSize=sizeof(WNDCLASSEX);
1435    wcl.hInstance=hInst;
1436    wcl.lpszClassName=lpClassName;
1437    wcl.lpfnWndProc=WndProc;
1438
1439    if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
1440    else wcl.style=0;
1441
1442    wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
1443    wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
1444
1445    if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
1446    else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
1447
1448    wcl.lpszMenuName=NULL;
1449    wcl.cbClsExtra=0;
1450    wcl.cbWndExtra=0;
1451    wcl.hbrBackground=hBackBrush;
1452
1453    return RegisterClassEx(&wcl);
1454}
1455int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
1456    int i,i2,IsStr;
1457    char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
1458    MSG msg;
1459    HACCEL hAccel;
1460
1461    hInst=hThisInst;
1462    if(!SetupProjectEditor()) return 0;
1463
1464    HBRUSH hGrayBrush_LineNumber;
1465    hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
1466
1467    //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1468    if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1469    if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1470    if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1471    if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1472    if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1473    if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
1474    if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1475    if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1476    if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1477    if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1478    if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
1479    if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1480    if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1481    if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
1482    if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
1483    if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
1484
1485    //Web検索用のウィンドウクラス
1486    if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1487    if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1488    if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1489
1490    //ルーラーのウィンドウクラス
1491    if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1492
1493    //SideWebのウィンドウクラス
1494    if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1495
1496    ActiveBasic::IDE::Program::Main();
1497
1498    //return 0;
1499
1500
1501    hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
1502
1503    //メインウィンドウ
1504    RECT *prc;
1505    prc=&pobj_nv->StartupWindowRect;
1506    /*
1507    hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
1508        WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
1509        prc->left, prc->top,
1510        prc->right-prc->left, prc->bottom-prc->top,
1511        HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
1512        */
1513
1514    //バックアップ用タイマーを設定(10秒に一回)
1515    SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
1516
1517    SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
1518    SetClipboardViewer(hOwner);
1519
1520    if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
1521    else ShowWindow(hOwner,ShowCmd);
1522    UpdateWindow(hOwner);
1523
1524    int open_sw=0;
1525    if(lstrlen(lpCmdLine)>0){
1526        lstrcpy(dummy,lpCmdLine);
1527        for(i=0,i2=0,IsStr=0;;i++,i2++){
1528            if(dummy[i]=='\"'){
1529                if(IsStr==0) IsStr=1;
1530                else IsStr=0;
1531                i++;
1532            }
1533            if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
1534                str[i2]=0;
1535                if(!(strstr(str,":")||strstr(str,"\\\\"))){
1536                    lstrcpy(str2,str);
1537                    GetCurrentDirectory(MAX_PATH,str);
1538                    lstrcat(str,"\\");
1539                    lstrcat(str,str2);
1540                }
1541                ShortPathToLongPath(str,str2);
1542                OpenFileWithExtension(str2);
1543                open_sw=1;
1544                if(dummy[i]=='\0') break;
1545                i2=-1;
1546                continue;
1547            }
1548            str[i2]=dummy[i];
1549        }
1550    }
1551
1552    BOOL bRestore=0;
1553
1554
1555    {
1556        //自動バックアップ及び復元機能
1557
1558        //必要であれば復元
1559        bRestore=restore();
1560    }
1561
1562
1563#ifdef THETEXT
1564    if(open_sw==0&&bRestore==0){
1565        //ファイルが開かれなかったとき
1566        NewTextEditWindow(NULL,WNDTYPE_TEXT);
1567    }
1568#endif
1569
1570
1571    while(GetMessage(&msg,NULL,0,0)){
1572
1573        if(!TranslateAccelerator(hOwner,hAccel,&msg)){
1574            if( projectInfo.IsOpened() ){
1575                for(i=0,i2=0;i<MdiInfo.size();i++){
1576                    if(MdiInfo[i]->hwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){
1577                        if(IsDialogMessage(MdiInfo[i]->MdiRadInfo->hProp_Dlg,&msg)) i2=1;
1578                    }
1579                }
1580                if(i2==0){
1581                    if(!TranslateMDISysAccel(hClient,&msg)){
1582                        TranslateMessage(&msg);
1583                        DispatchMessage(&msg);
1584                    }
1585                }
1586            }
1587            else{
1588                if(!TranslateMDISysAccel(hClient,&msg)){
1589                    TranslateMessage(&msg);
1590                    DispatchMessage(&msg);
1591                }
1592            }
1593        }
1594    }
1595
1596    DeleteObject(hGrayBrush_LineNumber);
1597
1598#if defined HeapAlloc
1599    CheckHeapCheck();
1600#endif
1601
1602    return msg.wParam;
1603}
Note: See TracBrowser for help on using the repository browser.