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

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

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

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