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

Last change on this file since 455 was 455, checked in by dai_9181, 16 years ago

・コンパイルビューへの出力を標準出力にも行うようにした。
#164への対応。コンパイルを中断すると高確率で強制終了してしまうバグを修正。
・ProjectEditorをVista用Microsoft SDKにてビルドできるようにした(WINVER定数を0x0501に指定した)。
#168への対応。エディタ上のDelegateキーワードを青色で表示するようにした。

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