source: dev/ProjectEditor/ProjectEditor.cpp@ 22

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

バックアップ用ディレクトリが消去されていたときは、自動生成する。
プロ版の概念を除去。機能制限を解除。

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