source: dev/trunk/ab5.0/abdev/ProjectEditor/ProjectEditor.cpp @ 477

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

構成管理を大幅に改良。

File size: 91.3 KB
Line 
1#include "stdafx.h"
2
3#include "ProjectEditor.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 CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)
92{
93    std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;
94    STARTUPINFO si;
95    PROCESS_INFORMATION pi;
96    memset(&si,0,sizeof(STARTUPINFO));
97    si.cb=sizeof(STARTUPINFO);
98    si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
99    si.wShowWindow = SW_HIDE;
100    si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
101    si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
102    si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
103   
104    char args[8192];
105    lstrcpy( args, argsStr.c_str() );
106
107    CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
108}
109
110void ToBigChar(char str[]){
111    int i;
112    for(i=0;TRUE;i++){
113        str[i]=(char)toupper((int)str[i]);
114        if(str[i]=='\0') break;
115    }
116}
117int GetWndNum(HWND hChild){
118    int i;
119    if(!IsWindow(hChild)) return -1;
120    for(i=0;i<MAX_WNDNUM;i++){
121        if(hChild==MdiInfo[i].hwnd) break;
122    }
123    if(i==MAX_WNDNUM) i=-1;
124    return i;
125}
126int GetNowWndNum(void){
127    return GetWndNum(GetWindow(hClient,GW_CHILD));
128}
129int GetFileNum(int WndNum){
130    if( !ProjectInfo.name[0] ){
131        return -1;
132    }
133
134    int i;
135    char temporary[MAX_PATH];
136    for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
137
138        ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
139
140        if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) return i;
141    }
142    return -1;
143}
144
145void SendTextEditResizeEvent(HWND hwnd){
146    RECT rect;
147    GetClientRect(hwnd,&rect);
148    ResizeTextEditWnd(hwnd,rect.right,rect.bottom);
149}
150
151void RedrawAllWindow(void){
152    HWND hChild;
153    hChild=GetWindow(hClient,GW_CHILD);
154    if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD));
155    while(hChild){
156        int WndNum;
157        WndNum=GetWndNum(hChild);
158        if(WndNum==-1) break;
159
160        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
161            //コントロールタブスペースの幅と行番号の文字数を更新
162            MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace=
163                GetControlTabSpace(WndNum,&MdiInfo[WndNum].pMdiTextEdit->iLineNumberTextCount);
164
165            InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
166            InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
167
168            SendTextEditResizeEvent(MdiInfo[WndNum].hwnd);
169        }
170        else{
171            HWND hEdit;
172            hEdit=GetWindow(hChild,GW_CHILD);
173            InvalidateRect(hEdit,NULL,0);
174        }
175
176        hChild=GetWindow(hChild,GW_HWNDNEXT);
177    }
178}
179
180int DocumentModifyCheck(HWND hChild){   //終了保存確認
181    int BoxID,WndNum,sw;
182    char str[MAX_PATH],temporary[MAX_PATH];
183
184    WndNum=GetWndNum(hChild);
185    sw=0;
186    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
187        if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ) sw=1;
188    }
189    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
190        if(MdiInfo[WndNum].MdiIconEditInfo->bModify) sw=1;
191    }
192
193    if(sw){
194        GetWindowText(hChild,temporary,MAX_PATH);
195
196        //"\"%s\" ファイルは変更されています。保存しますか?"
197        sprintf(str,STRING_MODIFYCHECK_FILE,temporary);
198        BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION);
199
200        if(BoxID==IDYES){
201            if(!SaveDocument(hChild,NULL)) return 0;
202        }
203        else if(BoxID==IDCANCEL) return 0;
204    }
205    return 1;
206}
207void SetStatusText(char *MenuText){
208    //////////////////////////
209    // ステータスバーの更新
210    //////////////////////////
211
212    int WndNum;
213    double BufSize;
214    char temporary[255];
215    HWND hChild;
216
217    if(MenuText){
218        SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText);
219        if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0;
220    }
221
222    hChild=GetWindow(hClient,GW_CHILD);
223    WndNum=GetWndNum(hChild);
224    if(WndNum==-1) return;
225    hChild=GetWindow(hChild,GW_CHILD);
226    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
227        //////////////////////
228        // テキストエディタ
229        //////////////////////
230
231        //サイズ
232        BufSize=(double)lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer);
233        if(IsWindow(hChild)){
234            if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
235            else if(BufSize<1024*1024){
236                BufSize/=1024;
237                sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize);
238            }
239            else{
240                BufSize/=1024*1024;
241                sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize);
242            }
243        }
244        else temporary[0]=0;
245        SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
246
247        //行と桁
248        if(IsWindow(hChild)){
249#if defined(JPN)
250            //日本語
251            sprintf(temporary,"%d 行、%d 列",
252                MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
253                MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
254#else
255            //英語
256            sprintf(temporary,"%d : %d",
257                MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
258                MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
259#endif
260        }
261        else temporary[0]=0;
262        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
263
264        //文字コード
265        nkf.GetCharCodeName(MdiInfo[WndNum].pMdiTextEdit->iCharCode,temporary);
266        SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
267
268        //文字コード
269        nkf.GetLfCodeName(MdiInfo[WndNum].pMdiTextEdit->iLfCode,temporary);
270        SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
271    }
272    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
273        ////////////////
274        // RADツール
275        ////////////////
276
277        int WndInfoNum;
278        WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
279        if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
280            sprintf(temporary,"pos %d, %d",
281                RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
282                RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
283            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
284            sprintf(temporary,"size %d * %d",
285                RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left,
286                RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
287            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
288        }
289        else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
290            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
291            sprintf(temporary,"size %d * %d",ProjectInfo.pWindowInfo[WndInfoNum].size.cx,ProjectInfo.pWindowInfo[WndInfoNum].size.cy);
292            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
293        }
294        else{
295            sprintf(temporary,"pos %d, %d",
296                ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x,
297                ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
298            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
299            sprintf(temporary,"size %d * %d",
300                ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx,
301                ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
302            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
303        }
304    }
305    else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
306        //////////////////
307        // MENU エディタ
308        //////////////////
309
310        SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
311        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
312    }
313    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
314        //////////////////
315        // ICON エディタ
316        //////////////////
317
318        SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
319        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
320    }
321}
322void ResetState_UndoMenu(void){             //「元に戻す、やり直し」のメニュー表示制御
323    int i,i2;
324    HWND hChild;
325
326    hChild=GetWindow(hClient,GW_CHILD);
327    i=GetWndNum(hChild);
328    if(i==-1){
329        pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
330        EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
331        pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
332        pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
333        EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
334        pobj_StandardToolbar->EnableItem(IDM_REDO,0);
335    }
336    else if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
337        i2=MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos-1;
338        if(i2==-1) i2=MAX_UNDONUM-1;
339        if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->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].pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i].pMdiTextEdit->pTextEditUndoState->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_RAD){
361        i2=MdiInfo[i].MdiRadInfo->undo.NowPos-1;
362        if(i2==-1) i2=MAX_UNDONUM-1;
363        if(!MdiInfo[i].MdiRadInfo->undo.Command[i2]){
364            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
365            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
366            pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
367        }
368        else{
369            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
370            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
371            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
372        }
373        if(!MdiInfo[i].MdiRadInfo->undo.Command[MdiInfo[i].MdiRadInfo->undo.NowPos]){
374            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
375            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
376            pobj_StandardToolbar->EnableItem(IDM_REDO,0);
377        }
378        else{
379            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
380            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
381            pobj_StandardToolbar->EnableItem(IDM_REDO,1);
382        }
383    }
384    else if(MdiInfo[i].DocType==WNDTYPE_MENU){
385        pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
386        EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
387        pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
388
389        pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
390        EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
391        pobj_StandardToolbar->EnableItem(IDM_REDO,0);
392    }
393    else if(MdiInfo[i].DocType==WNDTYPE_ICONEDIT){
394        i2=MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos-1;
395        if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
396        if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[i2]){
397            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
398            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
399            pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
400        }
401        else{
402            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
403            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
404            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
405        }
406        if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos]){
407            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
408            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
409            pobj_StandardToolbar->EnableItem(IDM_REDO,0);
410        }
411        else{
412            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
413            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
414            pobj_StandardToolbar->EnableItem(IDM_REDO,1);
415        }
416    }
417}
418void ResetState_ConvMenu(BOOL bEnable){
419    int MenuMsg;
420    if(bEnable)
421        MenuMsg=MF_BYCOMMAND|MF_ENABLED;
422    else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
423
424    pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg);
425    pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg);
426    pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg);
427    pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg);
428    pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg);
429    pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg);
430    pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg);
431    pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg);
432#ifdef THETEXT
433    pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg);
434    pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg);
435#else
436    pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg);
437#endif
438}
439void ResetState_PrintMenu(void);
440void ResetState_EditMenu(void){             //編集メニューの表示制御
441    HWND hChild;
442    int WndNum;
443    long MenuMsg,ToolbarMsg;
444
445    //印刷メニューの状態を設定
446    ResetState_PrintMenu();
447
448    hChild=GetWindow(hClient,GW_CHILD);
449    if(!IsWindow(hChild)){
450        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
451        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
452#ifdef THETEXT
453        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
454#endif
455        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
456
457        pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
458        pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
459        pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
460        EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
461        EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
462        EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
463        pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
464        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
465        pobj_StandardToolbar->EnableItem(IDM_CUT,0);
466        pobj_StandardToolbar->EnableItem(IDM_COPY,0);
467        pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
468
469        ResetState_ConvMenu(0);
470
471        ResetState_UndoMenu();
472        return;
473    }
474    WndNum=GetWndNum(hChild);
475    if(WndNum==-1) return;
476    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
477        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
478        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
479        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED);
480#ifdef THETEXT
481        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED);
482#endif
483        pobj_StandardToolbar->EnableItem(IDM_FIND,1);
484
485        BOOL bConvEnable;
486        hChild=GetWindow(hChild,GW_CHILD);
487        if(!(
488            MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.x&&
489            MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.y
490            )){
491            MenuMsg=MF_BYCOMMAND|MF_ENABLED;
492            ToolbarMsg=1;
493
494            bConvEnable=1;
495        }
496        else{
497            MenuMsg=MF_BYCOMMAND|MF_GRAYED;
498            ToolbarMsg=0;
499
500            bConvEnable=0;
501        }
502        pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg);
503        pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg);
504        pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg);
505        EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg);
506        EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg);
507        EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg);
508        pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg);
509        pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg);
510
511        if(IsClipboardFormatAvailable(CF_TEXT)){
512            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
513            pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
514        }
515        else{
516            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
517            pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
518        }
519
520
521        //変換コマンド
522        ResetState_ConvMenu(bConvEnable);
523    }
524    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
525        //検索、置換、文字カウントを無効化
526        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
527        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
528#ifdef THETEXT
529        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
530#endif
531        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
532
533        if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
534            //切り取り、コピー、削除を有効化
535            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
536            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
537            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
538            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
539            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
540            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
541            pobj_StandardToolbar->EnableItem(IDM_CUT,0);
542            pobj_StandardToolbar->EnableItem(IDM_COPY,0);
543        }
544        else{
545            //切り取り、コピー、削除を無効化
546            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
547            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
548            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
549            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
550            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
551            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
552            pobj_StandardToolbar->EnableItem(IDM_CUT,1);
553            pobj_StandardToolbar->EnableItem(IDM_COPY,1);
554        }
555
556        //すべて選択を有効化
557        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
558
559        if(IsClipboardFormatAvailable(dwRadClipboardID)){
560            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
561            pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
562        }
563        else{
564            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
565            pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
566        }
567
568        ResetState_ConvMenu(0);
569    }
570    else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
571        //検索、置換、文字カウントを無効化
572        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
573        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
574#ifdef THETEXT
575        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
576#endif
577        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
578
579        pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
580        pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
581        pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
582        EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
583        EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
584        EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
585        pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
586        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
587        pobj_StandardToolbar->EnableItem(IDM_CUT,0);
588        pobj_StandardToolbar->EnableItem(IDM_COPY,0);
589        pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
590
591        ResetState_ConvMenu(0);
592    }
593    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
594        //検索、置換、文字カウントを無効化
595        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
596        pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
597#ifdef THETEXT
598        pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
599#endif
600        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
601
602        if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==0){
603            //切り取り、コピー、削除を無効化
604            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
605            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
606            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
607            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
608            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
609            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
610            pobj_StandardToolbar->EnableItem(IDM_CUT,0);
611            pobj_StandardToolbar->EnableItem(IDM_COPY,0);
612        }
613        else{
614            //切り取り、コピー、削除を有効化
615            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
616            pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
617            pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
618            EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
619            EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
620            EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
621            pobj_StandardToolbar->EnableItem(IDM_CUT,1);
622            pobj_StandardToolbar->EnableItem(IDM_COPY,1);
623        }
624
625        //すべて選択を有効化
626        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
627
628        if(IsClipboardFormatAvailable(CF_BITMAP)){
629            //貼り付けを有効化
630            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
631            pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
632        }
633        else{
634            //貼り付けを無効化
635            pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
636            pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
637        }
638
639        ResetState_ConvMenu(0);
640    }
641
642    ResetState_UndoMenu();
643}
644void ResetState_ViewMenu(void){
645    // 表示 メニューの状態を設定
646
647
648#ifdef THETEXT
649    pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn);
650#endif
651}
652void ResetState_PrintMenu(void){                //編集メニューの表示制御
653    HWND hChild;
654    int WndNum;
655    hChild=GetWindow(hClient,GW_CHILD);
656    if(!IsWindow(hChild)){
657        pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
658
659        pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
660
661        pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
662        return;
663    }
664    WndNum=GetWndNum(hChild);
665    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
666        pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
667
668        pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
669
670        pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED);
671    }
672    else{
673        pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
674
675        pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
676
677        pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
678    }
679}
680void ResetState_DocMenu(void){
681    long MenuMsg,ToolbarMsg;
682    HWND hChild;
683
684    hChild=GetWindow(hClient,GW_CHILD);
685
686
687    /////////////////////////////////////////
688    // 共通ドキュメント メニューの状態を設定
689    /////////////////////////////////////////
690
691    if(!IsWindow(hChild)){
692        MenuMsg=MF_GRAYED;
693        ToolbarMsg=0;
694    }
695    else{
696        MenuMsg=MF_ENABLED;
697        ToolbarMsg=1;
698    }
699    pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg);
700    pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg);
701    pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg);
702    pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg);
703    pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg);
704
705    pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg);
706    pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg);
707    pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg);
708
709
710#ifndef THETEXT
711    /////////////////////////////////////////////////
712    // プロジェクトドキュメント メニューの状態を設定
713    /////////////////////////////////////////////////
714
715    if(ProjectInfo.name[0]){
716        pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED);
717        pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1);
718
719        MenuMsg=MF_ENABLED;
720        ToolbarMsg=TBSTATE_ENABLED;
721    }
722    else{
723        MenuMsg=MF_GRAYED;
724        ToolbarMsg=TBSTATE_INDETERMINATE;
725    }
726    pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg);
727    pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg);
728    pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg);
729    pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg);
730
731    //デバッガ メニューの状態を設定
732    pobj_Debugger->ResetCommandEnabled();
733#endif
734
735
736    //編集メニューの状態を設定
737    ResetState_EditMenu();
738
739    //表示メニューの状態を設定
740    ResetState_ViewMenu();
741}
742void DuplicateTitleCheck(char *lpszTitle){
743    int i;
744    for(i=0;i<MAX_WNDNUM;i++){
745        if(MdiInfo[i].hwnd){
746            if(lstrcmpi(MdiInfo[i].title,lpszTitle)==0){
747                lstrcat(lpszTitle,"_");
748                DuplicateTitleCheck(lpszTitle);
749                return;
750            }
751        }
752    }
753}
754HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor){
755    int i;
756    char str[MAX_PATH],str2[32],*buffer;
757    HWND hChild,hEdit;
758    RECT rect;
759    int iCharCode=NKF_SHIFT_JIS;
760    int iLfCode=LFCODE_CRLF;
761
762    if(filepath){
763
764        //すでに指定されたファイルが開かれている場合
765        hChild=GetWindow(hClient,GW_CHILD);
766        while(hChild){
767            i=GetWndNum(hChild);
768            if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
769                if(lstrcmpi(MdiInfo[i].path,filepath)==0) break;
770            }
771            hChild=GetNextWindow(hChild,GW_HWNDNEXT);
772        }
773        if(hChild){
774            //前面に表示して終了
775            BringWindowToTop(hChild);
776            return hChild;
777        }
778
779
780        //////////////////////////////////////////////////////
781        //ファイル読み込み(正常に読み込めるかの確認も含む)
782        //////////////////////////////////////////////////////
783
784        HANDLE hFile;
785        hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
786        if(hFile==INVALID_HANDLE_VALUE){
787            sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
788            MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
789            return 0;
790        }
791        int length;
792        length=GetFileSize(hFile,NULL);
793
794        char *temp;
795        temp=(char *)HeapAlloc(hHeap,0,length+1);
796        DWORD dw;
797        ReadFile(hFile,temp,length,&dw,NULL);
798        CloseHandle(hFile);
799        for(i=0;i<length;i++){
800            if(temp[i]=='\0') temp[i]=' ';
801        }
802        temp[length]=0;
803
804
805        ///////////////////////
806        // 改行コードを判別
807        ///////////////////////
808
809        char *temp2;
810        for(i=0;i<length;i++){
811            if(temp[i]=='\r'){
812                if(temp[i+1]=='\n')
813                    iLfCode=LFCODE_CRLF;
814                else
815                    iLfCode=LFCODE_CR;
816                break;
817            }
818            if(temp[i]=='\n'){
819                iLfCode=LFCODE_LF;
820                break;
821            }
822        }
823
824        //改行コードを変換
825        if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){
826            temp2=nkf.ToCRLF(iLfCode,temp);
827            HeapDefaultFree(temp);
828            temp=temp2;
829
830            length=lstrlen(temp);
831        }
832
833
834        /////////////////////
835        // Shift-JISに変換
836        /////////////////////
837
838        buffer=(char *)HeapAlloc(hHeap,0,length*2+1);
839        nkf.pSetNkfOption("-sx");   //Shift-JISに変換(xは半角カタカナを全角に変換しないオプション)
840        nkf.pNkfConvert(buffer,temp);
841        buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1);
842        HeapDefaultFree(temp);
843
844        //変換前の文字コードを判別
845        iCharCode=nkf.pNkfGetKanjiCode();
846        if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){
847            //判別不能な場合は、Shift-JISにする
848            iCharCode=NKF_SHIFT_JIS;
849        }
850        else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){
851            //EUC、JISの場合で、判別不能な場合は、Shift-JISを優先
852            for(i=0;;i++){
853                if(buffer[i]=='\0'){
854                    //半角コードのみ
855                    iCharCode=NKF_SHIFT_JIS;
856                    break;
857                }
858                if(IsDBCSLeadByte(buffer[i])) break;
859            }
860        }
861
862
863        //////////////////////////
864        // ファイルパスをセット
865        //////////////////////////
866
867        _splitpath(filepath,NULL,NULL,str,str2);
868        lstrcat(str,str2);
869    }
870    else{
871        buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
872        DocumentCounter++;
873        sprintf(str,"Document[%d]",DocumentCounter);
874    }
875
876    MDICREATESTRUCT mdic;
877    mdic.szClass="MDIClientWindow_TextEdit";
878    mdic.hOwner=hInst;
879    mdic.x=CW_USEDEFAULT;
880    mdic.y=CW_USEDEFAULT;
881    mdic.cx=CW_USEDEFAULT;
882    mdic.cy=CW_USEDEFAULT;
883    mdic.szTitle=str;
884
885    hChild=GetWindow(hClient,GW_CHILD);
886    if(IsWindow(hChild)){
887        if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
888        else mdic.style=0;
889    }
890    else{
891        if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
892        else mdic.style=0;
893    }
894
895    //ファイルアイコンをセット
896    SHFILEINFO shfi;
897    if(filepath)
898        SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
899    else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
900    mdic.lParam=(LPARAM)shfi.hIcon;
901
902    mdic.style|=WS_CLIPCHILDREN;
903    hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);   //ウィンドウ作成
904
905    //TextEditorコントロールを設置
906    GetClientRect(hChild,&rect);
907    hEdit=CreateWindow("TextEditor",NULL,
908        WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
909        0,0,0,0,
910        hChild,NULL,hInst,NULL);
911
912    //ウィンドウのID登録
913    for(i=0;i<MAX_WNDNUM;i++){
914        if(MdiInfo[i].hwnd==0){
915            MdiInfo[i].hwnd=hChild;
916            MdiInfo[i].DocType=DocumentType;
917            DuplicateTitleCheck(str);
918            MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
919            lstrcpy(MdiInfo[i].title,str);
920            if(filepath){
921                MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(filepath)+1);
922                lstrcpy(MdiInfo[i].path,filepath);
923            }
924            else{
925                MdiInfo[i].path=(char *)GlobalAlloc(GPTR,1);
926            }
927
928            MdiInfo[i].pMdiTextEdit = new CMdiTextEdit( &MdiInfo[i] );
929
930            MdiInfo[i].pMdiTextEdit->hEdit=hEdit;
931            MdiInfo[i].pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
932            MdiInfo[i].pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
933            MdiInfo[i].pMdiTextEdit->hIcon=shfi.hIcon;
934            MdiInfo[i].pMdiTextEdit->buffer=buffer;
935            MdiInfo[i].pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
936            MdiInfo[i].pMdiTextEdit->iUnderStart=-1;
937            MdiInfo[i].pMdiTextEdit->iUnderEnd=-1;
938            MdiInfo[i].pMdiTextEdit->StartCaretPos.x=0;
939            MdiInfo[i].pMdiTextEdit->StartCaretPos.y=0;
940            MdiInfo[i].pMdiTextEdit->EndCaretPos.x=0;
941            MdiInfo[i].pMdiTextEdit->EndCaretPos.y=0;
942            MdiInfo[i].pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
943            MdiInfo[i].pMdiTextEdit->bAutoScroll=0;
944            MdiInfo[i].pMdiTextEdit->iWidth_ControlTabSpace=
945                GetControlTabSpace(i,&MdiInfo[i].pMdiTextEdit->iLineNumberTextCount);
946            MdiInfo[i].pMdiTextEdit->iCharCode=iCharCode;
947            MdiInfo[i].pMdiTextEdit->iLfCode=iLfCode;
948
949            MdiInfo[i].IndentStr=0;
950
951            int flag;
952            if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
953            else flag=0;
954            SendTextEditResizeEvent(hChild);
955            break;
956        }
957    }
958
959    //ワードカラーをセット
960    if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(i);
961
962    //Docコンボボックスに追加
963    extern HWND hDocCombo;
964    i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
965    SendMessage(hDocCombo,CB_SETCURSEL,i,0);
966
967    //タブに追加
968    pobj_MainTab->InsertItem( str, true, TabColor );
969
970    SetFocus(hEdit);
971    SetStatusText(NULL);
972
973    //メニュー状態を設定
974    ResetState_DocMenu();
975
976    if( DocumentType == WNDTYPE_BASIC && ProjectInfo.name[0] == '\0' ){
977        // 単体ソースコードを開いたとき
978        if( !IsWindowVisible( hProjectView ) ){
979            // クラスビューを表示する
980            SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
981            ShowClassView();
982
983            // クラスビューを更新
984            ResetClassTree(-1);
985        }
986    }
987
988    return hChild;
989}
990void CreateNewFile(void){
991
992#ifdef THETEXT
993    NewTextEditWindow(NULL,WNDTYPE_TEXT);
994    return;
995#else
996    int FileType;
997    BOOL bAddToProject;
998    char temporary[MAX_PATH];
999
1000    FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,(DLGPROC)DlgNewFile);
1001    if(FileType==-1) return;
1002
1003    if(FileType&0x00008000){
1004        bAddToProject=1;
1005        FileType&=0x0FFF;
1006        lstrcpy(temporary,NewFileName);
1007        if(!strstr(temporary,".")) lstrcat(temporary,".ab");
1008        GetFullPath(temporary,ProjectInfo.dir);
1009    }
1010    else bAddToProject=0;
1011
1012    switch(FileType){
1013        case FT_BASICPROGRAM:       //Basicプログラム
1014        case FT_SUBPROGRAM:
1015            if(bAddToProject){
1016                WriteBuffer(temporary,0,0);
1017                NewTextEditWindow(temporary,WNDTYPE_BASIC);
1018                Project_File_Insert(temporary);
1019            }
1020            else NewTextEditWindow(NULL,WNDTYPE_BASIC);
1021            break;
1022
1023        case FT_PROJECT:
1024            DlgNewProjectWizard(hOwner);
1025            break;
1026
1027        case FT_TEXT:
1028            NewTextEditWindow(NULL,WNDTYPE_TEXT);
1029            break;
1030
1031        case FT_HTML:
1032            NewTextEditWindow(NULL,WNDTYPE_HTML);
1033            break;
1034
1035        case FT_ICON:
1036            NewIconEditWindow(NULL);
1037            break;
1038    }
1039#endif
1040}
1041void CloseDocWindow(int WndNum){
1042    int i2,i3;
1043
1044    MdiInfo[WndNum].hwnd=0;
1045
1046    //ドキュメントコンボボックスから文字列を消去
1047    extern HWND hDocCombo;
1048    i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
1049    SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
1050
1051    //タブコントロールからアイテムを消去
1052    if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true );
1053
1054
1055    GlobalFree(MdiInfo[WndNum].title);
1056    GlobalFree(MdiInfo[WndNum].path);
1057
1058    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1059        ////////////////////////////
1060        // テキストエディタを閉じる
1061        ////////////////////////////
1062
1063        extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
1064        if(ComplementWndInfo.hWnd){
1065            //コード補完リストを破棄する
1066            DestroyWindow(ComplementWndInfo.hWnd);
1067            ComplementWndInfo.hWnd=0;
1068        }
1069
1070        HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
1071        HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
1072
1073        if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
1074
1075        //エディットコントロールを破棄
1076        DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1077
1078        //Web検索ウィンドウを破棄
1079        delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
1080        MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
1081
1082        //ルーラーウィンドウを破棄
1083        delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
1084        MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
1085
1086        //アイコンを破棄
1087        if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
1088
1089        delete MdiInfo[WndNum].pMdiTextEdit;
1090        MdiInfo[WndNum].pMdiTextEdit=0;
1091    }
1092    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1093        /////////////////////
1094        // RADツールを閉じる
1095        /////////////////////
1096
1097        for(i2=0;i2<MAX_UNDONUM;i2++){
1098            if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
1099                Rad_DeleteUndoData(WndNum,i2);
1100        }
1101        DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
1102        DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
1103        SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
1104        DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
1105        DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
1106        GlobalFree(MdiInfo[WndNum].MdiRadInfo);
1107    }
1108    else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1109        ////////////////////////////
1110        // メニューエディタを閉じる
1111        ////////////////////////////
1112
1113        DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
1114        GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
1115    }
1116    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1117        ////////////////////////////
1118        // アイコンエディタを閉じる
1119        ////////////////////////////
1120
1121        for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1122            for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1123                if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
1124                    HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
1125            }
1126        }
1127
1128        DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
1129        DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
1130        DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
1131        for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1132            HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
1133        }
1134        HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
1135    }
1136}
1137void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1138    int WndNum;
1139    WndNum=GetWndNum(hwnd);
1140    if(WndNum==-1) return;
1141
1142    int WebResultWndHeight;
1143    WebResultWndHeight=LINK_ITEM_HEIGHT;
1144    //未完成
1145    WebResultWndHeight=0;
1146
1147    int iHeightRuler;
1148    if(pobj_nv->bEditor_Ruler){
1149        //ルーラー
1150        MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
1151            0,
1152            0,
1153            cx,
1154            HEIGHT_RULER);
1155
1156        iHeightRuler=HEIGHT_RULER;
1157
1158        ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1159    }
1160    else{
1161        iHeightRuler=0;
1162
1163        ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1164    }
1165
1166    //エディットウィンドウ
1167    MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
1168        0,
1169        iHeightRuler,
1170        cx,
1171        cy-WebResultWndHeight-iHeightRuler,
1172        1);
1173
1174    //Web検索ウィンドウ
1175    MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
1176        0,
1177        cy-WebResultWndHeight,
1178        cx,
1179        WebResultWndHeight);
1180}
1181LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1182    int i,i2;
1183    HWND hEdit;
1184
1185    switch(message){
1186        case WM_CREATE:
1187            CREATESTRUCT *lpcs;
1188            lpcs=(CREATESTRUCT *)lParam;
1189            MDICREATESTRUCT *lpmcs;
1190            lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1191            SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1192            break;
1193        case WM_MDIACTIVATE:
1194            //以前のMDIウィンドウのパラメータ ヒントを破棄する
1195            if(MethodCheckInfo.hWnd){
1196                DestroyWindow(MethodCheckInfo.hWnd);
1197                MethodCheckInfo.hWnd=0;
1198            }
1199
1200            //以前のコード補完リストを破棄する
1201            if(ComplementWndInfo.hWnd){
1202                DestroyWindow(ComplementWndInfo.hWnd);
1203                ComplementWndInfo.hWnd=0;
1204            }
1205
1206            if(!lParam) return 0;
1207            i=GetWndNum((HWND)lParam);
1208            if(i==-1) return 0; //ウィンドウが初期状態の場合
1209
1210#ifndef THETEXT
1211            //デバッガ メニューの状態を設定
1212            pobj_Debugger->ResetCommandEnabled();
1213#endif
1214
1215            //ドキュメント セレクト コンボボックス
1216            extern HWND hDocCombo;
1217            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1218            SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1219
1220            //タブコントロール
1221            pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
1222
1223            if( !ProjectInfo.name[0] ){
1224                ResetClassTree(-1);
1225            }
1226
1227            return 0;
1228        case WM_SETFOCUS:
1229            hEdit=GetWindow(hwnd,GW_CHILD);
1230            SetFocus(hEdit);
1231            SetStatusText(CmdMsg);
1232            ResetState_EditMenu();
1233            ResetState_ViewMenu();
1234            break;
1235        case WM_SIZE:
1236            ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1237            break;
1238        case WM_CLOSE:
1239            if(!DocumentModifyCheck(hwnd)) return 0;
1240            CloseDocWindow(GetWndNum(hwnd));
1241            pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1242            i=DefMDIChildProc(hwnd,message,wParam,lParam);
1243
1244            //メニュー状態を設定
1245            ResetState_DocMenu();
1246
1247            return i;
1248    }
1249    return DefMDIChildProc(hwnd,message,wParam,lParam);
1250}
1251void ResizeOwnerWnd(void){
1252    int width_owner,height_owner;
1253    int height_Rebar;
1254    int height_MdiClient;
1255    RECT rect,StatusRect,RebarRect;
1256
1257    GetClientRect(hOwner,&rect);
1258    width_owner=rect.right;
1259    height_owner=rect.bottom;
1260
1261    //Rebar
1262    SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1263    UpdateWindow(pobj_Rebar->hRebar);
1264
1265    //Status bar
1266#define STATUSBAR_PARTS_NUM 5
1267    int sb_size[STATUSBAR_PARTS_NUM];
1268    sb_size[0]=width_owner-340;
1269    sb_size[1]=width_owner-220;
1270    sb_size[2]=width_owner-120;
1271    sb_size[3]=width_owner-50;
1272    sb_size[4]=width_owner;
1273    SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
1274    SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1275    UpdateWindow(hStatusBar);
1276
1277    //Status bar
1278    int height_Statusbar;
1279    SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
1280    height_Statusbar=StatusRect.bottom;
1281
1282    GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
1283    height_Rebar=RebarRect.bottom-RebarRect.top+2;
1284
1285    int height_dv;  //Width of Debugger View
1286    int height_cv;  //Width of Compiler View
1287    height_dv=0;
1288    height_cv=0;
1289#ifndef THETEXT
1290    if(bClipCompileView){
1291        if(pobj_Debugger->IsDebuggerView()){
1292            //デバッガビューが表示されているとき
1293            height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
1294        }
1295        if(hCompileView){
1296            //コンパイラビューが表示されているとき
1297            height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
1298        }
1299    }
1300#endif
1301
1302    int width_pjv=0;    //Width of Project View
1303    if(pobj_nv->bClipProjectView){
1304        if(IsWindowVisible(hProjectView)){
1305            //プロジェクトビューが表示されているとき
1306            width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
1307        }
1308    }
1309
1310    int width_SideWeb=0;
1311    if( pobj_SideWeb )
1312    {
1313        if(pobj_SideWeb->bShow){
1314            width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
1315        }
1316    }
1317
1318    //MDIクライアントの高さ
1319    height_MdiClient=height_owner-(
1320        height_Rebar+
1321        height_dv+
1322        height_cv+
1323        height_Statusbar
1324        );
1325
1326    //タブコントロール
1327    int tab_height;
1328    if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
1329    else{
1330        RECT rc;
1331        TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
1332        tab_height=rc.bottom-rc.top;
1333    }
1334    MoveWindow(pobj_MainTab->hTab,
1335        width_pjv,
1336        height_Rebar,
1337        width_owner-width_pjv-width_SideWeb,
1338        tab_height,
1339        1);
1340
1341    //MDIクライアント
1342    MoveWindow(hClient,
1343        width_pjv,
1344        height_Rebar+tab_height,
1345        width_owner-width_pjv-width_SideWeb,
1346        height_MdiClient-tab_height,
1347        1);
1348
1349    if( pobj_SideWeb )
1350    {
1351        if(pobj_SideWeb->bShow){
1352            //SideWeb
1353            pobj_SideWeb->resize(
1354                width_owner - pobj_nv->width_WebSearchView,
1355                height_Rebar,
1356                pobj_nv->width_WebSearchView,
1357                height_MdiClient);
1358        }
1359        else pobj_SideWeb->resize(0,0,0,0);
1360    }
1361
1362    if(width_pjv){
1363        //プロジェクトビュー
1364        MoveWindow(hProjectView,
1365            0,
1366            height_Rebar,
1367            pobj_nv->width_ClipProjectView,
1368            height_MdiClient,
1369            1);
1370        InvalidateRect(hProjectView,NULL,0);
1371    }
1372
1373    if(height_dv){
1374#ifndef THETEXT
1375        //デバッガビュー
1376        pobj_Debugger->resize(
1377            0,
1378            height_Rebar+height_MdiClient+LEVER_THICK,
1379            width_owner,
1380            pobj_nv->height_ClipDebuggerView);
1381#endif
1382    }
1383    if(height_cv){
1384        //コンパイラビュー
1385        MoveWindow(hCompileView,
1386            0,
1387            height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
1388            width_owner,
1389            pobj_nv->height_ClipCompileView,
1390            1);
1391    }
1392}
1393LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1394    int i,i2,i3,WndNum;
1395    char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
1396    HWND hChild,hEdit;
1397    RECT rect;
1398    POINT pos;
1399    LPTOOLTIPTEXT TipText;
1400    LPNMHDR lpnmhdr;
1401    NMPGCALCSIZE *lpCalcSize;
1402    NMPGSCROLL *lpScroll;
1403    HDROP hDrop;
1404    HGLOBAL hGlobal;
1405    CHARRANGE CharRange;
1406    HANDLE hFile;
1407    BOOL bChecked;
1408
1409    static COLORREF colorUser=RGB(255,255,255);
1410
1411    if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1412        //「最近使ったファイル」メニューコマンド
1413        lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1414        OpenFileWithExtension(str);
1415        return 0;
1416    }
1417
1418    if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1419        //「最近使ったプロジェクト」メニューコマンド
1420        lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1421        OpenFileWithExtension(str);
1422        return 0;
1423    }
1424
1425    switch(message){
1426        case WM_CREATE:
1427            SetupWindow(hwnd);
1428
1429            //テキストエディタフォント設定
1430            ResetTextEditFont(hwnd);
1431
1432            //バックアップ用タイマーを設定(10秒に一回)
1433            SetTimer(hwnd,ID_TIMER_BACKUP,10000,NULL);
1434
1435            return 0;
1436
1437
1438        case WM_TIMER:
1439            //Pro版は自動バックアップ及び復元機能を有効にする
1440            _beginthread(backup,0,0);
1441
1442#ifndef THETEXT
1443            if(wParam==ID_DEBUGSAFTY){
1444                //BasicCompiler.exeが強制終了しているかどうかを検証
1445                pobj_Debugger->SaftyCheck();
1446            }
1447#endif
1448
1449            return 0;
1450
1451
1452        case WM_DRAWCLIPBOARD:
1453            ResetState_EditMenu();
1454            return 0;
1455
1456        case WM_MENUSELECT:
1457            MenuAdvice(wParam);
1458            return 0;
1459        case WM_INITMENU:
1460            pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
1461#ifndef THETEXT
1462            pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
1463#endif
1464            return 0;
1465        case WM_MEASUREITEM:
1466            LPMEASUREITEMSTRUCT lpMI;
1467            lpMI = (LPMEASUREITEMSTRUCT)lParam;
1468            if(lpMI->CtlType==ODT_MENU){
1469                SIZE size;
1470                CMenuItemData *pobj_MenuItemData;
1471                pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
1472                if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
1473                    //メインメニューの親アイテム
1474                    pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
1475                    lpMI->itemWidth = size.cx;
1476                    lpMI->itemHeight = size.cy;
1477                }
1478                else{
1479                    //メインメニューにぶらさがるサブメニュー
1480                    pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
1481                    lpMI->itemWidth = size.cx;
1482                    lpMI->itemHeight = size.cy;
1483                }
1484            }
1485            return 0;
1486
1487        case WM_DRAWITEM:
1488            {
1489                DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam;
1490
1491                if(pdis->CtlType==ODT_MENU){
1492                    if(!pobj_MainMenu) return 0;
1493
1494                    CMenuItemData *pobj_MenuItemData;
1495                    pobj_MenuItemData=(CMenuItemData *)pdis->itemData;
1496                    if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
1497                        //メインメニューの親アイテム
1498                        pobj_MainMenu->OwnerDrawMenu(pdis->hDC,
1499                            &pdis->rcItem,
1500                            (pdis->itemState&ODS_SELECTED)!=0,
1501                            pobj_MenuItemData->item_index);
1502                    }
1503                    else{
1504                        //メインメニューにぶらさがるサブメニュー
1505                        pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
1506                            pdis->hDC,
1507                            &pdis->rcItem,
1508                            (pdis->itemState&ODS_SELECTED)!=0,
1509                            pobj_MenuItemData->item_index);
1510                    }
1511                }
1512
1513                return 0;
1514            }
1515
1516        case WM_NOTIFY:
1517            if(!lParam) return 0;
1518            TipText=(LPTOOLTIPTEXT)lParam;
1519            if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
1520            lpnmhdr=(LPNMHDR)lParam;
1521
1522            extern HWND hStandardToolbarPager;
1523            extern HWND hDebuggerToolbarPager;
1524            if(pobj_Rebar){
1525                //レバーオブジェクトが存在するとき
1526                if(lpnmhdr->hwndFrom==pobj_Rebar->hRebar&&lpnmhdr->code==RBN_HEIGHTCHANGE){
1527                    ResizeOwnerWnd();
1528                    return 0;
1529                }
1530            }
1531            if(lpnmhdr->hwndFrom==hStandardToolbarPager){
1532                if(lpnmhdr->code==PGN_CALCSIZE){
1533                    lpCalcSize=(LPNMPGCALCSIZE)lParam;
1534                    if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
1535                        lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
1536                }
1537                else if(lpnmhdr->code==PGN_SCROLL){
1538                    lpScroll=(LPNMPGSCROLL)lParam;
1539                    lpScroll->iScroll=20;
1540                }
1541            }
1542            else if(lpnmhdr->hwndFrom==hDebuggerToolbarPager){
1543                if(lpnmhdr->code==PGN_CALCSIZE){
1544                    lpCalcSize=(LPNMPGCALCSIZE)lParam;
1545                    if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
1546                        lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
1547                }
1548                else if(lpnmhdr->code==PGN_SCROLL){
1549                    lpScroll=(LPNMPGSCROLL)lParam;
1550                    lpScroll->iScroll=20;
1551                }
1552            }
1553
1554            NMHDR *hdr;
1555            hdr=(NMHDR *)lParam;
1556            if(pobj_MainTab){
1557                if(hdr->hwndFrom==pobj_MainTab->hTab){
1558                    if(hdr->code==TCN_SELCHANGE)
1559                        pobj_MainTab->SelChangeEvent();
1560
1561                    if(hdr->code==NM_RCLICK){
1562
1563                        TCHITTESTINFO tcHitTest;
1564                        GetCursorPos(&tcHitTest.pt);
1565                        ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
1566                        i=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
1567                        if(i==-1) return 0;
1568
1569                        TabCtrl_SetCurSel(pobj_MainTab->hTab,i);
1570
1571                        pobj_MainTab->SelChangeEvent();
1572
1573
1574                        /////////////////////
1575                        // メニューを表示
1576                        /////////////////////
1577
1578                        hChild=GetWindow(hClient,GW_CHILD);
1579                        WndNum=GetWndNum(hChild);
1580
1581                        //保存コマンドの文字列をセット
1582                        MENUITEMINFO mii;
1583                        mii.cbSize=sizeof(MENUITEMINFO);
1584                        mii.fMask=MIIM_TYPE;
1585                        mii.dwTypeData=temporary;
1586                        mii.fType=MFT_STRING;
1587                        if(MdiInfo[WndNum].path[0]){
1588                            _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1589                            lstrcat(temporary,temp2);
1590                            lstrcat(temporary," を保存(&S)");
1591                        }
1592                        else{
1593                            lstrcpy(temporary,"保存(&S)");
1594                        }
1595                        SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
1596
1597                        /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
1598                                                        コマンドを場合によって無効化にする */
1599                        if(MdiInfo[WndNum].path[0]){
1600                            EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
1601                            EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
1602                            EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
1603                        }
1604                        else{
1605                            EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
1606                            EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
1607                            EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
1608                        }
1609
1610                        POINT MousePos;
1611                        GetCursorPos(&MousePos);
1612                        TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
1613                    }
1614                }
1615            }
1616            if(pobj_SideWeb){
1617                if(hdr->hwndFrom==pobj_SideWeb->hTab&&hdr->code==TCN_SELCHANGE){
1618                    pobj_SideWeb->SelChangeEvent();
1619                }
1620            }
1621
1622            return 0;
1623        case WM_COMMAND:
1624            switch(LOWORD(wParam)){
1625                case IDM_NEW:
1626                    CreateNewFile();
1627                    return 0;
1628                case IDM_OPEN:
1629                    //"ファイルを指定してください"
1630                    if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return 0;
1631
1632                    OpenFileWithExtension(str);
1633                    return 0;
1634                case IDM_CLOSE:
1635                    hChild=GetWindow(hClient,GW_CHILD);
1636                    if(IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
1637                    return 0;
1638#ifndef THETEXT
1639                case IDM_PROJECT_OPEN:
1640                    //"プロジェクト ファイルを指定して下さい"
1641                    if(!GetFilePathDialog(hwnd,str,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE)) return 0;
1642
1643                    OpenProject(str);
1644                    return 0;
1645                case IDM_PROJECT_SAVE:
1646                    SaveProject();
1647                    return 0;
1648                case IDM_PROJECT_CLOSE:
1649                    CloseProject();
1650                    return 0;
1651                case IDM_PROJECT_FOLDER_OPEN:
1652                    ShellExecute(hwnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
1653                    return 0;
1654#endif
1655                case IDM_SAVE:
1656                    SaveDocument(GetWindow(hClient,GW_CHILD),NULL);
1657                    return 0;
1658                case IDM_NEWSAVE:
1659                    //"保存先のファイルを指定してください"
1660                    if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0;
1661
1662                    SaveDocument(GetWindow(hClient,GW_CHILD),str);
1663                    return 0;
1664                case IDM_CODE_SAVE:
1665                    //文字コードを指定して保存
1666                    DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),hOwner,(DLGPROC)nkfDlgCodeSave);
1667                    return 0;
1668                case IDM_ALLSAVE:
1669                    for(i=0;i<MAX_WNDNUM;i++){
1670                        if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
1671                    }
1672                    if(ProjectInfo.name[0]) SaveProject();
1673                    return 0;
1674
1675                case IDM_PAGESET:
1676                    //ページ設定
1677                    obj_Page.SetupDlg();
1678                    return 0;
1679
1680                case IDM_PREVIEW:
1681                    //プレビュー(Pro版のみ)
1682                    Preview();
1683                    return 0;
1684
1685                case IDM_PRINTOUT:
1686                    //印刷
1687                    Printout();
1688                    return 0;
1689
1690                case IDM_EXIT:
1691                    SendMessage(hwnd,WM_CLOSE,0,0);
1692                    return 0;
1693                case IDM_UNDO:
1694                case (WORD)IDM_ACCEL_UNDO:
1695                    hChild=GetWindow(hClient,GW_CHILD);
1696                    if(!hChild) return 0;
1697                    WndNum=GetWndNum(hChild);
1698                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
1699                        TextEdit_UndoCommand(WndNum);
1700                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1701                        Rad_UndoCommand(WndNum);
1702                    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
1703                        IconEdit_UndoCommand(WndNum);
1704                    return 0;
1705                case IDM_REDO:
1706                case (WORD)IDM_ACCEL_REDO:
1707                    hChild=GetWindow(hClient,GW_CHILD);
1708                    if(!hChild) return 0;
1709                    WndNum=GetWndNum(hChild);
1710                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
1711                        TextEdit_RedoCommand(WndNum);
1712                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1713                        Rad_RedoCommand(WndNum);
1714                    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
1715                        IconEdit_RedoCommand(WndNum);
1716                    return 0;
1717                case IDM_CUT:
1718                    hChild=GetWindow(hClient,GW_CHILD);
1719                    WndNum=GetWndNum(hChild);
1720                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1721                        hEdit=GetWindow(hChild,GW_CHILD);
1722
1723                        TextEdit_GetSel(WndNum,&CharRange);
1724
1725                        hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
1726                        pTemp=(char *)GlobalLock(hGlobal);
1727                        memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
1728                        pTemp[CharRange.cpMax-CharRange.cpMin]=0;
1729                        GlobalUnlock(hGlobal);
1730
1731                        //クリップボードに保存
1732                        OpenClipboard(hwnd);
1733                        EmptyClipboard();
1734                        SetClipboardData(CF_TEXT,hGlobal);
1735                        CloseClipboard();
1736
1737                        //選択文字列を消去
1738                        SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
1739                    }
1740                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1741                        i2=GetWndInfoNum(MdiInfo[WndNum].path);
1742
1743                        //クリップボードに格納するためのデータを用意する
1744                        ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
1745                        ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
1746                        hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
1747                        ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17;
1748                        ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10;
1749
1750                        OpenClipboard(hwnd);
1751                        EmptyClipboard();
1752                        SetClipboardData(dwRadClipboardID,hGlobal);
1753                        CloseClipboard();
1754
1755                        SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1756                    }
1757                    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1758                        //クリップボードに格納するためのデータを用意する
1759                        hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
1760                        if(hGlobal==0) return 0;
1761
1762                        OpenClipboard(hwnd);
1763                        EmptyClipboard();
1764                        SetClipboardData(CF_BITMAP,hGlobal);
1765                        CloseClipboard();
1766
1767                        DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
1768                        MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
1769
1770                        IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
1771                    }
1772                    return 0;
1773                case IDM_COPY:
1774                    hChild=GetWindow(hClient,GW_CHILD);
1775                    WndNum=GetWndNum(hChild);
1776                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1777                        hEdit=GetWindow(hChild,GW_CHILD);
1778
1779                        TextEdit_GetSel(WndNum,&CharRange);
1780
1781                        hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
1782                        pTemp=(char *)GlobalLock(hGlobal);
1783                        memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
1784                        pTemp[CharRange.cpMax-CharRange.cpMin]=0;
1785                        GlobalUnlock(hGlobal);
1786
1787                        //クリップボードに保存
1788                        OpenClipboard(hwnd);
1789                        EmptyClipboard();
1790                        SetClipboardData(CF_TEXT,hGlobal);
1791                        CloseClipboard();
1792                    }
1793                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1794                        i2=GetWndInfoNum(MdiInfo[WndNum].path);
1795
1796                        //クリップボードに格納するためのデータを用意する
1797                        hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
1798
1799                        OpenClipboard(hwnd);
1800                        EmptyClipboard();
1801                        SetClipboardData(dwRadClipboardID,hGlobal);
1802                        CloseClipboard();
1803                    }
1804                    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1805                        //クリップボードに格納するためのデータを用意する
1806                        hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
1807
1808                        OpenClipboard(hwnd);
1809                        EmptyClipboard();
1810                        SetClipboardData(CF_BITMAP,hGlobal);
1811                        CloseClipboard();
1812                    }
1813                    return 0;
1814                case IDM_PASTE:
1815                    hChild=GetWindow(hClient,GW_CHILD);
1816                    WndNum=GetWndNum(hChild);
1817                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1818                        hEdit=GetWindow(hChild,GW_CHILD);
1819
1820                        //クリップボードを開く
1821                        OpenClipboard(hwnd);
1822                        hGlobal=GetClipboardData(CF_TEXT);
1823                        if(!hGlobal){
1824                            CloseClipboard();
1825                            return 0;
1826                        }
1827
1828
1829                        if(pobj_nv->bPasteIndent){
1830                            //インデント整形
1831                            pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
1832                            GlobalUnlock(hGlobal);
1833                        }
1834                        else pTemp=(char *)GlobalLock(hGlobal);
1835
1836
1837                        //テキストエディタの文字列をリプレイス
1838                        TextEdit_ReplaceUpdateUndoData(WndNum,
1839                            pTemp,
1840                            1,
1841                            1);
1842
1843                        if(pobj_nv->bPasteIndent)
1844                            HeapDefaultFree(pTemp);
1845                        else
1846                            GlobalUnlock(hGlobal);
1847
1848                        //クリップボードを閉じる
1849                        CloseClipboard();
1850
1851
1852                        //キャレット位置までスクロールする
1853                        TextEdit_ScrollCaret(WndNum,0);
1854                        ResetCaretPos(WndNum);
1855                    }
1856                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1857                        OpenClipboard(hwnd);
1858                        hGlobal=GetClipboardData(dwRadClipboardID);
1859                        if(!hGlobal){
1860                            CloseClipboard();
1861                            return 0;
1862                        }
1863                        Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
1864                        CloseClipboard();
1865                    }
1866                    else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1867                        OpenClipboard(hwnd);
1868                        hGlobal=GetClipboardData(CF_BITMAP);
1869                        if(!hGlobal){
1870                            CloseClipboard();
1871                            return 0;
1872                        }
1873                        IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
1874                        CloseClipboard();
1875                    }
1876                    return 0;
1877                case IDM_DELETE:
1878                    hChild=GetWindow(hClient,GW_CHILD);
1879                    WndNum=GetWndNum(hChild);
1880                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1881                        hEdit=GetWindow(hChild,GW_CHILD);
1882                        TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
1883                    }
1884                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1885                        SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1886                    return 0;
1887                case IDM_ALLSELECT:
1888                    hChild=GetWindow(hClient,GW_CHILD);
1889                    WndNum=GetWndNum(hChild);
1890                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1891                        hEdit=GetWindow(hChild,GW_CHILD);
1892
1893                        MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
1894                        MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
1895
1896                        GetCaretPosFromBufferIndex(
1897                            MdiInfo[WndNum].pMdiTextEdit->buffer,
1898                            lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
1899                            &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
1900
1901                        InvalidateRect(hEdit,NULL,0);
1902
1903                        ResetState_EditMenu();
1904                    }
1905                    else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1906                        i2=GetWndInfoNum(MdiInfo[WndNum].path);
1907                        for(i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
1908                            MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
1909                        }
1910                        DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
1911                    }
1912                    return 0;
1913                case IDM_FIND:
1914                    DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),hOwner,(DLGPROC)DlgFind);
1915                    return 0;
1916                case IDM_PERMUTATION:
1917                    DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),hOwner,(DLGPROC)DlgPermutation);
1918                    return 0;
1919
1920
1921                ///////////////////////
1922                // 変換メニュー
1923                ///////////////////////
1924                case IDM_CONV_ALPHA_SMALL:
1925                case IDM_CONV_ALPHA_BIG:
1926                case IDM_CONV_HALF:
1927                case IDM_CONV_MULTI:
1928                case IDM_CONV_KATAKANA:
1929                case IDM_CONV_HIRAGANA:
1930                case IDM_CONV_SPACE:
1931                case IDM_CONV_TAB:
1932#ifdef THETEXT
1933                case IDM_CONV_HASRETURN:
1934                case IDM_CONV_QUOTE:
1935#else
1936                case IDM_CODEFORMAT:
1937#endif
1938                    TextEdit_Convert(LOWORD(wParam));
1939                    return 0;
1940
1941#ifdef THETEXT
1942                ///////////////////////
1943                // ツールメニュー
1944                ///////////////////////
1945                case IDM_STRING_COUNT:
1946                    DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,0);
1947                    return 0;
1948                case IDM_SEL_STRING_COUNT:
1949                    DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,1);
1950                    return 0;
1951#endif //THETEXT
1952
1953                case IDM_PROJECTVIEW:
1954                    if(pobj_nv->bClipProjectView){
1955                        if(IsWindowVisible(hProjectView)){
1956                            ShowWindow(hProjectView,SW_HIDE);
1957                            bChecked=0;
1958                        }
1959                        else{
1960                            ShowWindow(hProjectView,SW_SHOW);
1961                            bChecked=1;
1962                        }
1963                    }
1964                    else{
1965                        if(IsWindowVisible(hProjectView_ToolWindow)){
1966                            ShowWindow(hProjectView_ToolWindow,SW_HIDE);
1967                            bChecked=0;
1968                        }
1969                        else{
1970                            ShowWindow(hProjectView_ToolWindow,SW_SHOW);
1971                            ShowWindow(hProjectView,SW_SHOW);
1972                            bChecked=1;
1973                        }
1974                    }
1975                    pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked);
1976
1977                    //再配置
1978                    ResizeOwnerWnd();
1979
1980                    ShowWindow(hClient,SW_SHOW);
1981                    return 0;
1982                case IDM_PROJECT_OPTION:
1983                    DlgProjectOptionSetting(hwnd);
1984                    return 0;
1985                case IDM_TOPMOST:
1986                    if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
1987                        SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1988                        pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
1989                    }
1990                    else{
1991                        SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1992                        pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
1993                    }
1994                    return 0;
1995
1996#ifdef THETEXT
1997                case IDM_RIGHT_TURN:
1998                    pobj_nv->bRightTurn^=1;
1999                    ResetState_ViewMenu();
2000
2001                    //トップのウィンドウを再描画
2002                    RedrawAllWindow();
2003
2004                    return 0;
2005#endif
2006
2007                case IDM_SET:
2008                    DlgOptionSetting(hwnd);
2009                    return 0;
2010
2011#ifndef THETEXT
2012                case IDM_DEBUG:
2013                    if(pobj_Debugger->IsDebugging()){
2014                        pobj_Debugger->DebugContinue();
2015                        return 0;
2016                    }
2017
2018                    hChild=GetWindow(hClient,GW_CHILD);
2019                    if(ProjectInfo.name[0]){
2020                        //プロジェクトが開かれている場合
2021                        if(!SetProjectToRun()) return 0;
2022
2023                        //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
2024                        sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
2025                        sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
2026                        hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
2027                        DWORD dwAccessBytes;
2028                        WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
2029                        CloseHandle(hFile);
2030
2031                        //ソースファイル名をtemp2へ
2032                        ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2033
2034                        //出力ファイル名をtemp3へ
2035                        lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
2036                        GetFullPath(temp3,ProjectInfo.dir);
2037
2038                        if(IsNeedCompileForProject(1))
2039                            sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
2040                        else
2041                            sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
2042
2043                        //DLLオプション
2044                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2045
2046                        //Unicodeオプション
2047                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
2048
2049                        //ブレークポイントをセーブ
2050                        ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
2051                    }
2052                    else{
2053                        //単独ソースコード
2054                        if(!SetRunning(hChild)) return 0;
2055                        if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
2056                            sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2057                        else
2058                            sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2059
2060                        //ブレークポイントをセーブ
2061                        pobj_DBBreakPoint->SaveToTempFile();
2062                    }
2063
2064                    //コンパイルビューをクリップするかどうか
2065                    if(bClipCompileView){
2066                        lstrcat(temporary," /clip_compile_view");
2067
2068                        //コンパイラビューを閉じる
2069                        if(hCompileView==(HWND)-1) return 0;
2070                        if(hCompileView){
2071                            hChild=hCompileView;
2072                            hCompileView=(HWND)-1;
2073                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2074                        }
2075
2076                        //重複起動防止のため
2077                        hCompileView=(HWND)-1;
2078                    }
2079
2080                    //インクルードディレクトリ
2081                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2082                    lstrcat(temporary,temp2);
2083
2084                    CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
2085
2086                    return 0;
2087                case IDM_DEBUGCOMPILE:
2088                    hChild=GetWindow(hClient,GW_CHILD);
2089                    if(ProjectInfo.name[0]){
2090                        //プロジェクトが開かれている場合
2091                        if(!SetProjectToRun()) return 0;
2092
2093                        //ソースファイル名をtemp2へ
2094                        ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2095
2096                        //出力ファイル名をtemp3へ
2097                        lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
2098                        GetFullPath(temp3,ProjectInfo.dir);
2099
2100                        sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
2101
2102                        //DLLオプション
2103                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2104
2105                        //Unicodeオプション
2106                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
2107                    }
2108                    else{
2109                        //単独ソースコード
2110                        if(!SetRunning(hChild)) return 0;
2111                        sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2112                    }
2113
2114                    //コンパイルビューをクリップするかどうか
2115                    if(bClipCompileView){
2116                        lstrcat(temporary," /clip_compile_view");
2117
2118                        //コンパイラビューを閉じる
2119                        if(hCompileView==(HWND)-1) return 0;
2120                        if(hCompileView){
2121                            hChild=hCompileView;
2122                            hCompileView=(HWND)-1;
2123                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2124                        }
2125
2126                        //重複起動防止のため
2127                        hCompileView=(HWND)-1; 
2128                    }
2129
2130                    //インクルードディレクトリ
2131                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2132                    lstrcat(temporary,temp2);
2133
2134                    CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
2135
2136                    return 0;
2137                case IDM_ATTACH:
2138                    int idProcess;
2139                    DWORD dwPlatform;
2140                    idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
2141                    if(idProcess==0) return 0;
2142
2143                    sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
2144
2145                    //コンパイルビューをクリップするかどうか
2146                    if(bClipCompileView){
2147                        lstrcat(temporary," /clip_compile_view");
2148
2149                        //コンパイラビューを閉じる
2150                        if(hCompileView==(HWND)-1) return 0;
2151                        if(hCompileView){
2152                            hChild=hCompileView;
2153                            hCompileView=(HWND)-1;
2154                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2155                        }
2156
2157                        //重複起動防止のため
2158                        hCompileView=(HWND)-1;
2159                    }
2160
2161                    //インクルードディレクトリ
2162                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2163                    lstrcat(temporary,temp2);
2164
2165                    ActiveBasic::Common::Platform::EnumType platform;
2166                    if(dwPlatform==IMAGE_FILE_MACHINE_I386)
2167                    {
2168                        platform = ActiveBasic::Common::Platform::X86;
2169                    }
2170                    else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
2171                    {
2172                        platform = ActiveBasic::Common::Platform::X64;
2173                    }
2174                    else
2175                    {
2176                        throw;
2177                    }
2178
2179                    CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
2180
2181                    return 0;
2182                case IDM_RELEASECOMPILE:
2183                    hChild=GetWindow(hClient,GW_CHILD);
2184                    if(ProjectInfo.name[0]){
2185                        //プロジェクトが開かれている場合
2186                        if(!SetProjectToRun()) return 0;
2187
2188                        //ソースファイル名をtemp2へ
2189                        ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2190
2191                        //出力ファイル名をtemp3へ
2192                        lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
2193                        GetFullPath(temp3,ProjectInfo.dir);
2194
2195                        sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
2196
2197                        //DLLオプション
2198                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2199
2200                        //Unicodeオプション
2201                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
2202                    }
2203                    else{
2204                        //単独ソースコード
2205                        if(!SetRunning(hChild)) return 0;
2206                        sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2207                    }
2208
2209                    //コンパイルビューをクリップするかどうか
2210                    if(bClipCompileView){
2211                        lstrcat(temporary," /clip_compile_view");
2212
2213                        //コンパイラビューを閉じる
2214                        if(hCompileView==(HWND)-1) return 0;
2215                        if(hCompileView){
2216                            hChild=hCompileView;
2217                            hCompileView=(HWND)-1;
2218                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2219                        }
2220
2221                        //重複起動防止のため
2222                        hCompileView=(HWND)-1;
2223                    }
2224
2225                    //インクルードディレクトリ
2226                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2227                    lstrcat(temporary,temp2);
2228
2229                    CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
2230
2231                    return 0;
2232                case IDM_RELEASERUN:
2233                    hChild=GetWindow(hClient,GW_CHILD);
2234                    if(ProjectInfo.name[0]){
2235/*                      //プロジェクトが開かれている場合
2236                        if(!SetProjectToRun()) return 0;
2237
2238                        //必要であればリリースコンパイル
2239                        if(IsNeedCompileForProject(0))
2240                            SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2241
2242                        if(ProjectInfo.dwModuleType==MT_DLL){
2243                            lstrcpy(temporary,ProjectInfo.szExePath);
2244                        }
2245                        else{
2246                            lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2247                            GetFullPath(temporary,ProjectInfo.dir);
2248                        }
2249                    }
2250                    else{
2251/*                      //必要であればリリースコンパイル
2252                        if(!SetRunning(hChild)) return 0;
2253
2254                        if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
2255                            SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2256
2257                        //単独ソースコード
2258                        _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
2259                        lstrcat(temporary,temp2);
2260                        lstrcat(temporary,temp3);
2261                        lstrcat(temporary,".exe");
2262                    }
2263
2264                    //インクルードディレクトリ
2265                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2266                    lstrcat(temporary,temp2);
2267
2268                    ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
2269                    return 0;
2270
2271
2272                ////////////////////////
2273                // デバッグ コマンド
2274                ////////////////////////
2275
2276                case IDM_STEP_IN:
2277                    pobj_Debugger->StepIn();
2278                    break;
2279                case IDM_STEP_OVER:
2280                    pobj_Debugger->StepOver();
2281                    break;
2282                case IDM_STEP_CURSOR:
2283                    pobj_Debugger->StepToCursor();
2284                    break;
2285                case IDM_BREAKPOINT:
2286                    if(ProjectInfo.name[0]){
2287                        ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
2288                    }
2289                    else{
2290                        pobj_DBBreakPoint->Event_BreakPoint();
2291                    }
2292                    break;
2293                case IDM_DEBUG_STOP:
2294                    pobj_Debugger->DebugStop();
2295                    break;
2296                case IDM_DEBUG_PAUSE:
2297                    pobj_Debugger->DebugPause();
2298                    break;
2299
2300
2301                case IDM_COMMUNITY:
2302                    ShellExecute(hwnd,"open","iexplore.exe",
2303                        "http://www.activebasic.com/forum/",
2304                        NULL,SW_SHOWNORMAL);
2305                    return 0;
2306                case IDM_COMMU_SEARCH:
2307                    ShellExecute(hwnd,"open","iexplore.exe",
2308                        "http://www.activebasic.com/forum/search.php",
2309                        NULL,SW_SHOWNORMAL);
2310                    return 0;
2311                case IDM_COMMU_PM:
2312                    ShellExecute(hwnd,"open","iexplore.exe",
2313                        "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
2314                        NULL,SW_SHOWNORMAL);
2315                    return 0;
2316                case ID_COMMU_FORUM1:
2317                    ShellExecute(hwnd,"open","iexplore.exe",
2318                        "http://www.activebasic.com/forum/viewforum.php?f=1",
2319                        NULL,SW_SHOWNORMAL);
2320                    return 0;
2321                case ID_COMMU_FORUM2:
2322                    ShellExecute(hwnd,"open","iexplore.exe",
2323                        "http://www.activebasic.com/forum/viewforum.php?f=2",
2324                        NULL,SW_SHOWNORMAL);
2325                    return 0;
2326                case ID_COMMU_FORUM3:
2327                    ShellExecute(hwnd,"open","iexplore.exe",
2328                        "http://www.activebasic.com/forum/viewforum.php?f=5",
2329                        NULL,SW_SHOWNORMAL);
2330                    return 0;
2331                case ID_COMMU_FORUM4:
2332                    ShellExecute(hwnd,"open","iexplore.exe",
2333                        "http://www.activebasic.com/forum/viewforum.php?f=3",
2334                        NULL,SW_SHOWNORMAL);
2335                    return 0;
2336                case ID_COMMU_FORUM5:
2337                    ShellExecute(hwnd,"open","iexplore.exe",
2338                        "http://www.activebasic.com/forum/viewforum.php?f=6",
2339                        NULL,SW_SHOWNORMAL);
2340                    return 0;
2341                case ID_COMMU_FORUM6:
2342                    ShellExecute(hwnd,"open","iexplore.exe",
2343                        "http://www.activebasic.com/forum/viewforum.php?f=8",
2344                        NULL,SW_SHOWNORMAL);
2345                    return 0;
2346                case ID_COMMU_FORUM7:
2347                    ShellExecute(hwnd,"open","iexplore.exe",
2348                        "http://www.activebasic.com/forum/viewforum.php?f=4",
2349                        NULL,SW_SHOWNORMAL);
2350                    return 0;
2351                case ID_COMMU_FORUM8:
2352                    ShellExecute(hwnd,"open","iexplore.exe",
2353                        "http://www.activebasic.com/forum/viewforum.php?f=7",
2354                        NULL,SW_SHOWNORMAL);
2355                    return 0;
2356#endif //THETEXT
2357
2358
2359                case IDM_TOPIC:
2360#ifdef THETEXT
2361                    sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
2362                    ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
2363#else
2364                    sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
2365                    HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
2366#endif
2367                    return 0;
2368
2369#ifdef THETEXT
2370                case IDM_DSHOMEPAGE:
2371                    ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
2372                    return 0;
2373#else
2374                case IDM_AB_WEBSITE:
2375                    ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
2376                    return 0;
2377                case IDM_ACTBDL:
2378                    ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
2379                    return 0;
2380#endif
2381
2382                case IDM_ABOUT:
2383                    DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
2384                    return 0;
2385
2386                case IDM_WEB_SEARCH:
2387                    hChild=GetWindow(hClient,GW_CHILD);
2388                    WndNum=GetWndNum(hChild);
2389                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2390                        extern HWND hWebSearchCombo;
2391                        SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
2392                    }
2393                    return 0;
2394
2395
2396
2397                //////////////////////////////////////////////////////
2398                // レバーコントロールのサブメニューコマンド(レバー追加)
2399                //////////////////////////////////////////////////////
2400
2401                case IDM_DOCSELECTBAND:
2402                    pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
2403                    return 0;
2404                case IDM_STANDARDBAND:
2405                    pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
2406                    return 0;
2407#ifndef THETEXT
2408                case IDM_RELEASEBAND:
2409                    pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
2410                    return 0;
2411                case IDM_DEBUGBAND:
2412                    pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
2413                    return 0;
2414                case IDM_SELECTCOMPILERBAND:
2415                    pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
2416                    return 0;
2417#endif
2418                case IDM_BANDMENU_WEB_SEARCH:
2419                    pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
2420                    return 0;
2421                case IDM_NOGRIPPER:
2422                    if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
2423                    else pobj_nv->bNoGripper=1;
2424
2425                    //レバーコントロールを再生成
2426                    pobj_Rebar->ResetRebar();
2427
2428                    //メニュー状態を設定
2429                    ResetState_DocMenu();
2430                    return 0;
2431                case IDM_RESET_REBAR:
2432                    //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
2433                    if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
2434
2435                    //レバーコントロールを再生成
2436                    pobj_Rebar->ResetInitRebar();
2437
2438                    //メニュー状態を設定
2439                    ResetState_DocMenu();
2440                    return 0;
2441
2442
2443
2444                ////////////////////////////////////////////////////
2445                // メイン タブ コントロールのサブメニューコマンド
2446                ////////////////////////////////////////////////////
2447
2448                case IDM_ALLCLOSE_OMIT_MYSELF:
2449                    //このウィンドウ以外をすべて閉じる(&A)
2450                    hChild=GetWindow(hClient,GW_CHILD);
2451                    WndNum=GetWndNum(hChild);
2452                    for(i=0;i<MAX_WNDNUM;i++){
2453                        if(i==WndNum) continue;
2454                        if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
2455                    }
2456                    return 0;
2457
2458                case IDM_PATH_COPY:
2459                    hChild=GetWindow(hClient,GW_CHILD);
2460                    WndNum=GetWndNum(hChild);
2461
2462                    //絶対パスをコピー
2463                    hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
2464                    pTemp=(char *)GlobalLock(hGlobal);
2465                    lstrcpy(pTemp,MdiInfo[WndNum].path);
2466                    GlobalUnlock(hGlobal);
2467
2468                    //クリップボードに保存
2469                    OpenClipboard(hwnd);
2470                    EmptyClipboard();
2471                    SetClipboardData(CF_TEXT,hGlobal);
2472                    CloseClipboard();
2473                    return 0;
2474
2475                case IDM_FOLDER_OPEN:
2476                    hChild=GetWindow(hClient,GW_CHILD);
2477                    WndNum=GetWndNum(hChild);
2478
2479                    _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
2480                    lstrcat(temporary,temp2);
2481
2482                    ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
2483                    return 0;
2484
2485                case IDM_DELETE_FILE:
2486                    hChild=GetWindow(hClient,GW_CHILD);
2487                    WndNum=GetWndNum(hChild);
2488
2489                    _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
2490                    lstrcat(temporary,temp2);
2491
2492                    lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
2493                    if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
2494
2495                    //ゴミ箱へ
2496                    SHFILEOPSTRUCT fo;
2497                    fo.hwnd=hwnd;
2498                    fo.wFunc=FO_DELETE;
2499                    fo.pFrom =MdiInfo[WndNum].path;
2500                    fo.pTo="\0";
2501                    fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
2502                    SHFileOperation(&fo);
2503
2504                    //閉じる
2505                    MdiInfo[WndNum].pMdiTextEdit->UnModify();
2506                    SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
2507
2508                    return 0;
2509
2510                case IDM_USER_COLOR:
2511                    {
2512                        CHOOSECOLOR cc;
2513                        COLORREF CusColors[16]={
2514                            RGB(255,255,255),
2515                            RGB(0,0,0),
2516                            RGB(128,128,128),
2517                            RGB(192,192,192),
2518                            RGB(128,0,0),
2519                            RGB(255,0,0),
2520                            RGB(128,128,0),
2521                            RGB(255,255,0),
2522                            RGB(0,128,0),
2523                            RGB(0,255,0),
2524                            RGB(0,128,128),
2525                            RGB(0,255,255),
2526                            RGB(0,0,128),
2527                            RGB(0,0,255),
2528                            RGB(128,0,128),
2529                            RGB(255,0,255)};
2530                        cc.lStructSize=sizeof(CHOOSECOLOR);
2531                        cc.hwndOwner=hwnd;
2532                        cc.rgbResult=colorUser;
2533                        cc.lpCustColors=CusColors;
2534                        cc.Flags=CC_RGBINIT|CC_FULLOPEN;
2535                        if(!ChooseColor(&cc)){
2536                            return 0;
2537                        }
2538                        colorUser=cc.rgbResult;
2539                    }
2540                case IDM_GRAY:
2541                case IDM_WHITE:
2542                case IDM_RED:
2543                case IDM_GREEN:
2544                case IDM_BLUE:
2545                case IDM_YELLOW:
2546                    hChild=GetWindow(hClient,GW_CHILD);
2547                    WndNum=GetWndNum(hChild);
2548
2549                    TC_ITEM tcItem;
2550                    tcItem.mask=TCIF_PARAM;
2551                    if(LOWORD(wParam)==IDM_GRAY)    tcItem.lParam=TABCOLOR_GRAY;
2552                    if(LOWORD(wParam)==IDM_WHITE)   tcItem.lParam=TABCOLOR_WHITE;
2553                    if(LOWORD(wParam)==IDM_RED)     tcItem.lParam=TABCOLOR_RED;
2554                    if(LOWORD(wParam)==IDM_GREEN)   tcItem.lParam=TABCOLOR_GREEN;
2555                    if(LOWORD(wParam)==IDM_BLUE)    tcItem.lParam=TABCOLOR_BLUE;
2556                    if(LOWORD(wParam)==IDM_YELLOW)  tcItem.lParam=TABCOLOR_YELLOW;
2557                    if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
2558                    TabCtrl_SetItem(pobj_MainTab->hTab,
2559                        TabCtrl_GetCurSel(pobj_MainTab->hTab),
2560                        &tcItem);
2561                    InvalidateRect(pobj_MainTab->hTab,NULL,0);
2562                    return 0;
2563
2564
2565
2566                //////////////////////////////////
2567                // SideWeb
2568                //////////////////////////////////
2569
2570                case IDC_CLIP:
2571                    pobj_SideWeb->bShow=0;
2572                    ResizeOwnerWnd();
2573                    return 0;
2574            }
2575            break;
2576        case WM_DROPFILES:
2577            hDrop=(HDROP)wParam;
2578
2579            i2=DragQueryFile(hDrop,-1,0,0);
2580            for(i=0;i<i2;i++){
2581                DragQueryFile(hDrop,i,str,MAX_PATH);
2582                OpenFileWithExtension(str);
2583            }
2584            DragFinish(hDrop);
2585            return 0;
2586        case WM_SHOWERROR:
2587            //エラー部分を反転表示
2588            DWORD AccBytes;
2589            HANDLE fh;
2590            sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
2591            fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2592            ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
2593            CloseHandle(fh);
2594            temporary[AccBytes]=0;
2595            hChild=GetWindow(hClient,GW_CHILD);
2596            while(hChild){
2597                WndNum=GetWndNum(hChild);
2598                if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2599                    if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
2600                }
2601                hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2602            }
2603            if(!hChild){
2604                hChild=OpenFileWithExtension(temporary);
2605                WndNum=GetWndNum(hChild);
2606            }
2607
2608            if(WndNum==-1) return 0;
2609
2610            //ウィンドウを最前面に表示
2611            BringWindowToTop(hChild);
2612            UpdateWindow(hChild);
2613
2614            pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
2615
2616            //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
2617            for(i=0,i2=0;;i++){
2618                if(i2>=(int)wParam) break;
2619                if(pTemp[i]=='\0') break;
2620                if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
2621                    i++;
2622                    i2++;
2623                }
2624            }
2625            pos.x=i;
2626
2627            //行の終端インデックスを取得
2628            for(;;i++){
2629                if(pTemp[i]=='\0') break;
2630                if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
2631            }
2632            pos.y=i;
2633
2634            //行を選択する
2635            TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2636
2637            return 0;
2638
2639#ifndef THETEXT
2640        case WM_SETCOMPILEVIEW:
2641            //コンパイラウィンドウ(埋め込み型)が表示されたとき
2642            hCompileView=(HWND)lParam;
2643            ResizeOwnerWnd();
2644            return 0;
2645        case WM_DESTROYCOMPILEVIEW:
2646            //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2647            if((int)hCompileView==-1){
2648                //すぐに次のコンパイラウィンドウが起動するとき
2649                hCompileView=0;
2650            }
2651            else{
2652                //完全にコンパイラウィンドウを閉じたときはリサイズ
2653                hCompileView=0;
2654               
2655                ResizeOwnerWnd();
2656            }
2657            return 0;
2658
2659        case WM_SETDEBUGGERBASE:
2660            //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2661            pobj_Debugger->begin();
2662
2663            //BasicCompiler.exeの強制終了を考慮
2664            SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2665
2666            return 0;
2667        case WM_DESTROYDEBUGGERBASE:
2668            //BasicCompiler.exeの強制終了を考慮
2669            KillTimer(hOwner,ID_DEBUGSAFTY);
2670
2671            //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2672            pobj_Debugger->end();
2673
2674            return 0;
2675
2676        case WM_SETDEBUGGERVIEW:
2677            //デバッガウィンドウ(埋め込み型)が表示されたとき
2678            pobj_Debugger->watch_start((HWND)lParam);
2679            ResizeOwnerWnd();
2680            return 0;
2681        case WM_DESTROYDEBUGGERVIEW:
2682            //デバッガウィンドウ(埋め込み型)が破棄されたとき
2683            pobj_Debugger->watch_quit();
2684            ResizeOwnerWnd();
2685            return 0;
2686#endif
2687
2688        case WM_SIZE:
2689            ResizeOwnerWnd();
2690            return 0;
2691
2692
2693        case WM_MOUSEMOVE:
2694            static DWORD dwDragLever;
2695            static POINT PrevMousePos;
2696            static int start;
2697
2698            pos.x=(long)(short)LOWORD(lParam);
2699            pos.y=(long)(short)HIWORD(lParam);
2700            ClientToScreen(hwnd,&pos);
2701
2702            if(dwDragLever){
2703                GetClientRect(hwnd,&rect);
2704
2705                if(dwDragLever==1){
2706                    //プロジェクトビューをリサイズ中
2707                    pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2708                    if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2709                    if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2710                }
2711                else if(dwDragLever==2){
2712                    //デバッガビューをリサイズ中
2713                    pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2714                    if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2715                    if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2716                        pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2717                }
2718                else if(dwDragLever==3){
2719                    //コンパイラビューをリサイズ中
2720                    pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2721                    if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2722                    if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2723                        pobj_nv->height_ClipCompileView=rect.bottom-100;
2724                }
2725                else if(dwDragLever==4){
2726                    //SideWebをリサイズ中
2727                    pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2728                    if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2729                    if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2730                }
2731
2732                ResizeOwnerWnd();
2733                UpdateWindow(hwnd);
2734            }
2735            if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2736                //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2737                GetWindowRect(hProjectView,&rect);
2738                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2739                    rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2740                    SetCursor(LoadCursor(0,IDC_SIZEWE));
2741                }
2742            }
2743#ifndef THETEXT
2744            if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2745                //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2746                GetWindowRect(pobj_Debugger->hwnd,&rect);
2747                if(rect.left<=pos.x&&pos.x<=rect.right&&
2748                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2749                    SetCursor(LoadCursor(0,IDC_SIZENS));
2750                }
2751            }
2752            if(bClipCompileView&&IsWindowVisible(hCompileView)){
2753                //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2754                GetWindowRect(hCompileView,&rect);
2755                if(rect.left<=pos.x&&pos.x<=rect.right&&
2756                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2757                    SetCursor(LoadCursor(0,IDC_SIZENS));
2758                }
2759            }
2760#endif
2761            if( pobj_SideWeb )
2762            {
2763                if(pobj_SideWeb->bShow){
2764                    //SideWebとMDIクライアントの境目のサイズ変更ライン
2765                    pobj_SideWeb->GetRect(&rect);
2766                    ClientToScreen(hwnd,&rect);
2767                    if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2768                        rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2769                        SetCursor(LoadCursor(0,IDC_SIZEWE));
2770                    }
2771                }
2772            }
2773            return 0;
2774        case WM_LBUTTONDOWN:
2775            pos.x=LOWORD(lParam);
2776            pos.y=HIWORD(lParam);
2777            ClientToScreen(hwnd,&pos);
2778
2779            if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2780                //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2781                GetWindowRect(hProjectView,&rect);
2782                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2783                    rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2784                    SetCursor(LoadCursor(0,IDC_SIZEWE));
2785
2786                    dwDragLever=1;
2787                    SetCapture(hwnd);
2788
2789                    PrevMousePos=pos;
2790                    start=pobj_nv->width_ClipProjectView;
2791                }
2792            }
2793#ifndef THETEXT
2794            if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2795                //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2796                GetWindowRect(pobj_Debugger->hwnd,&rect);
2797                if(rect.left<=pos.x&&pos.x<=rect.right&&
2798                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2799                    SetCursor(LoadCursor(0,IDC_SIZENS));
2800
2801                    dwDragLever=2;
2802                    SetCapture(hwnd);
2803
2804                    PrevMousePos=pos;
2805                    start=pobj_nv->height_ClipDebuggerView;
2806                }
2807            }
2808            if(bClipCompileView&&IsWindowVisible(hCompileView)){
2809                //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2810                GetWindowRect(hCompileView,&rect);
2811                if(rect.left<=pos.x&&pos.x<=rect.right&&
2812                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2813                    SetCursor(LoadCursor(0,IDC_SIZENS));
2814
2815                    dwDragLever=3;
2816                    SetCapture(hwnd);
2817
2818                    PrevMousePos=pos;
2819                    start=pobj_nv->height_ClipCompileView;
2820                }
2821            }
2822#endif
2823            if(pobj_SideWeb->bShow){
2824                //SideWebとMDIクライアントの境目のサイズ変更ライン
2825                pobj_SideWeb->GetRect(&rect);
2826                ClientToScreen(hwnd,&rect);
2827                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2828                    rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2829                    SetCursor(LoadCursor(0,IDC_SIZENS));
2830
2831                    dwDragLever=4;
2832                    SetCapture(hwnd);
2833
2834                    PrevMousePos=pos;
2835                    start=pobj_nv->width_WebSearchView;
2836                }
2837            }
2838            return 0;
2839        case WM_LBUTTONUP:
2840            if(dwDragLever){
2841                dwDragLever=0;
2842                ReleaseCapture();
2843            }
2844            return 0;
2845
2846
2847        case WM_SYSCOMMAND:
2848            //ウィンドウの最小化前にウィンドウ位置を保存
2849            if(wParam==SC_MINIMIZE){
2850                if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2851                else if(!IsIconic(hwnd)){
2852                    pobj_nv->bWindowMax=0;
2853                    GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2854                }
2855            }
2856            break;  //処理をDefFrameProcへ
2857        case WM_QUERYENDSESSION:
2858        case WM_CLOSE:
2859            extern BOOL bSearchingClasses;
2860            if(bSearchingClasses){
2861                pobj_ClassTreeView->bCloseSwitch=1;
2862                return 0;
2863            }
2864
2865            //コンパイラビューを閉じる
2866            if(hCompileView)
2867                SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2868
2869            //次回起動時にMDIウィンドウを最大化させるかを判定
2870            hChild=GetWindow(hClient,GW_CHILD);
2871            pobj_nv->bMDIZoomed=IsZoomed(hChild);
2872
2873            //プロジェクトを閉じる
2874            if(ProjectInfo.name[0]){
2875                if(!CloseProject()) return 0;
2876            }
2877
2878            //MDIウィンドウの保存確認
2879            hChild=GetWindow(hClient,GW_CHILD);
2880            while(hChild){
2881                i=GetWndNum(hChild);
2882                if(!DocumentModifyCheck(hChild)) return 0;
2883                hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2884            }
2885
2886
2887            KillTimer(hwnd,ID_TIMER_BACKUP);
2888
2889
2890            //ProjectViewの位置を保存、ProjectViewを破棄
2891            GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2892            DestroyWindow(hProjectView);
2893            DestroyWindow(hProjectView_ToolWindow);
2894
2895            //Rebarの位置を保存、Rebarを破棄
2896            delete pobj_Rebar;
2897            pobj_Rebar=0;
2898
2899            //タブコントロールを破棄
2900            delete pobj_MainTab;
2901            pobj_MainTab=0;
2902
2903            //SideWebを破棄
2904            delete pobj_SideWeb;
2905            pobj_SideWeb=0;
2906
2907            //メインウィンドウの最大化有無、座標を保存
2908            if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2909            else if(!IsIconic(hwnd)){
2910                pobj_nv->bWindowMax=0;
2911                GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2912            }
2913
2914            hChild=GetWindow(hClient,GW_CHILD);
2915            while(hChild){
2916                CloseDocWindow(GetWndNum(hChild));
2917                DestroyWindow(hChild);
2918                hChild=GetWindow(hClient,GW_CHILD);
2919            }
2920
2921            EndProjectEditor();     //ProjectEditorの情報を保存
2922
2923            //エディタ用フォントを破棄
2924            extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2925            if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2926            if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2927
2928            DestroyWindow(hwnd);
2929            return 0;
2930
2931        case WM_DESTROY:
2932            PostQuitMessage(0);
2933            return 0;
2934    }
2935    return DefFrameProc(hwnd,hClient,message,wParam,lParam);
2936}
2937
2938int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2939    WNDCLASSEX wcl;
2940
2941    wcl.cbSize=sizeof(WNDCLASSEX);
2942    wcl.hInstance=hInst;
2943    wcl.lpszClassName=lpClassName;
2944    wcl.lpfnWndProc=WndProc;
2945
2946    if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2947    else wcl.style=0;
2948
2949    wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2950    wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2951
2952    if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2953    else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2954
2955    wcl.lpszMenuName=NULL;
2956    wcl.cbClsExtra=0;
2957    wcl.cbWndExtra=0;
2958    wcl.hbrBackground=hBackBrush;
2959
2960    return RegisterClassEx(&wcl);
2961}
2962int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2963    int i,i2,IsStr;
2964    char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2965    MSG msg;
2966    HACCEL hAccel;
2967
2968    hInst=hThisInst;
2969    if(!SetupProjectEditor()) return 0;
2970
2971    HBRUSH hGrayBrush_LineNumber;
2972    hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2973
2974    if(!RegWndClass(WindowFunc,"ProjectEditor",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2975    if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2976    if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2977    if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2978    if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2979    if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2980    if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2981    if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2982    if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2983    if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2984    if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2985    if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2986    if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2987    if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2988    if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2989    if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2990    if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2991
2992    //Web検索用のウィンドウクラス
2993    if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2994    if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2995    if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2996
2997    //ルーラーのウィンドウクラス
2998    if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2999
3000    //SideWebのウィンドウクラス
3001    if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
3002
3003
3004
3005    hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
3006
3007    //メインウィンドウ
3008    RECT *prc;
3009    prc=&pobj_nv->StartupWindowRect;
3010    hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditor",APPLICATION_NAME,
3011        WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
3012        prc->left, prc->top,
3013        prc->right-prc->left, prc->bottom-prc->top,
3014        HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
3015
3016    SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
3017    SetClipboardViewer(hOwner);
3018
3019    if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
3020    else ShowWindow(hOwner,ShowCmd);
3021    UpdateWindow(hOwner);
3022
3023    int open_sw=0;
3024    if(lstrlen(lpCmdLine)>0){
3025        lstrcpy(dummy,lpCmdLine);
3026        for(i=0,i2=0,IsStr=0;;i++,i2++){
3027            if(dummy[i]=='\"'){
3028                if(IsStr==0) IsStr=1;
3029                else IsStr=0;
3030                i++;
3031            }
3032            if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
3033                str[i2]=0;
3034                if(!(strstr(str,":")||strstr(str,"\\\\"))){
3035                    lstrcpy(str2,str);
3036                    GetCurrentDirectory(MAX_PATH,str);
3037                    lstrcat(str,"\\");
3038                    lstrcat(str,str2);
3039                }
3040                ShortPathToLongPath(str,str2);
3041                OpenFileWithExtension(str2);
3042                open_sw=1;
3043                if(dummy[i]=='\0') break;
3044                i2=-1;
3045                continue;
3046            }
3047            str[i2]=dummy[i];
3048        }
3049    }
3050
3051    BOOL bRestore=0;
3052
3053
3054    {
3055        //自動バックアップ及び復元機能
3056
3057        //必要であれば復元
3058        bRestore=restore();
3059    }
3060
3061
3062#ifdef THETEXT
3063    if(open_sw==0&&bRestore==0){
3064        //ファイルが開かれなかったとき
3065        NewTextEditWindow(NULL,WNDTYPE_TEXT);
3066    }
3067#endif
3068
3069
3070    while(GetMessage(&msg,NULL,0,0)){
3071
3072        if(!TranslateAccelerator(hOwner,hAccel,&msg)){
3073            if(ProjectInfo.name[0]){
3074                for(i=0,i2=0;i<MAX_WNDNUM;i++){
3075                    if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
3076                        if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
3077                    }
3078                }
3079                if(i2==0){
3080                    if(!TranslateMDISysAccel(hClient,&msg)){
3081                        TranslateMessage(&msg);
3082                        DispatchMessage(&msg);
3083                    }
3084                }
3085            }
3086            else{
3087                if(!TranslateMDISysAccel(hClient,&msg)){
3088                    TranslateMessage(&msg);
3089                    DispatchMessage(&msg);
3090                }
3091            }
3092        }
3093    }
3094
3095    DeleteObject(hGrayBrush_LineNumber);
3096
3097#if defined HeapAlloc
3098    CheckHeapCheck();
3099#endif
3100
3101    return msg.wParam;
3102}
Note: See TracBrowser for help on using the repository browser.