source: dev/ProjectEditor/ProjectEditor.cpp@ 81

Last change on this file since 81 was 81, checked in by dai_9181, 17 years ago

プロジェクトを開いていないときでもクラスビューの機能を有効にした。

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