source: dev/ProjectEditor/ProjectEditor.cpp@ 24

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

保存されていないドキュメントのタブに(*)をつける機能に対応。
MDITEXTEDITINFOをCMdiTextEditに変更。今後、オブジェクト指向化を進める。

File size: 89.4 KB
RevLine 
[3]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 //コントロールタブスペースの幅と行番号の文字数を更新
[24]137 MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace=
138 GetControlTabSpace(WndNum,&MdiInfo[WndNum].pMdiTextEdit->iLineNumberTextCount);
[3]139
[24]140 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
141 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
[3]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)){
[24]162 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ) sw=1;
[3]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 //サイズ
[24]207 BufSize=(double)lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer);
[3]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 列",
[24]227 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
228 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
[3]229#else
230 //英語
231 sprintf(temporary,"%d : %d",
[24]232 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
233 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
[3]234#endif
235 }
236 else temporary[0]=0;
237 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
238
239 //文字コード
[24]240 nkf.GetCharCodeName(MdiInfo[WndNum].pMdiTextEdit->iCharCode,temporary);
[3]241 SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
242
243 //文字コード
[24]244 nkf.GetLfCodeName(MdiInfo[WndNum].pMdiTextEdit->iLfCode,temporary);
[3]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)){
[24]312 i2=MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos-1;
[3]313 if(i2==-1) i2=MAX_UNDONUM-1;
[24]314 if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[i2]){
[3]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 }
[24]324 if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos]){
[3]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(!(
[24]463 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.x&&
464 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.y
[3]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
[22]634 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
[3]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
[22]643 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
[3]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
[22]650 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
[3]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
[24]903 MdiInfo[i].pMdiTextEdit = new CMdiTextEdit( &MdiInfo[i] );
[3]904
[24]905 MdiInfo[i].pMdiTextEdit->hEdit=hEdit;
906 MdiInfo[i].pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
907 MdiInfo[i].pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
908 MdiInfo[i].pMdiTextEdit->hIcon=shfi.hIcon;
909 MdiInfo[i].pMdiTextEdit->buffer=buffer;
910 MdiInfo[i].pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
911 MdiInfo[i].pMdiTextEdit->iUnderStart=-1;
912 MdiInfo[i].pMdiTextEdit->iUnderEnd=-1;
913 MdiInfo[i].pMdiTextEdit->StartCaretPos.x=0;
914 MdiInfo[i].pMdiTextEdit->StartCaretPos.y=0;
915 MdiInfo[i].pMdiTextEdit->EndCaretPos.x=0;
916 MdiInfo[i].pMdiTextEdit->EndCaretPos.y=0;
917 MdiInfo[i].pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
918 MdiInfo[i].pMdiTextEdit->bAutoScroll=0;
919 MdiInfo[i].pMdiTextEdit->iWidth_ControlTabSpace=
920 GetControlTabSpace(i,&MdiInfo[i].pMdiTextEdit->iLineNumberTextCount);
921 MdiInfo[i].pMdiTextEdit->iCharCode=iCharCode;
922 MdiInfo[i].pMdiTextEdit->iLfCode=iLfCode;
[3]923
924 MdiInfo[i].IndentStr=0;
925
926 int flag;
927 if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
928 else flag=0;
929 SendTextEditResizeEvent(hChild);
930 break;
931 }
932 }
933
934 //ワードカラーをセット
935 if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(i);
936
937 //Docコンボボックスに追加
938 extern HWND hDocCombo;
939 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
940 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
941
942 //タブに追加
[24]943 pobj_MainTab->InsertItem( str, true, TabColor );
[3]944
945 SetFocus(hEdit);
946 SetStatusText(NULL);
947
948 //メニュー状態を設定
949 ResetState_DocMenu();
950
951 return hChild;
952}
953void CreateNewFile(void){
954
955#ifdef THETEXT
956 NewTextEditWindow(NULL,WNDTYPE_TEXT);
957 return;
958#else
959 int FileType;
960 BOOL bAddToProject;
961 char temporary[MAX_PATH];
962
963 FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,DlgNewFile);
964 if(FileType==-1) return;
965
966 if(FileType&0x00008000){
967 bAddToProject=1;
968 FileType&=0x0FFF;
969 lstrcpy(temporary,NewFileName);
970 if(!strstr(temporary,".")) lstrcat(temporary,".ab");
971 GetFullPath(temporary,ProjectInfo.dir);
972 }
973 else bAddToProject=0;
974
975 switch(FileType){
976 case FT_BASICPROGRAM: //Basicプログラム
977 case FT_SUBPROGRAM:
978 if(bAddToProject){
979 WriteBuffer(temporary,0,0);
980 NewTextEditWindow(temporary,WNDTYPE_BASIC);
981 Project_File_Insert(temporary);
982 }
983 else NewTextEditWindow(NULL,WNDTYPE_BASIC);
984 break;
985
986 case FT_PROJECT:
987 DlgNewProjectWizard(hOwner);
988 break;
989
990 case FT_TEXT:
991 NewTextEditWindow(NULL,WNDTYPE_TEXT);
992 break;
993
994 case FT_HTML:
995 NewTextEditWindow(NULL,WNDTYPE_HTML);
996 break;
997
998 case FT_ICON:
999 NewIconEditWindow(NULL);
1000 break;
1001 }
1002#endif
1003}
1004void CloseDocWindow(int WndNum){
1005 int i2,i3;
1006
1007 MdiInfo[WndNum].hwnd=0;
1008
1009 //ドキュメントコンボボックスから文字列を消去
1010 extern HWND hDocCombo;
1011 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
1012 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
1013 InvalidateRect(hDocCombo,NULL,1);
1014
1015 //タブコントロールからアイテムを消去
[24]1016 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true );
[3]1017
1018
1019 GlobalFree(MdiInfo[WndNum].title);
1020 GlobalFree(MdiInfo[WndNum].path);
1021
1022 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1023 ////////////////////////////
1024 // テキストエディタを閉じる
1025 ////////////////////////////
1026
1027 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
1028 if(ComplementWndInfo.hWnd){
1029 //コード補完リストを破棄する
1030 DestroyWindow(ComplementWndInfo.hWnd);
1031 ComplementWndInfo.hWnd=0;
1032 }
1033
[24]1034 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
1035 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
[3]1036
1037 if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
1038
1039 //エディットコントロールを破棄
[24]1040 DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
[3]1041
1042 //Web検索ウィンドウを破棄
[24]1043 delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
1044 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
[3]1045
1046 //ルーラーウィンドウを破棄
[24]1047 delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
1048 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
[3]1049
1050 //アイコンを破棄
[24]1051 if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
[3]1052
[24]1053 delete MdiInfo[WndNum].pMdiTextEdit;
1054 MdiInfo[WndNum].pMdiTextEdit=0;
[3]1055 }
1056 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1057 /////////////////////
1058 // RADツールを閉じる
1059 /////////////////////
1060
1061 for(i2=0;i2<MAX_UNDONUM;i2++){
1062 if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
1063 Rad_DeleteUndoData(WndNum,i2);
1064 }
1065 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
1066 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
1067 SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
1068 DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
1069 DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
1070 GlobalFree(MdiInfo[WndNum].MdiRadInfo);
1071 }
1072 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1073 ////////////////////////////
1074 // メニューエディタを閉じる
1075 ////////////////////////////
1076
1077 DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
1078 GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
1079 }
1080 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1081 ////////////////////////////
1082 // アイコンエディタを閉じる
1083 ////////////////////////////
1084
1085 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1086 for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1087 if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
1088 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
1089 }
1090 }
1091
1092 DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
1093 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
1094 DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
1095 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1096 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
1097 }
1098 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
1099 }
1100}
1101void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1102 int WndNum;
1103 WndNum=GetWndNum(hwnd);
1104 if(WndNum==-1) return;
1105
1106 int WebResultWndHeight;
1107 WebResultWndHeight=LINK_ITEM_HEIGHT;
1108 //未完成
1109 WebResultWndHeight=0;
1110
1111 int iHeightRuler;
1112 if(pobj_nv->bEditor_Ruler){
1113 //ルーラー
[24]1114 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
[3]1115 0,
1116 0,
1117 cx,
1118 HEIGHT_RULER);
1119
1120 iHeightRuler=HEIGHT_RULER;
1121
[24]1122 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
[3]1123 }
1124 else{
1125 iHeightRuler=0;
1126
[24]1127 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
[3]1128 }
1129
1130 //エディットウィンドウ
[24]1131 MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
[3]1132 0,
1133 iHeightRuler,
1134 cx,
1135 cy-WebResultWndHeight-iHeightRuler,
1136 1);
1137
1138 //Web検索ウィンドウ
[24]1139 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
[3]1140 0,
1141 cy-WebResultWndHeight,
1142 cx,
1143 WebResultWndHeight);
1144}
1145LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1146 int i,i2;
1147 HWND hEdit;
1148
1149 switch(message){
1150 case WM_CREATE:
1151 CREATESTRUCT *lpcs;
1152 lpcs=(CREATESTRUCT *)lParam;
1153 MDICREATESTRUCT *lpmcs;
1154 lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1155 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1156 break;
1157 case WM_MDIACTIVATE:
1158 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1159 if(MethodCheckInfo.hWnd){
1160 DestroyWindow(MethodCheckInfo.hWnd);
1161 MethodCheckInfo.hWnd=0;
1162 }
1163
1164 //以前のコード補完リストを破棄する
1165 if(ComplementWndInfo.hWnd){
1166 DestroyWindow(ComplementWndInfo.hWnd);
1167 ComplementWndInfo.hWnd=0;
1168 }
1169
1170 if(!lParam) return 0;
1171 i=GetWndNum((HWND)lParam);
1172 if(i==-1) return 0; //ウィンドウが初期状態の場合
1173
1174#ifndef THETEXT
1175 //デバッガ メニューの状態を設定
1176 pobj_Debugger->ResetCommandEnabled();
1177#endif
1178
1179 //ドキュメント セレクト コンボボックス
1180 extern HWND hDocCombo;
1181 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1182 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1183
1184 //タブコントロール
1185 pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
1186
1187 return 0;
1188 case WM_SETFOCUS:
1189 hEdit=GetWindow(hwnd,GW_CHILD);
1190 SetFocus(hEdit);
1191 SetStatusText(CmdMsg);
1192 ResetState_EditMenu();
1193 ResetState_ViewMenu();
1194 break;
1195 case WM_SIZE:
1196 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1197 break;
1198 case WM_CLOSE:
1199 if(!DocumentModifyCheck(hwnd)) return 0;
1200 CloseDocWindow(GetWndNum(hwnd));
1201 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1202 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1203
1204 //メニュー状態を設定
1205 ResetState_DocMenu();
1206
1207 return i;
1208 }
1209 return DefMDIChildProc(hwnd,message,wParam,lParam);
1210}
1211void ResizeOwnerWnd(void){
1212 int width_owner,height_owner;
1213 int height_Rebar;
1214 int height_MdiClient;
1215 RECT rect,StatusRect,RebarRect;
1216
1217 GetClientRect(hOwner,&rect);
1218 width_owner=rect.right;
1219 height_owner=rect.bottom;
1220
1221 //Rebar
1222 SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1223 UpdateWindow(pobj_Rebar->hRebar);
1224
1225 //Status bar
1226#define STATUSBAR_PARTS_NUM 5
1227 int sb_size[STATUSBAR_PARTS_NUM];
1228 sb_size[0]=width_owner-340;
1229 sb_size[1]=width_owner-220;
1230 sb_size[2]=width_owner-120;
1231 sb_size[3]=width_owner-50;
1232 sb_size[4]=width_owner;
1233 SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
1234 SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1235 UpdateWindow(hStatusBar);
1236
1237 //Status bar
1238 int height_Statusbar;
1239 SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
1240 height_Statusbar=StatusRect.bottom;
1241
1242 GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
1243 height_Rebar=RebarRect.bottom-RebarRect.top+2;
1244
1245 int height_dv; //Width of Debugger View
1246 int height_cv; //Width of Compiler View
1247 height_dv=0;
1248 height_cv=0;
1249#ifndef THETEXT
1250 if(bClipCompileView){
1251 if(pobj_Debugger->IsDebuggerView()){
1252 //デバッガビューが表示されているとき
1253 height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
1254 }
1255 if(hCompileView){
1256 //コンパイラビューが表示されているとき
1257 height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
1258 }
1259 }
1260#endif
1261
1262 int width_pjv=0; //Width of Project View
1263 if(pobj_nv->bClipProjectView){
1264 if(IsWindowVisible(hProjectView)){
1265 //プロジェクトビューが表示されているとき
1266 width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
1267 }
1268 }
1269
1270 int width_SideWeb=0;
1271 if(pobj_SideWeb->bShow){
1272 width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
1273 }
1274
1275 //MDIクライアントの高さ
1276 height_MdiClient=height_owner-(
1277 height_Rebar+
1278 height_dv+
1279 height_cv+
1280 height_Statusbar
1281 );
1282
1283 //タブコントロール
1284 int tab_height;
1285 if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
1286 else{
1287 RECT rc;
1288 TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
1289 tab_height=rc.bottom-rc.top;
1290 }
1291 MoveWindow(pobj_MainTab->hTab,
1292 width_pjv,
1293 height_Rebar,
1294 width_owner-width_pjv-width_SideWeb,
1295 tab_height,
1296 1);
1297
1298 //MDIクライアント
1299 MoveWindow(hClient,
1300 width_pjv,
1301 height_Rebar+tab_height,
1302 width_owner-width_pjv-width_SideWeb,
1303 height_MdiClient-tab_height,
1304 1);
1305
1306 if(pobj_SideWeb->bShow){
1307 //SideWeb
1308 pobj_SideWeb->resize(
1309 width_owner - pobj_nv->width_WebSearchView,
1310 height_Rebar,
1311 pobj_nv->width_WebSearchView,
1312 height_MdiClient);
1313 }
1314 else pobj_SideWeb->resize(0,0,0,0);
1315
1316 if(width_pjv){
1317 //プロジェクトビュー
1318 MoveWindow(hProjectView,
1319 0,
1320 height_Rebar,
1321 pobj_nv->width_ClipProjectView,
1322 height_MdiClient,
1323 1);
1324 InvalidateRect(hProjectView,NULL,0);
1325 }
1326
1327 if(height_dv){
1328#ifndef THETEXT
1329 //デバッガビュー
1330 pobj_Debugger->resize(
1331 0,
1332 height_Rebar+height_MdiClient+LEVER_THICK,
1333 width_owner,
1334 pobj_nv->height_ClipDebuggerView);
1335#endif
1336 }
1337 if(height_cv){
1338 //コンパイラビュー
1339 MoveWindow(hCompileView,
1340 0,
1341 height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
1342 width_owner,
1343 pobj_nv->height_ClipCompileView,
1344 1);
1345 }
1346}
1347LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1348 int i,i2,i3,WndNum;
1349 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
1350 HWND hChild,hEdit;
1351 RECT rect;
1352 POINT pos;
1353 LPTOOLTIPTEXT TipText;
1354 LPNMHDR lpnmhdr;
1355 NMPGCALCSIZE *lpCalcSize;
1356 NMPGSCROLL *lpScroll;
1357 HDROP hDrop;
1358 HGLOBAL hGlobal;
1359 CHARRANGE CharRange;
1360 HANDLE hFile;
1361 BOOL bChecked;
1362
1363 static COLORREF colorUser=RGB(255,255,255);
1364
1365 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1366 //「最近使ったファイル」メニューコマンド
1367 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1368 OpenFileWithExtension(str);
1369 return 0;
1370 }
1371
1372 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1373 //「最近使ったプロジェクト」メニューコマンド
1374 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1375 OpenFileWithExtension(str);
1376 return 0;
1377 }
1378
1379 switch(message){
1380 case WM_CREATE:
1381 SetupWindow(hwnd);
1382
1383 //テキストエディタフォント設定
1384 ResetTextEditFont(hwnd);
1385
[22]1386 //バックアップ用タイマーを設定(10秒に一回)
1387 SetTimer(hwnd,ID_TIMER_BACKUP,10000,NULL);
[3]1388
1389 return 0;
1390
1391
1392 case WM_TIMER:
[22]1393 //Pro版は自動バックアップ及び復元機能を有効にする
1394 _beginthread(backup,0,0);
[3]1395
1396#ifndef THETEXT
1397 if(wParam==ID_DEBUGSAFTY){
1398 //BasicCompiler.exeが強制終了しているかどうかを検証
1399 pobj_Debugger->SaftyCheck();
1400 }
1401#endif
1402
1403 return 0;
1404
1405
1406 case WM_DRAWCLIPBOARD:
1407 ResetState_EditMenu();
1408 return 0;
1409
1410 case WM_MENUSELECT:
1411 MenuAdvice(wParam);
1412 return 0;
1413 case WM_INITMENU:
1414 pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
1415#ifndef THETEXT
1416 pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
1417#endif
1418 return 0;
1419 case WM_MEASUREITEM:
1420 LPMEASUREITEMSTRUCT lpMI;
1421 lpMI = (LPMEASUREITEMSTRUCT)lParam;
1422 if(lpMI->CtlType==ODT_MENU){
1423 SIZE size;
1424 CMenuItemData *pobj_MenuItemData;
1425 pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
1426 if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
1427 //メインメニューの親アイテム
1428 pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
1429 lpMI->itemWidth = size.cx;
1430 lpMI->itemHeight = size.cy;
1431 }
1432 else{
1433 //メインメニューにぶらさがるサブメニュー
1434 pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
1435 lpMI->itemWidth = size.cx;
1436 lpMI->itemHeight = size.cy;
1437 }
1438 }
1439 return 0;
1440
1441 case WM_DRAWITEM:
1442 DRAWITEMSTRUCT *pdis;
1443 pdis=(DRAWITEMSTRUCT *)lParam;
1444
1445 if(pdis->CtlType==ODT_MENU){
1446 if(!pobj_MainMenu) return 0;
1447
1448 CMenuItemData *pobj_MenuItemData;
1449 pobj_MenuItemData=(CMenuItemData *)pdis->itemData;
1450 if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
1451 //メインメニューの親アイテム
1452 pobj_MainMenu->OwnerDrawMenu(pdis->hDC,
1453 &pdis->rcItem,
1454 (pdis->itemState&ODS_SELECTED)!=0,
1455 pobj_MenuItemData->item_index);
1456 }
1457 else{
1458 //メインメニューにぶらさがるサブメニュー
1459 pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
1460 pdis->hDC,
1461 &pdis->rcItem,
1462 (pdis->itemState&ODS_SELECTED)!=0,
1463 pobj_MenuItemData->item_index);
1464 }
1465 }
1466 return 0;
1467
1468 case WM_NOTIFY:
1469 if(!lParam) return 0;
1470 TipText=(LPTOOLTIPTEXT)lParam;
1471 if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
1472 lpnmhdr=(LPNMHDR)lParam;
1473
1474 extern HWND hStandardToolbarPager;
1475 extern HWND hDebuggerToolbarPager;
1476 if(pobj_Rebar){
1477 //レバーオブジェクトが存在するとき
1478 if(lpnmhdr->hwndFrom==pobj_Rebar->hRebar&&lpnmhdr->code==RBN_HEIGHTCHANGE){
1479 ResizeOwnerWnd();
1480 return 0;
1481 }
1482 }
1483 if(lpnmhdr->hwndFrom==hStandardToolbarPager){
1484 if(lpnmhdr->code==PGN_CALCSIZE){
1485 lpCalcSize=(LPNMPGCALCSIZE)lParam;
1486 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
1487 lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
1488 }
1489 else if(lpnmhdr->code==PGN_SCROLL){
1490 lpScroll=(LPNMPGSCROLL)lParam;
1491 lpScroll->iScroll=20;
1492 }
1493 }
1494 else if(lpnmhdr->hwndFrom==hDebuggerToolbarPager){
1495 if(lpnmhdr->code==PGN_CALCSIZE){
1496 lpCalcSize=(LPNMPGCALCSIZE)lParam;
1497 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
1498 lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
1499 }
1500 else if(lpnmhdr->code==PGN_SCROLL){
1501 lpScroll=(LPNMPGSCROLL)lParam;
1502 lpScroll->iScroll=20;
1503 }
1504 }
1505
1506 NMHDR *hdr;
1507 hdr=(NMHDR *)lParam;
1508 if(pobj_MainTab){
1509 if(hdr->hwndFrom==pobj_MainTab->hTab){
1510 if(hdr->code==TCN_SELCHANGE)
1511 pobj_MainTab->SelChangeEvent();
1512
1513 if(hdr->code==NM_RCLICK){
1514
1515 TCHITTESTINFO tcHitTest;
1516 GetCursorPos(&tcHitTest.pt);
1517 ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
1518 i=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
1519 if(i==-1) return 0;
1520
1521 TabCtrl_SetCurSel(pobj_MainTab->hTab,i);
1522
1523 pobj_MainTab->SelChangeEvent();
1524
1525
1526 /////////////////////
1527 // メニューを表示
1528 /////////////////////
1529
1530 hChild=GetWindow(hClient,GW_CHILD);
1531 WndNum=GetWndNum(hChild);
1532
1533 //保存コマンドの文字列をセット
1534 MENUITEMINFO mii;
1535 mii.cbSize=sizeof(MENUITEMINFO);
1536 mii.fMask=MIIM_TYPE;
1537 mii.dwTypeData=temporary;
1538 mii.fType=MFT_STRING;
1539 if(MdiInfo[WndNum].path[0]){
1540 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1541 lstrcat(temporary,temp2);
1542 lstrcat(temporary," を保存(&S)");
1543 }
1544 else{
1545 lstrcpy(temporary,"保存(&S)");
1546 }
1547 SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
1548
1549 /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
1550 コマンドを場合によって無効化にする */
1551 if(MdiInfo[WndNum].path[0]){
1552 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
1553 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
1554 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
1555 }
1556 else{
1557 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
1558 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
1559 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
1560 }
1561
1562 POINT MousePos;
1563 GetCursorPos(&MousePos);
1564 TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
1565 }
1566 }
1567 }
1568 if(pobj_SideWeb){
1569 if(hdr->hwndFrom==pobj_SideWeb->hTab&&hdr->code==TCN_SELCHANGE){
1570 pobj_SideWeb->SelChangeEvent();
1571 }
1572 }
1573
1574 return 0;
1575 case WM_COMMAND:
1576 switch(LOWORD(wParam)){
1577 case IDM_NEW:
1578 CreateNewFile();
1579 return 0;
1580 case IDM_OPEN:
1581 //"ファイルを指定してください"
1582 if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return 0;
1583
1584 OpenFileWithExtension(str);
1585 return 0;
1586 case IDM_CLOSE:
1587 hChild=GetWindow(hClient,GW_CHILD);
1588 if(IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
1589 return 0;
1590#ifndef THETEXT
1591 case IDM_PROJECT_OPEN:
1592 //"プロジェクト ファイルを指定して下さい"
1593 if(!GetFilePathDialog(hwnd,str,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE)) return 0;
1594
1595 OpenProject(str);
1596 return 0;
1597 case IDM_PROJECT_SAVE:
1598 SaveProject();
1599 return 0;
1600 case IDM_PROJECT_CLOSE:
1601 CloseProject();
1602 return 0;
1603 case IDM_PROJECT_FOLDER_OPEN:
1604 ShellExecute(hwnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
1605 return 0;
1606#endif
1607 case IDM_SAVE:
1608 SaveDocument(GetWindow(hClient,GW_CHILD),NULL);
1609 return 0;
1610 case IDM_NEWSAVE:
1611 //"保存先のファイルを指定してください"
1612 if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0;
1613
1614 SaveDocument(GetWindow(hClient,GW_CHILD),str);
1615 return 0;
1616 case IDM_CODE_SAVE:
1617 //文字コードを指定して保存
1618 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),hOwner,nkfDlgCodeSave);
1619 return 0;
1620 case IDM_ALLSAVE:
1621 for(i=0;i<MAX_WNDNUM;i++){
1622 if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
1623 }
1624 if(ProjectInfo.name[0]) SaveProject();
1625 return 0;
1626
1627 case IDM_PAGESET:
1628 //ページ設定
1629 obj_Page.SetupDlg();
1630 return 0;
1631
1632 case IDM_PREVIEW:
1633 //プレビュー(Pro版のみ)
1634 Preview();
1635 return 0;
1636
1637 case IDM_PRINTOUT:
1638 //印刷
1639 Printout();
1640 return 0;
1641
1642 case IDM_EXIT:
1643 SendMessage(hwnd,WM_CLOSE,0,0);
1644 return 0;
1645 case IDM_UNDO:
1646 case (WORD)IDM_ACCEL_UNDO:
1647 hChild=GetWindow(hClient,GW_CHILD);
1648 if(!hChild) return 0;
1649 WndNum=GetWndNum(hChild);
1650 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
1651 TextEdit_UndoCommand(WndNum);
1652 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1653 Rad_UndoCommand(WndNum);
1654 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
1655 IconEdit_UndoCommand(WndNum);
1656 return 0;
1657 case IDM_REDO:
1658 case (WORD)IDM_ACCEL_REDO:
1659 hChild=GetWindow(hClient,GW_CHILD);
1660 if(!hChild) return 0;
1661 WndNum=GetWndNum(hChild);
1662 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
1663 TextEdit_RedoCommand(WndNum);
1664 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1665 Rad_RedoCommand(WndNum);
1666 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
1667 IconEdit_RedoCommand(WndNum);
1668 return 0;
1669 case IDM_CUT:
1670 hChild=GetWindow(hClient,GW_CHILD);
1671 WndNum=GetWndNum(hChild);
1672 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1673 hEdit=GetWindow(hChild,GW_CHILD);
1674
1675 TextEdit_GetSel(WndNum,&CharRange);
1676
1677 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
1678 pTemp=(char *)GlobalLock(hGlobal);
[24]1679 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
[3]1680 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
1681 GlobalUnlock(hGlobal);
1682
1683 //クリップボードに保存
1684 OpenClipboard(hwnd);
1685 EmptyClipboard();
1686 SetClipboardData(CF_TEXT,hGlobal);
1687 CloseClipboard();
1688
1689 //選択文字列を消去
1690 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
1691 }
1692 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1693 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1694
1695 //クリップボードに格納するためのデータを用意する
1696 ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
1697 ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
1698 hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
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
1702 OpenClipboard(hwnd);
1703 EmptyClipboard();
1704 SetClipboardData(dwRadClipboardID,hGlobal);
1705 CloseClipboard();
1706
1707 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1708 }
1709 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1710 //クリップボードに格納するためのデータを用意する
1711 hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
1712 if(hGlobal==0) return 0;
1713
1714 OpenClipboard(hwnd);
1715 EmptyClipboard();
1716 SetClipboardData(CF_BITMAP,hGlobal);
1717 CloseClipboard();
1718
1719 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
1720 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
1721
1722 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
1723 }
1724 return 0;
1725 case IDM_COPY:
1726 hChild=GetWindow(hClient,GW_CHILD);
1727 WndNum=GetWndNum(hChild);
1728 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1729 hEdit=GetWindow(hChild,GW_CHILD);
1730
1731 TextEdit_GetSel(WndNum,&CharRange);
1732
1733 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
1734 pTemp=(char *)GlobalLock(hGlobal);
[24]1735 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
[3]1736 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
1737 GlobalUnlock(hGlobal);
1738
1739 //クリップボードに保存
1740 OpenClipboard(hwnd);
1741 EmptyClipboard();
1742 SetClipboardData(CF_TEXT,hGlobal);
1743 CloseClipboard();
1744 }
1745 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1746 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1747
1748 //クリップボードに格納するためのデータを用意する
1749 hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
1750
1751 OpenClipboard(hwnd);
1752 EmptyClipboard();
1753 SetClipboardData(dwRadClipboardID,hGlobal);
1754 CloseClipboard();
1755 }
1756 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1757 //クリップボードに格納するためのデータを用意する
1758 hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
1759
1760 OpenClipboard(hwnd);
1761 EmptyClipboard();
1762 SetClipboardData(CF_BITMAP,hGlobal);
1763 CloseClipboard();
1764 }
1765 return 0;
1766 case IDM_PASTE:
1767 hChild=GetWindow(hClient,GW_CHILD);
1768 WndNum=GetWndNum(hChild);
1769 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1770 hEdit=GetWindow(hChild,GW_CHILD);
1771
1772 //クリップボードを開く
1773 OpenClipboard(hwnd);
1774 hGlobal=GetClipboardData(CF_TEXT);
1775 if(!hGlobal){
1776 CloseClipboard();
1777 return 0;
1778 }
1779
1780
1781 if(pobj_nv->bPasteIndent){
1782 //インデント整形
1783 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
1784 GlobalUnlock(hGlobal);
1785 }
1786 else pTemp=(char *)GlobalLock(hGlobal);
1787
1788
1789 //テキストエディタの文字列をリプレイス
1790 TextEdit_ReplaceUpdateUndoData(WndNum,
1791 pTemp,
1792 1,
1793 1);
1794
1795 if(pobj_nv->bPasteIndent)
1796 HeapDefaultFree(pTemp);
1797 else
1798 GlobalUnlock(hGlobal);
1799
1800 //クリップボードを閉じる
1801 CloseClipboard();
1802
1803
1804 //キャレット位置までスクロールする
1805 TextEdit_ScrollCaret(WndNum,0);
1806 ResetCaretPos(WndNum);
1807 }
1808 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1809 OpenClipboard(hwnd);
1810 hGlobal=GetClipboardData(dwRadClipboardID);
1811 if(!hGlobal){
1812 CloseClipboard();
1813 return 0;
1814 }
1815 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
1816 CloseClipboard();
1817 }
1818 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1819 OpenClipboard(hwnd);
1820 hGlobal=GetClipboardData(CF_BITMAP);
1821 if(!hGlobal){
1822 CloseClipboard();
1823 return 0;
1824 }
1825 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
1826 CloseClipboard();
1827 }
1828 return 0;
1829 case IDM_DELETE:
1830 hChild=GetWindow(hClient,GW_CHILD);
1831 WndNum=GetWndNum(hChild);
1832 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1833 hEdit=GetWindow(hChild,GW_CHILD);
1834 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
1835 }
1836 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1837 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1838 return 0;
1839 case IDM_ALLSELECT:
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
[24]1845 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
1846 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
[3]1847
1848 GetCaretPosFromBufferIndex(
[24]1849 MdiInfo[WndNum].pMdiTextEdit->buffer,
1850 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
1851 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
[3]1852
1853 InvalidateRect(hEdit,NULL,0);
1854
1855 ResetState_EditMenu();
1856 }
1857 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1858 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1859 for(i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
1860 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
1861 }
1862 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
1863 }
1864 return 0;
1865 case IDM_FIND:
1866 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),hOwner,DlgFind);
1867 return 0;
1868 case IDM_PERMUTATION:
1869 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),hOwner,DlgPermutation);
1870 return 0;
1871
1872
1873 ///////////////////////
1874 // 変換メニュー
1875 ///////////////////////
1876 case IDM_CONV_ALPHA_SMALL:
1877 case IDM_CONV_ALPHA_BIG:
1878 case IDM_CONV_HALF:
1879 case IDM_CONV_MULTI:
1880 case IDM_CONV_KATAKANA:
1881 case IDM_CONV_HIRAGANA:
1882 case IDM_CONV_SPACE:
1883 case IDM_CONV_TAB:
1884#ifdef THETEXT
1885 case IDM_CONV_HASRETURN:
1886 case IDM_CONV_QUOTE:
1887#else
1888 case IDM_CODEFORMAT:
1889#endif
1890 TextEdit_Convert(LOWORD(wParam));
1891 return 0;
1892
1893#ifdef THETEXT
1894 ///////////////////////
1895 // ツールメニュー
1896 ///////////////////////
1897 case IDM_STRING_COUNT:
1898 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,DlgStringCount,0);
1899 return 0;
1900 case IDM_SEL_STRING_COUNT:
1901 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,DlgStringCount,1);
1902 return 0;
1903#endif //THETEXT
1904
1905 case IDM_PROJECTVIEW:
1906 if(pobj_nv->bClipProjectView){
1907 if(IsWindowVisible(hProjectView)){
1908 ShowWindow(hProjectView,SW_HIDE);
1909 bChecked=0;
1910 }
1911 else{
1912 ShowWindow(hProjectView,SW_SHOW);
1913 bChecked=1;
1914 }
1915 }
1916 else{
1917 if(IsWindowVisible(hProjectView_ToolWindow)){
1918 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
1919 bChecked=0;
1920 }
1921 else{
1922 ShowWindow(hProjectView_ToolWindow,SW_SHOW);
1923 ShowWindow(hProjectView,SW_SHOW);
1924 bChecked=1;
1925 }
1926 }
1927 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked);
1928
1929 //再配置
1930 ResizeOwnerWnd();
1931
1932 ShowWindow(hClient,SW_SHOW);
1933 return 0;
1934 case IDM_PROJECT_OPTION:
1935 DlgProjectOptionSetting(hwnd);
1936 return 0;
1937 case IDM_TOPMOST:
1938 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
1939 SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1940 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
1941 }
1942 else{
1943 SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1944 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
1945 }
1946 return 0;
1947
1948#ifdef THETEXT
1949 case IDM_RIGHT_TURN:
1950 pobj_nv->bRightTurn^=1;
1951 ResetState_ViewMenu();
1952
1953 //トップのウィンドウを再描画
1954 RedrawAllWindow();
1955
1956 return 0;
1957#endif
1958
1959 case IDM_SET:
1960 DlgOptionSetting(hwnd);
1961 return 0;
1962
1963#ifndef THETEXT
1964 case IDM_DEBUG:
1965 if(pobj_Debugger->IsDebugging()){
1966 pobj_Debugger->DebugContinue();
1967 return 0;
1968 }
1969
1970 hChild=GetWindow(hClient,GW_CHILD);
1971 if(ProjectInfo.name[0]){
1972 //プロジェクトが開かれている場合
1973 if(!SetProjectToRun()) return 0;
1974
1975 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
1976 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
1977 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
1978 hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
1979 DWORD dwAccessBytes;
1980 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
1981 CloseHandle(hFile);
1982
1983 //ソースファイル名をtemp2へ
1984 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1985
1986 //出力ファイル名をtemp3へ
1987 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1988 GetFullPath(temp3,ProjectInfo.dir);
1989
1990 if(IsNeedCompileForProject(1))
1991 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
1992 else
1993 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
1994
1995 //DLLオプション
1996 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1997
1998 //ブレークポイントをセーブ
1999 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
2000 }
2001 else{
2002 //単独ソースコード
2003 if(!SetRunning(hChild)) return 0;
2004 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
2005 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2006 else
2007 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2008
2009 //ブレークポイントをセーブ
2010 pobj_DBBreakPoint->SaveToTempFile();
2011 }
2012
2013 //コンパイルビューをクリップするかどうか
2014 if(bClipCompileView){
2015 lstrcat(temporary," /clip_compile_view");
2016
2017 //コンパイラビューを閉じる
2018 if(hCompileView==(HWND)-1) return 0;
2019 if(hCompileView){
2020 hChild=hCompileView;
2021 hCompileView=(HWND)-1;
2022 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2023 }
2024
2025 //重複起動防止のため
2026 hCompileView=(HWND)-1;
2027 }
2028
2029 sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
2030 ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
2031 return 0;
2032 case IDM_DEBUGCOMPILE:
2033 hChild=GetWindow(hClient,GW_CHILD);
2034 if(ProjectInfo.name[0]){
2035 //プロジェクトが開かれている場合
2036 if(!SetProjectToRun()) return 0;
2037
2038 //ソースファイル名をtemp2へ
2039 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2040
2041 //出力ファイル名をtemp3へ
2042 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
2043 GetFullPath(temp3,ProjectInfo.dir);
2044
2045 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
2046
2047 //DLLオプション
2048 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2049 }
2050 else{
2051 //単独ソースコード
2052 if(!SetRunning(hChild)) return 0;
2053 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2054 }
2055
2056 //コンパイルビューをクリップするかどうか
2057 if(bClipCompileView){
2058 lstrcat(temporary," /clip_compile_view");
2059
2060 //コンパイラビューを閉じる
2061 if(hCompileView==(HWND)-1) return 0;
2062 if(hCompileView){
2063 hChild=hCompileView;
2064 hCompileView=(HWND)-1;
2065 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2066 }
2067
2068 //重複起動防止のため
2069 hCompileView=(HWND)-1;
2070 }
2071
2072 //インクルードディレクトリ
2073 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2074 lstrcat(temporary,temp2);
2075
2076 sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
2077 ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
2078
2079 return 0;
2080 case IDM_ATTACH:
2081 int idProcess;
2082 DWORD dwPlatform;
2083 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,DlgAttach,(LPARAM)&dwPlatform);
2084 if(idProcess==0) return 0;
2085
2086 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
2087
2088 //コンパイルビューをクリップするかどうか
2089 if(bClipCompileView){
2090 lstrcat(temporary," /clip_compile_view");
2091
2092 //コンパイラビューを閉じる
2093 if(hCompileView==(HWND)-1) return 0;
2094 if(hCompileView){
2095 hChild=hCompileView;
2096 hCompileView=(HWND)-1;
2097 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2098 }
2099
2100 //重複起動防止のため
2101 hCompileView=(HWND)-1;
2102 }
2103
2104 //インクルードディレクトリ
2105 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2106 lstrcat(temporary,temp2);
2107
2108 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
2109 sprintf(str,"%s%s",pj_editor_Dir,WIN32_COMPILER_NAME);
2110 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
2111 sprintf(str,"%s%s",pj_editor_Dir,WIN64_COMPILER_NAME);
2112
2113 ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
2114 return 0;
2115 case IDM_RELEASECOMPILE:
2116 hChild=GetWindow(hClient,GW_CHILD);
2117 if(ProjectInfo.name[0]){
2118 //プロジェクトが開かれている場合
2119 if(!SetProjectToRun()) return 0;
2120
2121 //ソースファイル名をtemp2へ
2122 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
2123
2124 //出力ファイル名をtemp3へ
2125 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
2126 GetFullPath(temp3,ProjectInfo.dir);
2127
2128 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
2129
2130 //DLLオプション
2131 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2132 }
2133 else{
2134 //単独ソースコード
2135 if(!SetRunning(hChild)) return 0;
2136 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2137 }
2138
2139 //コンパイルビューをクリップするかどうか
2140 if(bClipCompileView){
2141 lstrcat(temporary," /clip_compile_view");
2142
2143 //コンパイラビューを閉じる
2144 if(hCompileView==(HWND)-1) return 0;
2145 if(hCompileView){
2146 hChild=hCompileView;
2147 hCompileView=(HWND)-1;
2148 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2149 }
2150
2151 //重複起動防止のため
2152 hCompileView=(HWND)-1;
2153 }
2154
2155 //インクルードディレクトリ
2156 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2157 lstrcat(temporary,temp2);
2158
2159 sprintf(str,"%s%s",pj_editor_Dir,lpszCompilerName);
2160 ShellExecute(hwnd,"open",str,temporary,NULL,SW_SHOWNORMAL);
2161 return 0;
2162 case IDM_RELEASERUN:
2163 hChild=GetWindow(hClient,GW_CHILD);
2164 if(ProjectInfo.name[0]){
2165/* //プロジェクトが開かれている場合
2166 if(!SetProjectToRun()) return 0;
2167
2168 //必要であればリリースコンパイル
2169 if(IsNeedCompileForProject(0))
2170 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2171
2172 if(ProjectInfo.dwModuleType==MT_DLL){
2173 lstrcpy(temporary,ProjectInfo.szExePath);
2174 }
2175 else{
2176 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2177 GetFullPath(temporary,ProjectInfo.dir);
2178 }
2179 }
2180 else{
2181/* //必要であればリリースコンパイル
2182 if(!SetRunning(hChild)) return 0;
2183
2184 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
2185 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2186
2187 //単独ソースコード
2188 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
2189 lstrcat(temporary,temp2);
2190 lstrcat(temporary,temp3);
2191 lstrcat(temporary,".exe");
2192 }
2193
2194 //インクルードディレクトリ
2195 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->szIncludeDir);
2196 lstrcat(temporary,temp2);
2197
2198 ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
2199 return 0;
2200
2201
2202 ////////////////////////
2203 // デバッグ コマンド
2204 ////////////////////////
2205
2206 case IDM_STEP_IN:
2207 pobj_Debugger->StepIn();
2208 break;
2209 case IDM_STEP_OVER:
2210 pobj_Debugger->StepOver();
2211 break;
2212 case IDM_STEP_CURSOR:
2213 pobj_Debugger->StepToCursor();
2214 break;
2215 case IDM_BREAKPOINT:
2216 if(ProjectInfo.name[0]){
2217 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
2218 }
2219 else{
2220 pobj_DBBreakPoint->Event_BreakPoint();
2221 }
2222 break;
2223 case IDM_DEBUG_STOP:
2224 pobj_Debugger->DebugStop();
2225 break;
2226 case IDM_DEBUG_PAUSE:
2227 pobj_Debugger->DebugPause();
2228 break;
2229
2230
2231 case IDM_COMMUNITY:
2232 ShellExecute(hwnd,"open","iexplore.exe",
2233 "http://www.activebasic.com/forum/",
2234 NULL,SW_SHOWNORMAL);
2235 return 0;
2236 case IDM_COMMU_SEARCH:
2237 ShellExecute(hwnd,"open","iexplore.exe",
2238 "http://www.activebasic.com/forum/search.php",
2239 NULL,SW_SHOWNORMAL);
2240 return 0;
2241 case IDM_COMMU_PM:
2242 ShellExecute(hwnd,"open","iexplore.exe",
2243 "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
2244 NULL,SW_SHOWNORMAL);
2245 return 0;
2246 case ID_COMMU_FORUM1:
2247 ShellExecute(hwnd,"open","iexplore.exe",
2248 "http://www.activebasic.com/forum/viewforum.php?f=1",
2249 NULL,SW_SHOWNORMAL);
2250 return 0;
2251 case ID_COMMU_FORUM2:
2252 ShellExecute(hwnd,"open","iexplore.exe",
2253 "http://www.activebasic.com/forum/viewforum.php?f=2",
2254 NULL,SW_SHOWNORMAL);
2255 return 0;
2256 case ID_COMMU_FORUM3:
2257 ShellExecute(hwnd,"open","iexplore.exe",
2258 "http://www.activebasic.com/forum/viewforum.php?f=5",
2259 NULL,SW_SHOWNORMAL);
2260 return 0;
2261 case ID_COMMU_FORUM4:
2262 ShellExecute(hwnd,"open","iexplore.exe",
2263 "http://www.activebasic.com/forum/viewforum.php?f=3",
2264 NULL,SW_SHOWNORMAL);
2265 return 0;
2266 case ID_COMMU_FORUM5:
2267 ShellExecute(hwnd,"open","iexplore.exe",
2268 "http://www.activebasic.com/forum/viewforum.php?f=6",
2269 NULL,SW_SHOWNORMAL);
2270 return 0;
2271 case ID_COMMU_FORUM6:
2272 ShellExecute(hwnd,"open","iexplore.exe",
2273 "http://www.activebasic.com/forum/viewforum.php?f=8",
2274 NULL,SW_SHOWNORMAL);
2275 return 0;
2276 case ID_COMMU_FORUM7:
2277 ShellExecute(hwnd,"open","iexplore.exe",
2278 "http://www.activebasic.com/forum/viewforum.php?f=4",
2279 NULL,SW_SHOWNORMAL);
2280 return 0;
2281 case ID_COMMU_FORUM8:
2282 ShellExecute(hwnd,"open","iexplore.exe",
2283 "http://www.activebasic.com/forum/viewforum.php?f=7",
2284 NULL,SW_SHOWNORMAL);
2285 return 0;
2286#endif //THETEXT
2287
2288
2289 case IDM_TOPIC:
2290#ifdef THETEXT
2291 sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
2292 ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
2293#else
2294 sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
2295 HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
2296#endif
2297 return 0;
2298
2299#ifdef THETEXT
2300 case IDM_DSHOMEPAGE:
2301 ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
2302 return 0;
2303#else
2304 case IDM_AB_WEBSITE:
2305 ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
2306 return 0;
2307 case IDM_ACTBDL:
2308 ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
2309 return 0;
2310#endif
2311
2312 case IDM_ABOUT:
2313 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,DialogAbout);
2314 return 0;
2315
2316 case IDM_WEB_SEARCH:
2317 hChild=GetWindow(hClient,GW_CHILD);
2318 WndNum=GetWndNum(hChild);
2319 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2320 extern HWND hWebSearchCombo;
2321 SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
2322 }
2323 return 0;
2324
2325
2326
2327 //////////////////////////////////////////////////////
2328 // レバーコントロールのサブメニューコマンド(レバー追加)
2329 //////////////////////////////////////////////////////
2330
2331 case IDM_DOCSELECTBAND:
2332 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
2333 return 0;
2334 case IDM_STANDARDBAND:
2335 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
2336 return 0;
2337#ifndef THETEXT
2338 case IDM_RELEASEBAND:
2339 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
2340 return 0;
2341 case IDM_DEBUGBAND:
2342 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
2343 return 0;
2344 case IDM_SELECTCOMPILERBAND:
2345 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
2346 return 0;
2347#endif
2348 case IDM_BANDMENU_WEB_SEARCH:
2349 pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
2350 return 0;
2351 case IDM_NOGRIPPER:
2352 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
2353 else pobj_nv->bNoGripper=1;
2354
2355 //レバーコントロールを再生成
2356 pobj_Rebar->ResetRebar();
2357
2358 //メニュー状態を設定
2359 ResetState_DocMenu();
2360 return 0;
2361 case IDM_RESET_REBAR:
2362 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
2363 if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
2364
2365 //レバーコントロールを再生成
2366 pobj_Rebar->ResetInitRebar();
2367
2368 //メニュー状態を設定
2369 ResetState_DocMenu();
2370 return 0;
2371
2372
2373
2374 ////////////////////////////////////////////////////
2375 // メイン タブ コントロールのサブメニューコマンド
2376 ////////////////////////////////////////////////////
2377
2378 case IDM_ALLCLOSE_OMIT_MYSELF:
2379 //このウィンドウ以外をすべて閉じる(&A)
2380 hChild=GetWindow(hClient,GW_CHILD);
2381 WndNum=GetWndNum(hChild);
2382 for(i=0;i<MAX_WNDNUM;i++){
2383 if(i==WndNum) continue;
2384 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
2385 }
2386 return 0;
2387
2388 case IDM_PATH_COPY:
2389 hChild=GetWindow(hClient,GW_CHILD);
2390 WndNum=GetWndNum(hChild);
2391
2392 //絶対パスをコピー
2393 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
2394 pTemp=(char *)GlobalLock(hGlobal);
2395 lstrcpy(pTemp,MdiInfo[WndNum].path);
2396 GlobalUnlock(hGlobal);
2397
2398 //クリップボードに保存
2399 OpenClipboard(hwnd);
2400 EmptyClipboard();
2401 SetClipboardData(CF_TEXT,hGlobal);
2402 CloseClipboard();
2403 return 0;
2404
2405 case IDM_FOLDER_OPEN:
2406 hChild=GetWindow(hClient,GW_CHILD);
2407 WndNum=GetWndNum(hChild);
2408
2409 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
2410 lstrcat(temporary,temp2);
2411
2412 ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
2413 return 0;
2414
2415 case IDM_DELETE_FILE:
2416 hChild=GetWindow(hClient,GW_CHILD);
2417 WndNum=GetWndNum(hChild);
2418
2419 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
2420 lstrcat(temporary,temp2);
2421
2422 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
2423 if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
2424
2425 //ゴミ箱へ
2426 SHFILEOPSTRUCT fo;
2427 fo.hwnd=hwnd;
2428 fo.wFunc=FO_DELETE;
2429 fo.pFrom =MdiInfo[WndNum].path;
2430 fo.pTo="\0";
2431 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
2432 SHFileOperation(&fo);
2433
2434 //閉じる
[24]2435 MdiInfo[WndNum].pMdiTextEdit->UnModify();
[3]2436 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
2437
2438 return 0;
2439
2440 case IDM_USER_COLOR:
2441 {
2442 CHOOSECOLOR cc;
2443 COLORREF CusColors[16]={
2444 RGB(255,255,255),
2445 RGB(0,0,0),
2446 RGB(128,128,128),
2447 RGB(192,192,192),
2448 RGB(128,0,0),
2449 RGB(255,0,0),
2450 RGB(128,128,0),
2451 RGB(255,255,0),
2452 RGB(0,128,0),
2453 RGB(0,255,0),
2454 RGB(0,128,128),
2455 RGB(0,255,255),
2456 RGB(0,0,128),
2457 RGB(0,0,255),
2458 RGB(128,0,128),
2459 RGB(255,0,255)};
2460 cc.lStructSize=sizeof(CHOOSECOLOR);
2461 cc.hwndOwner=hwnd;
2462 cc.rgbResult=colorUser;
2463 cc.lpCustColors=CusColors;
2464 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
2465 if(!ChooseColor(&cc)){
2466 return 0;
2467 }
2468 colorUser=cc.rgbResult;
2469 }
2470 case IDM_GRAY:
2471 case IDM_WHITE:
2472 case IDM_RED:
2473 case IDM_GREEN:
2474 case IDM_BLUE:
2475 case IDM_YELLOW:
2476 hChild=GetWindow(hClient,GW_CHILD);
2477 WndNum=GetWndNum(hChild);
2478
2479 TC_ITEM tcItem;
2480 tcItem.mask=TCIF_PARAM;
2481 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
2482 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
2483 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
2484 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
2485 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
2486 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
2487 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
2488 TabCtrl_SetItem(pobj_MainTab->hTab,
2489 TabCtrl_GetCurSel(pobj_MainTab->hTab),
2490 &tcItem);
2491 InvalidateRect(pobj_MainTab->hTab,NULL,0);
2492 return 0;
2493
2494
2495
2496 //////////////////////////////////
2497 // SideWeb
2498 //////////////////////////////////
2499
2500 case IDC_CLIP:
2501 pobj_SideWeb->bShow=0;
2502 ResizeOwnerWnd();
2503 return 0;
2504 }
2505 break;
2506 case WM_DROPFILES:
2507 hDrop=(HDROP)wParam;
2508
2509 i2=DragQueryFile(hDrop,-1,0,0);
2510 for(i=0;i<i2;i++){
2511 DragQueryFile(hDrop,i,str,MAX_PATH);
2512 OpenFileWithExtension(str);
2513 }
2514 DragFinish(hDrop);
2515 return 0;
2516 case WM_SHOWERROR:
2517 //エラー部分を反転表示
2518 DWORD AccBytes;
2519 HANDLE fh;
2520 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
2521 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2522 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
2523 CloseHandle(fh);
2524 temporary[AccBytes]=0;
2525 hChild=GetWindow(hClient,GW_CHILD);
2526 while(hChild){
2527 WndNum=GetWndNum(hChild);
2528 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2529 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
2530 }
2531 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2532 }
2533 if(!hChild){
2534 hChild=OpenFileWithExtension(temporary);
2535 WndNum=GetWndNum(hChild);
2536 }
2537
2538 if(WndNum==-1) return 0;
2539
2540 //ウィンドウを最前面に表示
2541 BringWindowToTop(hChild);
2542 UpdateWindow(hChild);
2543
[24]2544 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
[3]2545
2546 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
2547 for(i=0,i2=0;;i++){
2548 if(i2>=(int)wParam) break;
2549 if(pTemp[i]=='\0') break;
2550 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
2551 i++;
2552 i2++;
2553 }
2554 }
2555 pos.x=i;
2556
2557 //行の終端インデックスを取得
2558 for(;;i++){
2559 if(pTemp[i]=='\0') break;
2560 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
2561 }
2562 pos.y=i;
2563
2564 //行を選択する
2565 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2566
2567 return 0;
2568
2569#ifndef THETEXT
2570 case WM_SETCOMPILEVIEW:
2571 //コンパイラウィンドウ(埋め込み型)が表示されたとき
2572 hCompileView=(HWND)lParam;
2573 ResizeOwnerWnd();
2574 return 0;
2575 case WM_DESTROYCOMPILEVIEW:
2576 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2577 if((int)hCompileView==-1){
2578 //すぐに次のコンパイラウィンドウが起動するとき
2579 hCompileView=0;
2580 }
2581 else{
2582 //完全にコンパイラウィンドウを閉じたときはリサイズ
2583 hCompileView=0;
2584
2585 ResizeOwnerWnd();
2586 }
2587 return 0;
2588
2589 case WM_SETDEBUGGERBASE:
2590 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2591 pobj_Debugger->begin();
2592
2593 //BasicCompiler.exeの強制終了を考慮
2594 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2595
2596 return 0;
2597 case WM_DESTROYDEBUGGERBASE:
2598 //BasicCompiler.exeの強制終了を考慮
2599 KillTimer(hOwner,ID_DEBUGSAFTY);
2600
2601 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2602 pobj_Debugger->end();
2603
2604 return 0;
2605
2606 case WM_SETDEBUGGERVIEW:
2607 //デバッガウィンドウ(埋め込み型)が表示されたとき
2608 pobj_Debugger->watch_start((HWND)lParam);
2609 ResizeOwnerWnd();
2610 return 0;
2611 case WM_DESTROYDEBUGGERVIEW:
2612 //デバッガウィンドウ(埋め込み型)が破棄されたとき
2613 pobj_Debugger->watch_quit();
2614 ResizeOwnerWnd();
2615 return 0;
2616#endif
2617
2618 case WM_SIZE:
2619 ResizeOwnerWnd();
2620 return 0;
2621
2622
2623 case WM_MOUSEMOVE:
2624 static DWORD dwDragLever;
2625 static POINT PrevMousePos;
2626 static int start;
2627
2628 pos.x=(long)(short)LOWORD(lParam);
2629 pos.y=(long)(short)HIWORD(lParam);
2630 ClientToScreen(hwnd,&pos);
2631
2632 if(dwDragLever){
2633 GetClientRect(hwnd,&rect);
2634
2635 if(dwDragLever==1){
2636 //プロジェクトビューをリサイズ中
2637 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2638 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2639 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2640 }
2641 else if(dwDragLever==2){
2642 //デバッガビューをリサイズ中
2643 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2644 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2645 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2646 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2647 }
2648 else if(dwDragLever==3){
2649 //コンパイラビューをリサイズ中
2650 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2651 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2652 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2653 pobj_nv->height_ClipCompileView=rect.bottom-100;
2654 }
2655 else if(dwDragLever==4){
2656 //SideWebをリサイズ中
2657 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2658 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2659 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2660 }
2661
2662 ResizeOwnerWnd();
2663 UpdateWindow(hwnd);
2664 }
2665 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2666 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2667 GetWindowRect(hProjectView,&rect);
2668 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2669 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2670 SetCursor(LoadCursor(0,IDC_SIZEWE));
2671 }
2672 }
2673#ifndef THETEXT
2674 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2675 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2676 GetWindowRect(pobj_Debugger->hwnd,&rect);
2677 if(rect.left<=pos.x&&pos.x<=rect.right&&
2678 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2679 SetCursor(LoadCursor(0,IDC_SIZENS));
2680 }
2681 }
2682 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2683 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2684 GetWindowRect(hCompileView,&rect);
2685 if(rect.left<=pos.x&&pos.x<=rect.right&&
2686 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2687 SetCursor(LoadCursor(0,IDC_SIZENS));
2688 }
2689 }
2690#endif
2691 if(pobj_SideWeb->bShow){
2692 //SideWebとMDIクライアントの境目のサイズ変更ライン
2693 pobj_SideWeb->GetRect(&rect);
2694 ClientToScreen(hwnd,&rect);
2695 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2696 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2697 SetCursor(LoadCursor(0,IDC_SIZEWE));
2698 }
2699 }
2700 return 0;
2701 case WM_LBUTTONDOWN:
2702 pos.x=LOWORD(lParam);
2703 pos.y=HIWORD(lParam);
2704 ClientToScreen(hwnd,&pos);
2705
2706 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2707 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2708 GetWindowRect(hProjectView,&rect);
2709 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2710 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2711 SetCursor(LoadCursor(0,IDC_SIZEWE));
2712
2713 dwDragLever=1;
2714 SetCapture(hwnd);
2715
2716 PrevMousePos=pos;
2717 start=pobj_nv->width_ClipProjectView;
2718 }
2719 }
2720#ifndef THETEXT
2721 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2722 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2723 GetWindowRect(pobj_Debugger->hwnd,&rect);
2724 if(rect.left<=pos.x&&pos.x<=rect.right&&
2725 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2726 SetCursor(LoadCursor(0,IDC_SIZENS));
2727
2728 dwDragLever=2;
2729 SetCapture(hwnd);
2730
2731 PrevMousePos=pos;
2732 start=pobj_nv->height_ClipDebuggerView;
2733 }
2734 }
2735 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2736 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2737 GetWindowRect(hCompileView,&rect);
2738 if(rect.left<=pos.x&&pos.x<=rect.right&&
2739 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2740 SetCursor(LoadCursor(0,IDC_SIZENS));
2741
2742 dwDragLever=3;
2743 SetCapture(hwnd);
2744
2745 PrevMousePos=pos;
2746 start=pobj_nv->height_ClipCompileView;
2747 }
2748 }
2749#endif
2750 if(pobj_SideWeb->bShow){
2751 //SideWebとMDIクライアントの境目のサイズ変更ライン
2752 pobj_SideWeb->GetRect(&rect);
2753 ClientToScreen(hwnd,&rect);
2754 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2755 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2756 SetCursor(LoadCursor(0,IDC_SIZENS));
2757
2758 dwDragLever=4;
2759 SetCapture(hwnd);
2760
2761 PrevMousePos=pos;
2762 start=pobj_nv->width_WebSearchView;
2763 }
2764 }
2765 return 0;
2766 case WM_LBUTTONUP:
2767 if(dwDragLever){
2768 dwDragLever=0;
2769 ReleaseCapture();
2770 }
2771 return 0;
2772
2773
2774 case WM_SYSCOMMAND:
2775 //ウィンドウの最小化前にウィンドウ位置を保存
2776 if(wParam==SC_MINIMIZE){
2777 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2778 else if(!IsIconic(hwnd)){
2779 pobj_nv->bWindowMax=0;
2780 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2781 }
2782 }
2783 break; //処理をDefFrameProcへ
2784 case WM_QUERYENDSESSION:
2785 case WM_CLOSE:
2786 extern BOOL bSearchingClasses;
2787 if(bSearchingClasses){
2788 pobj_ClassTreeView->bCloseSwitch=1;
2789 return 0;
2790 }
2791
2792 //コンパイラビューを閉じる
2793 if(hCompileView)
2794 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2795
2796 //次回起動時にMDIウィンドウを最大化させるかを判定
2797 hChild=GetWindow(hClient,GW_CHILD);
2798 pobj_nv->bMDIZoomed=IsZoomed(hChild);
2799
2800 //プロジェクトを閉じる
2801 if(ProjectInfo.name[0]){
2802 if(!CloseProject()) return 0;
2803 }
2804
2805 //MDIウィンドウの保存確認
2806 hChild=GetWindow(hClient,GW_CHILD);
2807 while(hChild){
2808 i=GetWndNum(hChild);
2809 if(!DocumentModifyCheck(hChild)) return 0;
2810 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2811 }
2812
2813
[22]2814 KillTimer(hwnd,ID_TIMER_BACKUP);
[3]2815
2816
2817 //ProjectViewの位置を保存、ProjectViewを破棄
2818 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2819 DestroyWindow(hProjectView);
2820 DestroyWindow(hProjectView_ToolWindow);
2821
2822 //Rebarの位置を保存、Rebarを破棄
2823 delete pobj_Rebar;
2824 pobj_Rebar=0;
2825
2826 //タブコントロールを破棄
2827 delete pobj_MainTab;
2828 pobj_MainTab=0;
2829
2830 //SideWebを破棄
2831 delete pobj_SideWeb;
2832 pobj_SideWeb=0;
2833
2834 //メインウィンドウの最大化有無、座標を保存
2835 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2836 else if(!IsIconic(hwnd)){
2837 pobj_nv->bWindowMax=0;
2838 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2839 }
2840
2841 hChild=GetWindow(hClient,GW_CHILD);
2842 while(hChild){
2843 CloseDocWindow(GetWndNum(hChild));
2844 DestroyWindow(hChild);
2845 hChild=GetWindow(hClient,GW_CHILD);
2846 }
2847
2848 EndProjectEditor(); //ProjectEditorの情報を保存
2849
2850 //エディタ用フォントを破棄
2851 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2852 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2853 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2854
2855 DestroyWindow(hwnd);
2856 return 0;
2857
2858 case WM_DESTROY:
2859 PostQuitMessage(0);
2860 return 0;
2861 }
2862 return DefFrameProc(hwnd,hClient,message,wParam,lParam);
2863}
2864
2865int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2866 WNDCLASSEX wcl;
2867
2868 wcl.cbSize=sizeof(WNDCLASSEX);
2869 wcl.hInstance=hInst;
2870 wcl.lpszClassName=lpClassName;
2871 wcl.lpfnWndProc=WndProc;
2872
2873 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2874 else wcl.style=0;
2875
2876 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2877 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2878
2879 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2880 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2881
2882 wcl.lpszMenuName=NULL;
2883 wcl.cbClsExtra=0;
2884 wcl.cbWndExtra=0;
2885 wcl.hbrBackground=hBackBrush;
2886
2887 return RegisterClassEx(&wcl);
2888}
2889int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2890 int i,i2,IsStr;
2891 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2892 MSG msg;
2893 HACCEL hAccel;
2894
2895 hInst=hThisInst;
2896 if(!SetupProjectEditor()) return 0;
2897
2898 HBRUSH hGrayBrush_LineNumber;
2899 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2900
2901 if(!RegWndClass(WindowFunc,"ProjectEditor",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2902 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2903 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2904 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2905 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2906 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2907 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2908 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2909 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2910 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2911 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2912 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2913 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2914 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2915 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2916 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2917 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2918
2919 //Web検索用のウィンドウクラス
2920 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2921 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2922 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2923
2924 //ルーラーのウィンドウクラス
2925 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2926
2927 //SideWebのウィンドウクラス
2928 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2929
2930
2931
2932 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
2933
2934 //メインウィンドウ
2935 RECT *prc;
2936 prc=&pobj_nv->StartupWindowRect;
2937 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditor",APPLICATION_NAME,
2938 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
2939 prc->left, prc->top,
2940 prc->right-prc->left, prc->bottom-prc->top,
2941 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
2942
2943 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
2944 SetClipboardViewer(hOwner);
2945
2946 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
2947 else ShowWindow(hOwner,ShowCmd);
2948 UpdateWindow(hOwner);
2949
2950 int open_sw=0;
2951 if(lstrlen(lpCmdLine)>0){
2952 lstrcpy(dummy,lpCmdLine);
2953 for(i=0,i2=0,IsStr=0;;i++,i2++){
2954 if(dummy[i]=='\"'){
2955 if(IsStr==0) IsStr=1;
2956 else IsStr=0;
2957 i++;
2958 }
2959 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
2960 str[i2]=0;
2961 if(!(strstr(str,":")||strstr(str,"\\\\"))){
2962 lstrcpy(str2,str);
2963 GetCurrentDirectory(MAX_PATH,str);
2964 lstrcat(str,"\\");
2965 lstrcat(str,str2);
2966 }
2967 ShortPathToLongPath(str,str2);
2968 OpenFileWithExtension(str2);
2969 open_sw=1;
2970 if(dummy[i]=='\0') break;
2971 i2=-1;
2972 continue;
2973 }
2974 str[i2]=dummy[i];
2975 }
2976 }
2977
2978 BOOL bRestore=0;
2979
2980
[22]2981 {
2982 //自動バックアップ及び復元機能
[3]2983
2984 //必要であれば復元
2985 bRestore=restore();
2986 }
2987
2988
2989#ifdef THETEXT
2990 if(open_sw==0&&bRestore==0){
2991 //ファイルが開かれなかったとき
2992 NewTextEditWindow(NULL,WNDTYPE_TEXT);
2993 }
2994#endif
2995
2996
2997 while(GetMessage(&msg,NULL,0,0)){
2998
2999 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
3000 if(ProjectInfo.name[0]){
3001 for(i=0,i2=0;i<MAX_WNDNUM;i++){
3002 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
3003 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
3004 }
3005 }
3006 if(i2==0){
3007 if(!TranslateMDISysAccel(hClient,&msg)){
3008 TranslateMessage(&msg);
3009 DispatchMessage(&msg);
3010 }
3011 }
3012 }
3013 else{
3014 if(!TranslateMDISysAccel(hClient,&msg)){
3015 TranslateMessage(&msg);
3016 DispatchMessage(&msg);
3017 }
3018 }
3019 }
3020 }
3021
3022 DeleteObject(hGrayBrush_LineNumber);
3023
3024#if defined HeapAlloc
3025 CheckHeapCheck();
3026#endif
3027
3028 return msg.wParam;
3029}
Note: See TracBrowser for help on using the repository browser.