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

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

構成管理を変更中・・・(いったんコミット)

File size: 91.1 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 char *appPath, const char *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                    sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
2085
2086                    CreateProcessWithStdHandle( str, temporary );
2087
2088                    return 0;
2089                case IDM_DEBUGCOMPILE:
2090                    hChild=GetWindow(hClient,GW_CHILD);
2091                    if(ProjectInfo.name[0]){
2092                        //プロジェクトが開かれている場合
2093                        if(!SetProjectToRun()) return 0;
2094
2095                        //ソースファイル名をtemp2へ
2096                        ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2097
2098                        //出力ファイル名をtemp3へ
2099                        lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
2100                        GetFullPath(temp3,ProjectInfo.dir);
2101
2102                        sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
2103
2104                        //DLLオプション
2105                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2106
2107                        //Unicodeオプション
2108                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
2109                    }
2110                    else{
2111                        //単独ソースコード
2112                        if(!SetRunning(hChild)) return 0;
2113                        sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2114                    }
2115
2116                    //コンパイルビューをクリップするかどうか
2117                    if(bClipCompileView){
2118                        lstrcat(temporary," /clip_compile_view");
2119
2120                        //コンパイラビューを閉じる
2121                        if(hCompileView==(HWND)-1) return 0;
2122                        if(hCompileView){
2123                            hChild=hCompileView;
2124                            hCompileView=(HWND)-1;
2125                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2126                        }
2127
2128                        //重複起動防止のため
2129                        hCompileView=(HWND)-1; 
2130                    }
2131
2132                    //インクルードディレクトリ
2133                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2134                    lstrcat(temporary,temp2);
2135
2136                    sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
2137
2138                    CreateProcessWithStdHandle( str, temporary );
2139
2140                    return 0;
2141                case IDM_ATTACH:
2142                    int idProcess;
2143                    DWORD dwPlatform;
2144                    idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
2145                    if(idProcess==0) return 0;
2146
2147                    sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
2148
2149                    //コンパイルビューをクリップするかどうか
2150                    if(bClipCompileView){
2151                        lstrcat(temporary," /clip_compile_view");
2152
2153                        //コンパイラビューを閉じる
2154                        if(hCompileView==(HWND)-1) return 0;
2155                        if(hCompileView){
2156                            hChild=hCompileView;
2157                            hCompileView=(HWND)-1;
2158                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2159                        }
2160
2161                        //重複起動防止のため
2162                        hCompileView=(HWND)-1;
2163                    }
2164
2165                    //インクルードディレクトリ
2166                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2167                    lstrcat(temporary,temp2);
2168
2169                    if(dwPlatform==IMAGE_FILE_MACHINE_I386)
2170                        sprintf(str,"%s%s",pj_editor_Dir,WIN32_COMPILER_NAME);
2171                    else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
2172                        sprintf(str,"%s%s",pj_editor_Dir,WIN64_COMPILER_NAME);
2173
2174                    CreateProcessWithStdHandle( str, temporary );
2175
2176                    return 0;
2177                case IDM_RELEASECOMPILE:
2178                    hChild=GetWindow(hClient,GW_CHILD);
2179                    if(ProjectInfo.name[0]){
2180                        //プロジェクトが開かれている場合
2181                        if(!SetProjectToRun()) return 0;
2182
2183                        //ソースファイル名をtemp2へ
2184                        ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2185
2186                        //出力ファイル名をtemp3へ
2187                        lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
2188                        GetFullPath(temp3,ProjectInfo.dir);
2189
2190                        sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
2191
2192                        //DLLオプション
2193                        if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2194
2195                        //Unicodeオプション
2196                        if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
2197                    }
2198                    else{
2199                        //単独ソースコード
2200                        if(!SetRunning(hChild)) return 0;
2201                        sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2202                    }
2203
2204                    //コンパイルビューをクリップするかどうか
2205                    if(bClipCompileView){
2206                        lstrcat(temporary," /clip_compile_view");
2207
2208                        //コンパイラビューを閉じる
2209                        if(hCompileView==(HWND)-1) return 0;
2210                        if(hCompileView){
2211                            hChild=hCompileView;
2212                            hCompileView=(HWND)-1;
2213                            SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2214                        }
2215
2216                        //重複起動防止のため
2217                        hCompileView=(HWND)-1;
2218                    }
2219
2220                    //インクルードディレクトリ
2221                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2222                    lstrcat(temporary,temp2);
2223
2224                    sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
2225
2226                    CreateProcessWithStdHandle( str, temporary );
2227
2228                    return 0;
2229                case IDM_RELEASERUN:
2230                    hChild=GetWindow(hClient,GW_CHILD);
2231                    if(ProjectInfo.name[0]){
2232/*                      //プロジェクトが開かれている場合
2233                        if(!SetProjectToRun()) return 0;
2234
2235                        //必要であればリリースコンパイル
2236                        if(IsNeedCompileForProject(0))
2237                            SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2238
2239                        if(ProjectInfo.dwModuleType==MT_DLL){
2240                            lstrcpy(temporary,ProjectInfo.szExePath);
2241                        }
2242                        else{
2243                            lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2244                            GetFullPath(temporary,ProjectInfo.dir);
2245                        }
2246                    }
2247                    else{
2248/*                      //必要であればリリースコンパイル
2249                        if(!SetRunning(hChild)) return 0;
2250
2251                        if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
2252                            SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2253
2254                        //単独ソースコード
2255                        _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
2256                        lstrcat(temporary,temp2);
2257                        lstrcat(temporary,temp3);
2258                        lstrcat(temporary,".exe");
2259                    }
2260
2261                    //インクルードディレクトリ
2262                    sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2263                    lstrcat(temporary,temp2);
2264
2265                    ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
2266                    return 0;
2267
2268
2269                ////////////////////////
2270                // デバッグ コマンド
2271                ////////////////////////
2272
2273                case IDM_STEP_IN:
2274                    pobj_Debugger->StepIn();
2275                    break;
2276                case IDM_STEP_OVER:
2277                    pobj_Debugger->StepOver();
2278                    break;
2279                case IDM_STEP_CURSOR:
2280                    pobj_Debugger->StepToCursor();
2281                    break;
2282                case IDM_BREAKPOINT:
2283                    if(ProjectInfo.name[0]){
2284                        ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
2285                    }
2286                    else{
2287                        pobj_DBBreakPoint->Event_BreakPoint();
2288                    }
2289                    break;
2290                case IDM_DEBUG_STOP:
2291                    pobj_Debugger->DebugStop();
2292                    break;
2293                case IDM_DEBUG_PAUSE:
2294                    pobj_Debugger->DebugPause();
2295                    break;
2296
2297
2298                case IDM_COMMUNITY:
2299                    ShellExecute(hwnd,"open","iexplore.exe",
2300                        "http://www.activebasic.com/forum/",
2301                        NULL,SW_SHOWNORMAL);
2302                    return 0;
2303                case IDM_COMMU_SEARCH:
2304                    ShellExecute(hwnd,"open","iexplore.exe",
2305                        "http://www.activebasic.com/forum/search.php",
2306                        NULL,SW_SHOWNORMAL);
2307                    return 0;
2308                case IDM_COMMU_PM:
2309                    ShellExecute(hwnd,"open","iexplore.exe",
2310                        "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
2311                        NULL,SW_SHOWNORMAL);
2312                    return 0;
2313                case ID_COMMU_FORUM1:
2314                    ShellExecute(hwnd,"open","iexplore.exe",
2315                        "http://www.activebasic.com/forum/viewforum.php?f=1",
2316                        NULL,SW_SHOWNORMAL);
2317                    return 0;
2318                case ID_COMMU_FORUM2:
2319                    ShellExecute(hwnd,"open","iexplore.exe",
2320                        "http://www.activebasic.com/forum/viewforum.php?f=2",
2321                        NULL,SW_SHOWNORMAL);
2322                    return 0;
2323                case ID_COMMU_FORUM3:
2324                    ShellExecute(hwnd,"open","iexplore.exe",
2325                        "http://www.activebasic.com/forum/viewforum.php?f=5",
2326                        NULL,SW_SHOWNORMAL);
2327                    return 0;
2328                case ID_COMMU_FORUM4:
2329                    ShellExecute(hwnd,"open","iexplore.exe",
2330                        "http://www.activebasic.com/forum/viewforum.php?f=3",
2331                        NULL,SW_SHOWNORMAL);
2332                    return 0;
2333                case ID_COMMU_FORUM5:
2334                    ShellExecute(hwnd,"open","iexplore.exe",
2335                        "http://www.activebasic.com/forum/viewforum.php?f=6",
2336                        NULL,SW_SHOWNORMAL);
2337                    return 0;
2338                case ID_COMMU_FORUM6:
2339                    ShellExecute(hwnd,"open","iexplore.exe",
2340                        "http://www.activebasic.com/forum/viewforum.php?f=8",
2341                        NULL,SW_SHOWNORMAL);
2342                    return 0;
2343                case ID_COMMU_FORUM7:
2344                    ShellExecute(hwnd,"open","iexplore.exe",
2345                        "http://www.activebasic.com/forum/viewforum.php?f=4",
2346                        NULL,SW_SHOWNORMAL);
2347                    return 0;
2348                case ID_COMMU_FORUM8:
2349                    ShellExecute(hwnd,"open","iexplore.exe",
2350                        "http://www.activebasic.com/forum/viewforum.php?f=7",
2351                        NULL,SW_SHOWNORMAL);
2352                    return 0;
2353#endif //THETEXT
2354
2355
2356                case IDM_TOPIC:
2357#ifdef THETEXT
2358                    sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
2359                    ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
2360#else
2361                    sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
2362                    HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
2363#endif
2364                    return 0;
2365
2366#ifdef THETEXT
2367                case IDM_DSHOMEPAGE:
2368                    ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
2369                    return 0;
2370#else
2371                case IDM_AB_WEBSITE:
2372                    ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
2373                    return 0;
2374                case IDM_ACTBDL:
2375                    ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
2376                    return 0;
2377#endif
2378
2379                case IDM_ABOUT:
2380                    DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
2381                    return 0;
2382
2383                case IDM_WEB_SEARCH:
2384                    hChild=GetWindow(hClient,GW_CHILD);
2385                    WndNum=GetWndNum(hChild);
2386                    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2387                        extern HWND hWebSearchCombo;
2388                        SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
2389                    }
2390                    return 0;
2391
2392
2393
2394                //////////////////////////////////////////////////////
2395                // レバーコントロールのサブメニューコマンド(レバー追加)
2396                //////////////////////////////////////////////////////
2397
2398                case IDM_DOCSELECTBAND:
2399                    pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
2400                    return 0;
2401                case IDM_STANDARDBAND:
2402                    pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
2403                    return 0;
2404#ifndef THETEXT
2405                case IDM_RELEASEBAND:
2406                    pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
2407                    return 0;
2408                case IDM_DEBUGBAND:
2409                    pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
2410                    return 0;
2411                case IDM_SELECTCOMPILERBAND:
2412                    pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
2413                    return 0;
2414#endif
2415                case IDM_BANDMENU_WEB_SEARCH:
2416                    pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
2417                    return 0;
2418                case IDM_NOGRIPPER:
2419                    if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
2420                    else pobj_nv->bNoGripper=1;
2421
2422                    //レバーコントロールを再生成
2423                    pobj_Rebar->ResetRebar();
2424
2425                    //メニュー状態を設定
2426                    ResetState_DocMenu();
2427                    return 0;
2428                case IDM_RESET_REBAR:
2429                    //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
2430                    if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
2431
2432                    //レバーコントロールを再生成
2433                    pobj_Rebar->ResetInitRebar();
2434
2435                    //メニュー状態を設定
2436                    ResetState_DocMenu();
2437                    return 0;
2438
2439
2440
2441                ////////////////////////////////////////////////////
2442                // メイン タブ コントロールのサブメニューコマンド
2443                ////////////////////////////////////////////////////
2444
2445                case IDM_ALLCLOSE_OMIT_MYSELF:
2446                    //このウィンドウ以外をすべて閉じる(&A)
2447                    hChild=GetWindow(hClient,GW_CHILD);
2448                    WndNum=GetWndNum(hChild);
2449                    for(i=0;i<MAX_WNDNUM;i++){
2450                        if(i==WndNum) continue;
2451                        if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
2452                    }
2453                    return 0;
2454
2455                case IDM_PATH_COPY:
2456                    hChild=GetWindow(hClient,GW_CHILD);
2457                    WndNum=GetWndNum(hChild);
2458
2459                    //絶対パスをコピー
2460                    hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
2461                    pTemp=(char *)GlobalLock(hGlobal);
2462                    lstrcpy(pTemp,MdiInfo[WndNum].path);
2463                    GlobalUnlock(hGlobal);
2464
2465                    //クリップボードに保存
2466                    OpenClipboard(hwnd);
2467                    EmptyClipboard();
2468                    SetClipboardData(CF_TEXT,hGlobal);
2469                    CloseClipboard();
2470                    return 0;
2471
2472                case IDM_FOLDER_OPEN:
2473                    hChild=GetWindow(hClient,GW_CHILD);
2474                    WndNum=GetWndNum(hChild);
2475
2476                    _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
2477                    lstrcat(temporary,temp2);
2478
2479                    ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
2480                    return 0;
2481
2482                case IDM_DELETE_FILE:
2483                    hChild=GetWindow(hClient,GW_CHILD);
2484                    WndNum=GetWndNum(hChild);
2485
2486                    _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
2487                    lstrcat(temporary,temp2);
2488
2489                    lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
2490                    if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
2491
2492                    //ゴミ箱へ
2493                    SHFILEOPSTRUCT fo;
2494                    fo.hwnd=hwnd;
2495                    fo.wFunc=FO_DELETE;
2496                    fo.pFrom =MdiInfo[WndNum].path;
2497                    fo.pTo="\0";
2498                    fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
2499                    SHFileOperation(&fo);
2500
2501                    //閉じる
2502                    MdiInfo[WndNum].pMdiTextEdit->UnModify();
2503                    SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
2504
2505                    return 0;
2506
2507                case IDM_USER_COLOR:
2508                    {
2509                        CHOOSECOLOR cc;
2510                        COLORREF CusColors[16]={
2511                            RGB(255,255,255),
2512                            RGB(0,0,0),
2513                            RGB(128,128,128),
2514                            RGB(192,192,192),
2515                            RGB(128,0,0),
2516                            RGB(255,0,0),
2517                            RGB(128,128,0),
2518                            RGB(255,255,0),
2519                            RGB(0,128,0),
2520                            RGB(0,255,0),
2521                            RGB(0,128,128),
2522                            RGB(0,255,255),
2523                            RGB(0,0,128),
2524                            RGB(0,0,255),
2525                            RGB(128,0,128),
2526                            RGB(255,0,255)};
2527                        cc.lStructSize=sizeof(CHOOSECOLOR);
2528                        cc.hwndOwner=hwnd;
2529                        cc.rgbResult=colorUser;
2530                        cc.lpCustColors=CusColors;
2531                        cc.Flags=CC_RGBINIT|CC_FULLOPEN;
2532                        if(!ChooseColor(&cc)){
2533                            return 0;
2534                        }
2535                        colorUser=cc.rgbResult;
2536                    }
2537                case IDM_GRAY:
2538                case IDM_WHITE:
2539                case IDM_RED:
2540                case IDM_GREEN:
2541                case IDM_BLUE:
2542                case IDM_YELLOW:
2543                    hChild=GetWindow(hClient,GW_CHILD);
2544                    WndNum=GetWndNum(hChild);
2545
2546                    TC_ITEM tcItem;
2547                    tcItem.mask=TCIF_PARAM;
2548                    if(LOWORD(wParam)==IDM_GRAY)    tcItem.lParam=TABCOLOR_GRAY;
2549                    if(LOWORD(wParam)==IDM_WHITE)   tcItem.lParam=TABCOLOR_WHITE;
2550                    if(LOWORD(wParam)==IDM_RED)     tcItem.lParam=TABCOLOR_RED;
2551                    if(LOWORD(wParam)==IDM_GREEN)   tcItem.lParam=TABCOLOR_GREEN;
2552                    if(LOWORD(wParam)==IDM_BLUE)    tcItem.lParam=TABCOLOR_BLUE;
2553                    if(LOWORD(wParam)==IDM_YELLOW)  tcItem.lParam=TABCOLOR_YELLOW;
2554                    if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
2555                    TabCtrl_SetItem(pobj_MainTab->hTab,
2556                        TabCtrl_GetCurSel(pobj_MainTab->hTab),
2557                        &tcItem);
2558                    InvalidateRect(pobj_MainTab->hTab,NULL,0);
2559                    return 0;
2560
2561
2562
2563                //////////////////////////////////
2564                // SideWeb
2565                //////////////////////////////////
2566
2567                case IDC_CLIP:
2568                    pobj_SideWeb->bShow=0;
2569                    ResizeOwnerWnd();
2570                    return 0;
2571            }
2572            break;
2573        case WM_DROPFILES:
2574            hDrop=(HDROP)wParam;
2575
2576            i2=DragQueryFile(hDrop,-1,0,0);
2577            for(i=0;i<i2;i++){
2578                DragQueryFile(hDrop,i,str,MAX_PATH);
2579                OpenFileWithExtension(str);
2580            }
2581            DragFinish(hDrop);
2582            return 0;
2583        case WM_SHOWERROR:
2584            //エラー部分を反転表示
2585            DWORD AccBytes;
2586            HANDLE fh;
2587            sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
2588            fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2589            ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
2590            CloseHandle(fh);
2591            temporary[AccBytes]=0;
2592            hChild=GetWindow(hClient,GW_CHILD);
2593            while(hChild){
2594                WndNum=GetWndNum(hChild);
2595                if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2596                    if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
2597                }
2598                hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2599            }
2600            if(!hChild){
2601                hChild=OpenFileWithExtension(temporary);
2602                WndNum=GetWndNum(hChild);
2603            }
2604
2605            if(WndNum==-1) return 0;
2606
2607            //ウィンドウを最前面に表示
2608            BringWindowToTop(hChild);
2609            UpdateWindow(hChild);
2610
2611            pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
2612
2613            //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
2614            for(i=0,i2=0;;i++){
2615                if(i2>=(int)wParam) break;
2616                if(pTemp[i]=='\0') break;
2617                if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
2618                    i++;
2619                    i2++;
2620                }
2621            }
2622            pos.x=i;
2623
2624            //行の終端インデックスを取得
2625            for(;;i++){
2626                if(pTemp[i]=='\0') break;
2627                if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
2628            }
2629            pos.y=i;
2630
2631            //行を選択する
2632            TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2633
2634            return 0;
2635
2636#ifndef THETEXT
2637        case WM_SETCOMPILEVIEW:
2638            //コンパイラウィンドウ(埋め込み型)が表示されたとき
2639            hCompileView=(HWND)lParam;
2640            ResizeOwnerWnd();
2641            return 0;
2642        case WM_DESTROYCOMPILEVIEW:
2643            //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2644            if((int)hCompileView==-1){
2645                //すぐに次のコンパイラウィンドウが起動するとき
2646                hCompileView=0;
2647            }
2648            else{
2649                //完全にコンパイラウィンドウを閉じたときはリサイズ
2650                hCompileView=0;
2651               
2652                ResizeOwnerWnd();
2653            }
2654            return 0;
2655
2656        case WM_SETDEBUGGERBASE:
2657            //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2658            pobj_Debugger->begin();
2659
2660            //BasicCompiler.exeの強制終了を考慮
2661            SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2662
2663            return 0;
2664        case WM_DESTROYDEBUGGERBASE:
2665            //BasicCompiler.exeの強制終了を考慮
2666            KillTimer(hOwner,ID_DEBUGSAFTY);
2667
2668            //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2669            pobj_Debugger->end();
2670
2671            return 0;
2672
2673        case WM_SETDEBUGGERVIEW:
2674            //デバッガウィンドウ(埋め込み型)が表示されたとき
2675            pobj_Debugger->watch_start((HWND)lParam);
2676            ResizeOwnerWnd();
2677            return 0;
2678        case WM_DESTROYDEBUGGERVIEW:
2679            //デバッガウィンドウ(埋め込み型)が破棄されたとき
2680            pobj_Debugger->watch_quit();
2681            ResizeOwnerWnd();
2682            return 0;
2683#endif
2684
2685        case WM_SIZE:
2686            ResizeOwnerWnd();
2687            return 0;
2688
2689
2690        case WM_MOUSEMOVE:
2691            static DWORD dwDragLever;
2692            static POINT PrevMousePos;
2693            static int start;
2694
2695            pos.x=(long)(short)LOWORD(lParam);
2696            pos.y=(long)(short)HIWORD(lParam);
2697            ClientToScreen(hwnd,&pos);
2698
2699            if(dwDragLever){
2700                GetClientRect(hwnd,&rect);
2701
2702                if(dwDragLever==1){
2703                    //プロジェクトビューをリサイズ中
2704                    pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2705                    if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2706                    if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2707                }
2708                else if(dwDragLever==2){
2709                    //デバッガビューをリサイズ中
2710                    pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2711                    if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2712                    if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2713                        pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2714                }
2715                else if(dwDragLever==3){
2716                    //コンパイラビューをリサイズ中
2717                    pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2718                    if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2719                    if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2720                        pobj_nv->height_ClipCompileView=rect.bottom-100;
2721                }
2722                else if(dwDragLever==4){
2723                    //SideWebをリサイズ中
2724                    pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2725                    if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2726                    if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2727                }
2728
2729                ResizeOwnerWnd();
2730                UpdateWindow(hwnd);
2731            }
2732            if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2733                //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2734                GetWindowRect(hProjectView,&rect);
2735                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2736                    rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2737                    SetCursor(LoadCursor(0,IDC_SIZEWE));
2738                }
2739            }
2740#ifndef THETEXT
2741            if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2742                //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2743                GetWindowRect(pobj_Debugger->hwnd,&rect);
2744                if(rect.left<=pos.x&&pos.x<=rect.right&&
2745                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2746                    SetCursor(LoadCursor(0,IDC_SIZENS));
2747                }
2748            }
2749            if(bClipCompileView&&IsWindowVisible(hCompileView)){
2750                //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2751                GetWindowRect(hCompileView,&rect);
2752                if(rect.left<=pos.x&&pos.x<=rect.right&&
2753                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2754                    SetCursor(LoadCursor(0,IDC_SIZENS));
2755                }
2756            }
2757#endif
2758            if( pobj_SideWeb )
2759            {
2760                if(pobj_SideWeb->bShow){
2761                    //SideWebとMDIクライアントの境目のサイズ変更ライン
2762                    pobj_SideWeb->GetRect(&rect);
2763                    ClientToScreen(hwnd,&rect);
2764                    if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2765                        rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2766                        SetCursor(LoadCursor(0,IDC_SIZEWE));
2767                    }
2768                }
2769            }
2770            return 0;
2771        case WM_LBUTTONDOWN:
2772            pos.x=LOWORD(lParam);
2773            pos.y=HIWORD(lParam);
2774            ClientToScreen(hwnd,&pos);
2775
2776            if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2777                //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2778                GetWindowRect(hProjectView,&rect);
2779                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2780                    rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2781                    SetCursor(LoadCursor(0,IDC_SIZEWE));
2782
2783                    dwDragLever=1;
2784                    SetCapture(hwnd);
2785
2786                    PrevMousePos=pos;
2787                    start=pobj_nv->width_ClipProjectView;
2788                }
2789            }
2790#ifndef THETEXT
2791            if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2792                //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2793                GetWindowRect(pobj_Debugger->hwnd,&rect);
2794                if(rect.left<=pos.x&&pos.x<=rect.right&&
2795                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2796                    SetCursor(LoadCursor(0,IDC_SIZENS));
2797
2798                    dwDragLever=2;
2799                    SetCapture(hwnd);
2800
2801                    PrevMousePos=pos;
2802                    start=pobj_nv->height_ClipDebuggerView;
2803                }
2804            }
2805            if(bClipCompileView&&IsWindowVisible(hCompileView)){
2806                //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2807                GetWindowRect(hCompileView,&rect);
2808                if(rect.left<=pos.x&&pos.x<=rect.right&&
2809                    rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2810                    SetCursor(LoadCursor(0,IDC_SIZENS));
2811
2812                    dwDragLever=3;
2813                    SetCapture(hwnd);
2814
2815                    PrevMousePos=pos;
2816                    start=pobj_nv->height_ClipCompileView;
2817                }
2818            }
2819#endif
2820            if(pobj_SideWeb->bShow){
2821                //SideWebとMDIクライアントの境目のサイズ変更ライン
2822                pobj_SideWeb->GetRect(&rect);
2823                ClientToScreen(hwnd,&rect);
2824                if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2825                    rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2826                    SetCursor(LoadCursor(0,IDC_SIZENS));
2827
2828                    dwDragLever=4;
2829                    SetCapture(hwnd);
2830
2831                    PrevMousePos=pos;
2832                    start=pobj_nv->width_WebSearchView;
2833                }
2834            }
2835            return 0;
2836        case WM_LBUTTONUP:
2837            if(dwDragLever){
2838                dwDragLever=0;
2839                ReleaseCapture();
2840            }
2841            return 0;
2842
2843
2844        case WM_SYSCOMMAND:
2845            //ウィンドウの最小化前にウィンドウ位置を保存
2846            if(wParam==SC_MINIMIZE){
2847                if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2848                else if(!IsIconic(hwnd)){
2849                    pobj_nv->bWindowMax=0;
2850                    GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2851                }
2852            }
2853            break;  //処理をDefFrameProcへ
2854        case WM_QUERYENDSESSION:
2855        case WM_CLOSE:
2856            extern BOOL bSearchingClasses;
2857            if(bSearchingClasses){
2858                pobj_ClassTreeView->bCloseSwitch=1;
2859                return 0;
2860            }
2861
2862            //コンパイラビューを閉じる
2863            if(hCompileView)
2864                SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2865
2866            //次回起動時にMDIウィンドウを最大化させるかを判定
2867            hChild=GetWindow(hClient,GW_CHILD);
2868            pobj_nv->bMDIZoomed=IsZoomed(hChild);
2869
2870            //プロジェクトを閉じる
2871            if(ProjectInfo.name[0]){
2872                if(!CloseProject()) return 0;
2873            }
2874
2875            //MDIウィンドウの保存確認
2876            hChild=GetWindow(hClient,GW_CHILD);
2877            while(hChild){
2878                i=GetWndNum(hChild);
2879                if(!DocumentModifyCheck(hChild)) return 0;
2880                hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2881            }
2882
2883
2884            KillTimer(hwnd,ID_TIMER_BACKUP);
2885
2886
2887            //ProjectViewの位置を保存、ProjectViewを破棄
2888            GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2889            DestroyWindow(hProjectView);
2890            DestroyWindow(hProjectView_ToolWindow);
2891
2892            //Rebarの位置を保存、Rebarを破棄
2893            delete pobj_Rebar;
2894            pobj_Rebar=0;
2895
2896            //タブコントロールを破棄
2897            delete pobj_MainTab;
2898            pobj_MainTab=0;
2899
2900            //SideWebを破棄
2901            delete pobj_SideWeb;
2902            pobj_SideWeb=0;
2903
2904            //メインウィンドウの最大化有無、座標を保存
2905            if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2906            else if(!IsIconic(hwnd)){
2907                pobj_nv->bWindowMax=0;
2908                GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2909            }
2910
2911            hChild=GetWindow(hClient,GW_CHILD);
2912            while(hChild){
2913                CloseDocWindow(GetWndNum(hChild));
2914                DestroyWindow(hChild);
2915                hChild=GetWindow(hClient,GW_CHILD);
2916            }
2917
2918            EndProjectEditor();     //ProjectEditorの情報を保存
2919
2920            //エディタ用フォントを破棄
2921            extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2922            if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2923            if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2924
2925            DestroyWindow(hwnd);
2926            return 0;
2927
2928        case WM_DESTROY:
2929            PostQuitMessage(0);
2930            return 0;
2931    }
2932    return DefFrameProc(hwnd,hClient,message,wParam,lParam);
2933}
2934
2935int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2936    WNDCLASSEX wcl;
2937
2938    wcl.cbSize=sizeof(WNDCLASSEX);
2939    wcl.hInstance=hInst;
2940    wcl.lpszClassName=lpClassName;
2941    wcl.lpfnWndProc=WndProc;
2942
2943    if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2944    else wcl.style=0;
2945
2946    wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2947    wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2948
2949    if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2950    else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2951
2952    wcl.lpszMenuName=NULL;
2953    wcl.cbClsExtra=0;
2954    wcl.cbWndExtra=0;
2955    wcl.hbrBackground=hBackBrush;
2956
2957    return RegisterClassEx(&wcl);
2958}
2959int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2960    int i,i2,IsStr;
2961    char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2962    MSG msg;
2963    HACCEL hAccel;
2964
2965    hInst=hThisInst;
2966    if(!SetupProjectEditor()) return 0;
2967
2968    HBRUSH hGrayBrush_LineNumber;
2969    hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2970
2971    if(!RegWndClass(WindowFunc,"ProjectEditor",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2972    if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2973    if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2974    if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2975    if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2976    if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2977    if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2978    if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2979    if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2980    if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2981    if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2982    if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2983    if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2984    if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2985    if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2986    if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2987    if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2988
2989    //Web検索用のウィンドウクラス
2990    if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2991    if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2992    if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2993
2994    //ルーラーのウィンドウクラス
2995    if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2996
2997    //SideWebのウィンドウクラス
2998    if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2999
3000
3001
3002    hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
3003
3004    //メインウィンドウ
3005    RECT *prc;
3006    prc=&pobj_nv->StartupWindowRect;
3007    hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditor",APPLICATION_NAME,
3008        WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
3009        prc->left, prc->top,
3010        prc->right-prc->left, prc->bottom-prc->top,
3011        HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
3012
3013    SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
3014    SetClipboardViewer(hOwner);
3015
3016    if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
3017    else ShowWindow(hOwner,ShowCmd);
3018    UpdateWindow(hOwner);
3019
3020    int open_sw=0;
3021    if(lstrlen(lpCmdLine)>0){
3022        lstrcpy(dummy,lpCmdLine);
3023        for(i=0,i2=0,IsStr=0;;i++,i2++){
3024            if(dummy[i]=='\"'){
3025                if(IsStr==0) IsStr=1;
3026                else IsStr=0;
3027                i++;
3028            }
3029            if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
3030                str[i2]=0;
3031                if(!(strstr(str,":")||strstr(str,"\\\\"))){
3032                    lstrcpy(str2,str);
3033                    GetCurrentDirectory(MAX_PATH,str);
3034                    lstrcat(str,"\\");
3035                    lstrcat(str,str2);
3036                }
3037                ShortPathToLongPath(str,str2);
3038                OpenFileWithExtension(str2);
3039                open_sw=1;
3040                if(dummy[i]=='\0') break;
3041                i2=-1;
3042                continue;
3043            }
3044            str[i2]=dummy[i];
3045        }
3046    }
3047
3048    BOOL bRestore=0;
3049
3050
3051    {
3052        //自動バックアップ及び復元機能
3053
3054        //必要であれば復元
3055        bRestore=restore();
3056    }
3057
3058
3059#ifdef THETEXT
3060    if(open_sw==0&&bRestore==0){
3061        //ファイルが開かれなかったとき
3062        NewTextEditWindow(NULL,WNDTYPE_TEXT);
3063    }
3064#endif
3065
3066
3067    while(GetMessage(&msg,NULL,0,0)){
3068
3069        if(!TranslateAccelerator(hOwner,hAccel,&msg)){
3070            if(ProjectInfo.name[0]){
3071                for(i=0,i2=0;i<MAX_WNDNUM;i++){
3072                    if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
3073                        if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
3074                    }
3075                }
3076                if(i2==0){
3077                    if(!TranslateMDISysAccel(hClient,&msg)){
3078                        TranslateMessage(&msg);
3079                        DispatchMessage(&msg);
3080                    }
3081                }
3082            }
3083            else{
3084                if(!TranslateMDISysAccel(hClient,&msg)){
3085                    TranslateMessage(&msg);
3086                    DispatchMessage(&msg);
3087                }
3088            }
3089        }
3090    }
3091
3092    DeleteObject(hGrayBrush_LineNumber);
3093
3094#if defined HeapAlloc
3095    CheckHeapCheck();
3096#endif
3097
3098    return msg.wParam;
3099}
Note: See TracBrowser for help on using the repository browser.