source: dev/trunk/ab5.0/abdev/abdev/abdev.cpp@ 499

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

・いくつかのメニューをMainFrameに実装しなおした
・TheTextでビルドが通るようにした。

File size: 73.3 KB
Line 
1#include "stdafx.h"
2
3#include "abdev.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 std::string &appPath, const std::string &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 CloseDocWindow(int WndNum){
991 int i2,i3;
992
993 MdiInfo[WndNum].hwnd=0;
994
995 //ドキュメントコンボボックスから文字列を消去
996 extern HWND hDocCombo;
997 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
998 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
999
1000 //タブコントロールからアイテムを消去
1001 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true );
1002
1003
1004 GlobalFree(MdiInfo[WndNum].title);
1005 GlobalFree(MdiInfo[WndNum].path);
1006
1007 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1008 ////////////////////////////
1009 // テキストエディタを閉じる
1010 ////////////////////////////
1011
1012 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
1013 if(ComplementWndInfo.hWnd){
1014 //コード補完リストを破棄する
1015 DestroyWindow(ComplementWndInfo.hWnd);
1016 ComplementWndInfo.hWnd=0;
1017 }
1018
1019 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
1020 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
1021
1022 if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
1023
1024 //エディットコントロールを破棄
1025 DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1026
1027 //Web検索ウィンドウを破棄
1028 delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
1029 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
1030
1031 //ルーラーウィンドウを破棄
1032 delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
1033 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
1034
1035 //アイコンを破棄
1036 if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
1037
1038 delete MdiInfo[WndNum].pMdiTextEdit;
1039 MdiInfo[WndNum].pMdiTextEdit=0;
1040 }
1041 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1042 /////////////////////
1043 // RADツールを閉じる
1044 /////////////////////
1045
1046 for(i2=0;i2<MAX_UNDONUM;i2++){
1047 if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
1048 Rad_DeleteUndoData(WndNum,i2);
1049 }
1050 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
1051 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
1052 SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
1053 DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
1054 DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
1055 GlobalFree(MdiInfo[WndNum].MdiRadInfo);
1056 }
1057 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1058 ////////////////////////////
1059 // メニューエディタを閉じる
1060 ////////////////////////////
1061
1062 DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
1063 GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
1064 }
1065 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1066 ////////////////////////////
1067 // アイコンエディタを閉じる
1068 ////////////////////////////
1069
1070 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1071 for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1072 if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
1073 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
1074 }
1075 }
1076
1077 DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
1078 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
1079 DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
1080 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1081 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
1082 }
1083 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
1084 }
1085}
1086void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1087 int WndNum;
1088 WndNum=GetWndNum(hwnd);
1089 if(WndNum==-1) return;
1090
1091 int WebResultWndHeight;
1092 WebResultWndHeight=LINK_ITEM_HEIGHT;
1093 //未完成
1094 WebResultWndHeight=0;
1095
1096 int iHeightRuler;
1097 if(pobj_nv->bEditor_Ruler){
1098 //ルーラー
1099 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
1100 0,
1101 0,
1102 cx,
1103 HEIGHT_RULER);
1104
1105 iHeightRuler=HEIGHT_RULER;
1106
1107 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1108 }
1109 else{
1110 iHeightRuler=0;
1111
1112 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1113 }
1114
1115 //エディットウィンドウ
1116 MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
1117 0,
1118 iHeightRuler,
1119 cx,
1120 cy-WebResultWndHeight-iHeightRuler,
1121 1);
1122
1123 //Web検索ウィンドウ
1124 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
1125 0,
1126 cy-WebResultWndHeight,
1127 cx,
1128 WebResultWndHeight);
1129}
1130LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1131 int i,i2;
1132 HWND hEdit;
1133
1134 switch(message){
1135 case WM_CREATE:
1136 CREATESTRUCT *lpcs;
1137 lpcs=(CREATESTRUCT *)lParam;
1138 MDICREATESTRUCT *lpmcs;
1139 lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1140 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1141 break;
1142 case WM_MDIACTIVATE:
1143 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1144 if(MethodCheckInfo.hWnd){
1145 DestroyWindow(MethodCheckInfo.hWnd);
1146 MethodCheckInfo.hWnd=0;
1147 }
1148
1149 //以前のコード補完リストを破棄する
1150 if(ComplementWndInfo.hWnd){
1151 DestroyWindow(ComplementWndInfo.hWnd);
1152 ComplementWndInfo.hWnd=0;
1153 }
1154
1155 if(!lParam) return 0;
1156 i=GetWndNum((HWND)lParam);
1157 if(i==-1) return 0; //ウィンドウが初期状態の場合
1158
1159#ifndef THETEXT
1160 //デバッガ メニューの状態を設定
1161 pobj_Debugger->ResetCommandEnabled();
1162#endif
1163
1164 //ドキュメント セレクト コンボボックス
1165 extern HWND hDocCombo;
1166 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1167 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1168
1169 //タブコントロール
1170 pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
1171
1172 if( !ProjectInfo.name[0] ){
1173 ResetClassTree(-1);
1174 }
1175
1176 return 0;
1177 case WM_SETFOCUS:
1178 hEdit=GetWindow(hwnd,GW_CHILD);
1179 SetFocus(hEdit);
1180 SetStatusText(CmdMsg);
1181 ResetState_EditMenu();
1182 ResetState_ViewMenu();
1183 break;
1184 case WM_SIZE:
1185 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1186 break;
1187 case WM_CLOSE:
1188 if(!DocumentModifyCheck(hwnd)) return 0;
1189 CloseDocWindow(GetWndNum(hwnd));
1190 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1191 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1192
1193 //メニュー状態を設定
1194 ResetState_DocMenu();
1195
1196 return i;
1197 }
1198 return DefMDIChildProc(hwnd,message,wParam,lParam);
1199}
1200void ResizeOwnerWnd(void){
1201 int width_owner,height_owner;
1202 int height_Rebar;
1203 int height_MdiClient;
1204 RECT rect,StatusRect,RebarRect;
1205
1206 GetClientRect(hOwner,&rect);
1207 width_owner=rect.right;
1208 height_owner=rect.bottom;
1209
1210 //Rebar
1211 SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1212 UpdateWindow(pobj_Rebar->hRebar);
1213
1214 //Status bar
1215#define STATUSBAR_PARTS_NUM 5
1216 int sb_size[STATUSBAR_PARTS_NUM];
1217 sb_size[0]=width_owner-340;
1218 sb_size[1]=width_owner-220;
1219 sb_size[2]=width_owner-120;
1220 sb_size[3]=width_owner-50;
1221 sb_size[4]=width_owner;
1222 SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
1223 SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1224 UpdateWindow(hStatusBar);
1225
1226 //Status bar
1227 int height_Statusbar;
1228 SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
1229 height_Statusbar=StatusRect.bottom;
1230
1231 GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
1232 height_Rebar=RebarRect.bottom-RebarRect.top+2;
1233
1234 int height_dv; //Width of Debugger View
1235 int height_cv; //Width of Compiler View
1236 height_dv=0;
1237 height_cv=0;
1238#ifndef THETEXT
1239 if(bClipCompileView){
1240 if(pobj_Debugger->IsDebuggerView()){
1241 //デバッガビューが表示されているとき
1242 height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
1243 }
1244 if(hCompileView){
1245 //コンパイラビューが表示されているとき
1246 height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
1247 }
1248 }
1249#endif
1250
1251 int width_pjv=0; //Width of Project View
1252 if(pobj_nv->bClipProjectView){
1253 if(IsWindowVisible(hProjectView)){
1254 //プロジェクトビューが表示されているとき
1255 width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
1256 }
1257 }
1258
1259 int width_SideWeb=0;
1260 if( pobj_SideWeb )
1261 {
1262 if(pobj_SideWeb->bShow){
1263 width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
1264 }
1265 }
1266
1267 //MDIクライアントの高さ
1268 height_MdiClient=height_owner-(
1269 height_Rebar+
1270 height_dv+
1271 height_cv+
1272 height_Statusbar
1273 );
1274
1275 //タブコントロール
1276 int tab_height;
1277 if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
1278 else{
1279 RECT rc;
1280 TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
1281 tab_height=rc.bottom-rc.top;
1282 }
1283 MoveWindow(pobj_MainTab->hTab,
1284 width_pjv,
1285 height_Rebar,
1286 width_owner-width_pjv-width_SideWeb,
1287 tab_height,
1288 1);
1289
1290 //MDIクライアント
1291 MoveWindow(hClient,
1292 width_pjv,
1293 height_Rebar+tab_height,
1294 width_owner-width_pjv-width_SideWeb,
1295 height_MdiClient-tab_height,
1296 1);
1297
1298 if( pobj_SideWeb )
1299 {
1300 if(pobj_SideWeb->bShow){
1301 //SideWeb
1302 pobj_SideWeb->resize(
1303 width_owner - pobj_nv->width_WebSearchView,
1304 height_Rebar,
1305 pobj_nv->width_WebSearchView,
1306 height_MdiClient);
1307 }
1308 else pobj_SideWeb->resize(0,0,0,0);
1309 }
1310
1311 if(width_pjv){
1312 //プロジェクトビュー
1313 MoveWindow(hProjectView,
1314 0,
1315 height_Rebar,
1316 pobj_nv->width_ClipProjectView,
1317 height_MdiClient,
1318 1);
1319 InvalidateRect(hProjectView,NULL,0);
1320 }
1321
1322 if(height_dv){
1323#ifndef THETEXT
1324 //デバッガビュー
1325 pobj_Debugger->resize(
1326 0,
1327 height_Rebar+height_MdiClient+LEVER_THICK,
1328 width_owner,
1329 pobj_nv->height_ClipDebuggerView);
1330#endif
1331 }
1332 if(height_cv){
1333 //コンパイラビュー
1334 MoveWindow(hCompileView,
1335 0,
1336 height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
1337 width_owner,
1338 pobj_nv->height_ClipCompileView,
1339 1);
1340 }
1341}
1342
1343WNDPROC oldMainFrameWndProc;
1344LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1345 int i,i2,WndNum;
1346 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
1347 HWND hChild;
1348 RECT rect;
1349 POINT pos;
1350 HDROP hDrop;
1351 HGLOBAL hGlobal;
1352 HANDLE hFile;
1353
1354 static COLORREF colorUser=RGB(255,255,255);
1355
1356 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1357 //「最近使ったファイル」メニューコマンド
1358 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1359 OpenFileWithExtension(str);
1360 return 0;
1361 }
1362
1363 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1364 //「最近使ったプロジェクト」メニューコマンド
1365 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1366 OpenFileWithExtension(str);
1367 return 0;
1368 }
1369
1370 switch(message)
1371 {
1372 case WM_COMMAND:
1373 switch(LOWORD(wParam)){
1374
1375#ifndef THETEXT
1376 case IDM_DEBUG:
1377 if(pobj_Debugger->IsDebugging()){
1378 pobj_Debugger->DebugContinue();
1379 return 0;
1380 }
1381
1382 hChild=GetWindow(hClient,GW_CHILD);
1383 if(ProjectInfo.name[0]){
1384 //プロジェクトが開かれている場合
1385 if(!SetProjectToRun()) return 0;
1386
1387 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
1388 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
1389 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
1390 hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
1391 DWORD dwAccessBytes;
1392 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
1393 CloseHandle(hFile);
1394
1395 //ソースファイル名をtemp2へ
1396 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1397
1398 //出力ファイル名をtemp3へ
1399 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1400 GetFullPath(temp3,ProjectInfo.dir);
1401
1402 if(IsNeedCompileForProject(1))
1403 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
1404 else
1405 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
1406
1407 //DLLオプション
1408 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1409
1410 //Unicodeオプション
1411 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1412
1413 //ブレークポイントをセーブ
1414 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
1415 }
1416 else{
1417 //単独ソースコード
1418 if(!SetRunning(hChild)) return 0;
1419 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
1420 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1421 else
1422 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1423
1424 //ブレークポイントをセーブ
1425 pobj_DBBreakPoint->SaveToTempFile();
1426 }
1427
1428 //コンパイルビューをクリップするかどうか
1429 if(bClipCompileView){
1430 lstrcat(temporary," /clip_compile_view");
1431
1432 //コンパイラビューを閉じる
1433 if(hCompileView==(HWND)-1) return 0;
1434 if(hCompileView){
1435 hChild=hCompileView;
1436 hCompileView=(HWND)-1;
1437 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1438 }
1439
1440 //重複起動防止のため
1441 hCompileView=(HWND)-1;
1442 }
1443
1444 //インクルードディレクトリ
1445 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1446 lstrcat(temporary,temp2);
1447
1448 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1449
1450 return 0;
1451 case IDM_DEBUGCOMPILE:
1452 hChild=GetWindow(hClient,GW_CHILD);
1453 if(ProjectInfo.name[0]){
1454 //プロジェクトが開かれている場合
1455 if(!SetProjectToRun()) return 0;
1456
1457 //ソースファイル名をtemp2へ
1458 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1459
1460 //出力ファイル名をtemp3へ
1461 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1462 GetFullPath(temp3,ProjectInfo.dir);
1463
1464 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
1465
1466 //DLLオプション
1467 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1468
1469 //Unicodeオプション
1470 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1471 }
1472 else{
1473 //単独ソースコード
1474 if(!SetRunning(hChild)) return 0;
1475 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1476 }
1477
1478 //コンパイルビューをクリップするかどうか
1479 if(bClipCompileView){
1480 lstrcat(temporary," /clip_compile_view");
1481
1482 //コンパイラビューを閉じる
1483 if(hCompileView==(HWND)-1) return 0;
1484 if(hCompileView){
1485 hChild=hCompileView;
1486 hCompileView=(HWND)-1;
1487 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1488 }
1489
1490 //重複起動防止のため
1491 hCompileView=(HWND)-1;
1492 }
1493
1494 //インクルードディレクトリ
1495 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1496 lstrcat(temporary,temp2);
1497
1498 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1499
1500 return 0;
1501 case IDM_ATTACH:
1502 int idProcess;
1503 DWORD dwPlatform;
1504 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1505 if(idProcess==0) return 0;
1506
1507 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
1508
1509 //コンパイルビューをクリップするかどうか
1510 if(bClipCompileView){
1511 lstrcat(temporary," /clip_compile_view");
1512
1513 //コンパイラビューを閉じる
1514 if(hCompileView==(HWND)-1) return 0;
1515 if(hCompileView){
1516 hChild=hCompileView;
1517 hCompileView=(HWND)-1;
1518 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1519 }
1520
1521 //重複起動防止のため
1522 hCompileView=(HWND)-1;
1523 }
1524
1525 //インクルードディレクトリ
1526 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1527 lstrcat(temporary,temp2);
1528
1529 ActiveBasic::Common::Platform::EnumType platform;
1530 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1531 {
1532 platform = ActiveBasic::Common::Platform::X86;
1533 }
1534 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1535 {
1536 platform = ActiveBasic::Common::Platform::X64;
1537 }
1538 else
1539 {
1540 throw;
1541 }
1542
1543 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1544
1545 return 0;
1546 case IDM_RELEASECOMPILE:
1547 hChild=GetWindow(hClient,GW_CHILD);
1548 if(ProjectInfo.name[0]){
1549 //プロジェクトが開かれている場合
1550 if(!SetProjectToRun()) return 0;
1551
1552 //ソースファイル名をtemp2へ
1553 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1554
1555 //出力ファイル名をtemp3へ
1556 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1557 GetFullPath(temp3,ProjectInfo.dir);
1558
1559 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
1560
1561 //DLLオプション
1562 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1563
1564 //Unicodeオプション
1565 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1566 }
1567 else{
1568 //単独ソースコード
1569 if(!SetRunning(hChild)) return 0;
1570 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1571 }
1572
1573 //コンパイルビューをクリップするかどうか
1574 if(bClipCompileView){
1575 lstrcat(temporary," /clip_compile_view");
1576
1577 //コンパイラビューを閉じる
1578 if(hCompileView==(HWND)-1) return 0;
1579 if(hCompileView){
1580 hChild=hCompileView;
1581 hCompileView=(HWND)-1;
1582 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1583 }
1584
1585 //重複起動防止のため
1586 hCompileView=(HWND)-1;
1587 }
1588
1589 //インクルードディレクトリ
1590 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1591 lstrcat(temporary,temp2);
1592
1593 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1594
1595 return 0;
1596 case IDM_RELEASERUN:
1597 hChild=GetWindow(hClient,GW_CHILD);
1598 if(ProjectInfo.name[0]){
1599/* //プロジェクトが開かれている場合
1600 if(!SetProjectToRun()) return 0;
1601
1602 //必要であればリリースコンパイル
1603 if(IsNeedCompileForProject(0))
1604 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1605
1606 if(ProjectInfo.dwModuleType==MT_DLL){
1607 lstrcpy(temporary,ProjectInfo.szExePath);
1608 }
1609 else{
1610 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1611 GetFullPath(temporary,ProjectInfo.dir);
1612 }
1613 }
1614 else{
1615/* //必要であればリリースコンパイル
1616 if(!SetRunning(hChild)) return 0;
1617
1618 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1619 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1620
1621 //単独ソースコード
1622 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1623 lstrcat(temporary,temp2);
1624 lstrcat(temporary,temp3);
1625 lstrcat(temporary,".exe");
1626 }
1627
1628 //インクルードディレクトリ
1629 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1630 lstrcat(temporary,temp2);
1631
1632 ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1633 return 0;
1634
1635
1636 ////////////////////////
1637 // デバッグ コマンド
1638 ////////////////////////
1639
1640 case IDM_STEP_IN:
1641 pobj_Debugger->StepIn();
1642 break;
1643 case IDM_STEP_OVER:
1644 pobj_Debugger->StepOver();
1645 break;
1646 case IDM_STEP_CURSOR:
1647 pobj_Debugger->StepToCursor();
1648 break;
1649 case IDM_BREAKPOINT:
1650 if(ProjectInfo.name[0]){
1651 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1652 }
1653 else{
1654 pobj_DBBreakPoint->Event_BreakPoint();
1655 }
1656 break;
1657 case IDM_DEBUG_STOP:
1658 pobj_Debugger->DebugStop();
1659 break;
1660 case IDM_DEBUG_PAUSE:
1661 pobj_Debugger->DebugPause();
1662 break;
1663
1664
1665 case IDM_COMMUNITY:
1666 ShellExecute(hwnd,"open","iexplore.exe",
1667 "http://www.activebasic.com/forum/",
1668 NULL,SW_SHOWNORMAL);
1669 return 0;
1670 case IDM_COMMU_SEARCH:
1671 ShellExecute(hwnd,"open","iexplore.exe",
1672 "http://www.activebasic.com/forum/search.php",
1673 NULL,SW_SHOWNORMAL);
1674 return 0;
1675 case IDM_COMMU_PM:
1676 ShellExecute(hwnd,"open","iexplore.exe",
1677 "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
1678 NULL,SW_SHOWNORMAL);
1679 return 0;
1680 case ID_COMMU_FORUM1:
1681 ShellExecute(hwnd,"open","iexplore.exe",
1682 "http://www.activebasic.com/forum/viewforum.php?f=1",
1683 NULL,SW_SHOWNORMAL);
1684 return 0;
1685 case ID_COMMU_FORUM2:
1686 ShellExecute(hwnd,"open","iexplore.exe",
1687 "http://www.activebasic.com/forum/viewforum.php?f=2",
1688 NULL,SW_SHOWNORMAL);
1689 return 0;
1690 case ID_COMMU_FORUM3:
1691 ShellExecute(hwnd,"open","iexplore.exe",
1692 "http://www.activebasic.com/forum/viewforum.php?f=5",
1693 NULL,SW_SHOWNORMAL);
1694 return 0;
1695 case ID_COMMU_FORUM4:
1696 ShellExecute(hwnd,"open","iexplore.exe",
1697 "http://www.activebasic.com/forum/viewforum.php?f=3",
1698 NULL,SW_SHOWNORMAL);
1699 return 0;
1700 case ID_COMMU_FORUM5:
1701 ShellExecute(hwnd,"open","iexplore.exe",
1702 "http://www.activebasic.com/forum/viewforum.php?f=6",
1703 NULL,SW_SHOWNORMAL);
1704 return 0;
1705 case ID_COMMU_FORUM6:
1706 ShellExecute(hwnd,"open","iexplore.exe",
1707 "http://www.activebasic.com/forum/viewforum.php?f=8",
1708 NULL,SW_SHOWNORMAL);
1709 return 0;
1710 case ID_COMMU_FORUM7:
1711 ShellExecute(hwnd,"open","iexplore.exe",
1712 "http://www.activebasic.com/forum/viewforum.php?f=4",
1713 NULL,SW_SHOWNORMAL);
1714 return 0;
1715 case ID_COMMU_FORUM8:
1716 ShellExecute(hwnd,"open","iexplore.exe",
1717 "http://www.activebasic.com/forum/viewforum.php?f=7",
1718 NULL,SW_SHOWNORMAL);
1719 return 0;
1720#endif //THETEXT
1721
1722
1723 case IDM_TOPIC:
1724#ifdef THETEXT
1725 sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
1726 ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
1727#else
1728 sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
1729 HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
1730#endif
1731 return 0;
1732
1733#ifdef THETEXT
1734 case IDM_DSHOMEPAGE:
1735 ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
1736 return 0;
1737#else
1738 case IDM_AB_WEBSITE:
1739 ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
1740 return 0;
1741 case IDM_ACTBDL:
1742 ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
1743 return 0;
1744#endif
1745
1746 case IDM_ABOUT:
1747 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
1748 return 0;
1749
1750 case IDM_WEB_SEARCH:
1751 hChild=GetWindow(hClient,GW_CHILD);
1752 WndNum=GetWndNum(hChild);
1753 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1754 extern HWND hWebSearchCombo;
1755 SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
1756 }
1757 return 0;
1758
1759
1760
1761 //////////////////////////////////////////////////////
1762 // レバーコントロールのサブメニューコマンド(レバー追加)
1763 //////////////////////////////////////////////////////
1764
1765 case IDM_DOCSELECTBAND:
1766 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1767 return 0;
1768 case IDM_STANDARDBAND:
1769 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1770 return 0;
1771#ifndef THETEXT
1772 case IDM_RELEASEBAND:
1773 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1774 return 0;
1775 case IDM_DEBUGBAND:
1776 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1777 return 0;
1778 case IDM_SELECTCOMPILERBAND:
1779 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1780 return 0;
1781#endif
1782 case IDM_BANDMENU_WEB_SEARCH:
1783 pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
1784 return 0;
1785 case IDM_NOGRIPPER:
1786 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1787 else pobj_nv->bNoGripper=1;
1788
1789 //レバーコントロールを再生成
1790 pobj_Rebar->ResetRebar();
1791
1792 //メニュー状態を設定
1793 ResetState_DocMenu();
1794 return 0;
1795 case IDM_RESET_REBAR:
1796 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1797 if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1798
1799 //レバーコントロールを再生成
1800 pobj_Rebar->ResetInitRebar();
1801
1802 //メニュー状態を設定
1803 ResetState_DocMenu();
1804 return 0;
1805
1806
1807
1808 ////////////////////////////////////////////////////
1809 // メイン タブ コントロールのサブメニューコマンド
1810 ////////////////////////////////////////////////////
1811
1812 case IDM_ALLCLOSE_OMIT_MYSELF:
1813 //このウィンドウ以外をすべて閉じる(&A)
1814 hChild=GetWindow(hClient,GW_CHILD);
1815 WndNum=GetWndNum(hChild);
1816 for(i=0;i<MAX_WNDNUM;i++){
1817 if(i==WndNum) continue;
1818 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1819 }
1820 return 0;
1821
1822 case IDM_PATH_COPY:
1823 hChild=GetWindow(hClient,GW_CHILD);
1824 WndNum=GetWndNum(hChild);
1825
1826 //絶対パスをコピー
1827 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1828 pTemp=(char *)GlobalLock(hGlobal);
1829 lstrcpy(pTemp,MdiInfo[WndNum].path);
1830 GlobalUnlock(hGlobal);
1831
1832 //クリップボードに保存
1833 OpenClipboard(hwnd);
1834 EmptyClipboard();
1835 SetClipboardData(CF_TEXT,hGlobal);
1836 CloseClipboard();
1837 return 0;
1838
1839 case IDM_FOLDER_OPEN:
1840 hChild=GetWindow(hClient,GW_CHILD);
1841 WndNum=GetWndNum(hChild);
1842
1843 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1844 lstrcat(temporary,temp2);
1845
1846 ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
1847 return 0;
1848
1849 case IDM_DELETE_FILE:
1850 hChild=GetWindow(hClient,GW_CHILD);
1851 WndNum=GetWndNum(hChild);
1852
1853 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1854 lstrcat(temporary,temp2);
1855
1856 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1857 if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
1858
1859 //ゴミ箱へ
1860 SHFILEOPSTRUCT fo;
1861 fo.hwnd=hwnd;
1862 fo.wFunc=FO_DELETE;
1863 fo.pFrom =MdiInfo[WndNum].path;
1864 fo.pTo="\0";
1865 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1866 SHFileOperation(&fo);
1867
1868 //閉じる
1869 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1870 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1871
1872 return 0;
1873
1874 case IDM_USER_COLOR:
1875 {
1876 CHOOSECOLOR cc;
1877 COLORREF CusColors[16]={
1878 RGB(255,255,255),
1879 RGB(0,0,0),
1880 RGB(128,128,128),
1881 RGB(192,192,192),
1882 RGB(128,0,0),
1883 RGB(255,0,0),
1884 RGB(128,128,0),
1885 RGB(255,255,0),
1886 RGB(0,128,0),
1887 RGB(0,255,0),
1888 RGB(0,128,128),
1889 RGB(0,255,255),
1890 RGB(0,0,128),
1891 RGB(0,0,255),
1892 RGB(128,0,128),
1893 RGB(255,0,255)};
1894 cc.lStructSize=sizeof(CHOOSECOLOR);
1895 cc.hwndOwner=hwnd;
1896 cc.rgbResult=colorUser;
1897 cc.lpCustColors=CusColors;
1898 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1899 if(!ChooseColor(&cc)){
1900 return 0;
1901 }
1902 colorUser=cc.rgbResult;
1903 }
1904 case IDM_GRAY:
1905 case IDM_WHITE:
1906 case IDM_RED:
1907 case IDM_GREEN:
1908 case IDM_BLUE:
1909 case IDM_YELLOW:
1910 hChild=GetWindow(hClient,GW_CHILD);
1911 WndNum=GetWndNum(hChild);
1912
1913 TC_ITEM tcItem;
1914 tcItem.mask=TCIF_PARAM;
1915 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1916 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1917 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1918 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1919 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1920 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1921 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
1922 TabCtrl_SetItem(pobj_MainTab->hTab,
1923 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1924 &tcItem);
1925 InvalidateRect(pobj_MainTab->hTab,NULL,0);
1926 return 0;
1927
1928
1929
1930 //////////////////////////////////
1931 // SideWeb
1932 //////////////////////////////////
1933
1934 case IDC_CLIP:
1935 pobj_SideWeb->bShow=0;
1936 ResizeOwnerWnd();
1937 return 0;
1938 }
1939 break;
1940 case WM_DROPFILES:
1941 hDrop=(HDROP)wParam;
1942
1943 i2=DragQueryFile(hDrop,-1,0,0);
1944 for(i=0;i<i2;i++){
1945 DragQueryFile(hDrop,i,str,MAX_PATH);
1946 OpenFileWithExtension(str);
1947 }
1948 DragFinish(hDrop);
1949 return 0;
1950 case WM_SHOWERROR:
1951 //エラー部分を反転表示
1952 DWORD AccBytes;
1953 HANDLE fh;
1954 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
1955 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1956 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
1957 CloseHandle(fh);
1958 temporary[AccBytes]=0;
1959 hChild=GetWindow(hClient,GW_CHILD);
1960 while(hChild){
1961 WndNum=GetWndNum(hChild);
1962 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1963 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
1964 }
1965 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1966 }
1967 if(!hChild){
1968 hChild=OpenFileWithExtension(temporary);
1969 WndNum=GetWndNum(hChild);
1970 }
1971
1972 if(WndNum==-1) return 0;
1973
1974 //ウィンドウを最前面に表示
1975 BringWindowToTop(hChild);
1976 UpdateWindow(hChild);
1977
1978 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
1979
1980 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
1981 for(i=0,i2=0;;i++){
1982 if(i2>=(int)wParam) break;
1983 if(pTemp[i]=='\0') break;
1984 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
1985 i++;
1986 i2++;
1987 }
1988 }
1989 pos.x=i;
1990
1991 //行の終端インデックスを取得
1992 for(;;i++){
1993 if(pTemp[i]=='\0') break;
1994 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
1995 }
1996 pos.y=i;
1997
1998 //行を選択する
1999 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2000
2001 return 0;
2002
2003#ifndef THETEXT
2004 case WM_SETCOMPILEVIEW:
2005 //コンパイラウィンドウ(埋め込み型)が表示されたとき
2006 hCompileView=(HWND)lParam;
2007 ResizeOwnerWnd();
2008 return 0;
2009 case WM_DESTROYCOMPILEVIEW:
2010 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2011 if((int)hCompileView==-1){
2012 //すぐに次のコンパイラウィンドウが起動するとき
2013 hCompileView=0;
2014 }
2015 else{
2016 //完全にコンパイラウィンドウを閉じたときはリサイズ
2017 hCompileView=0;
2018
2019 ResizeOwnerWnd();
2020 }
2021 return 0;
2022
2023 case WM_SETDEBUGGERBASE:
2024 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2025 pobj_Debugger->begin();
2026
2027 //BasicCompiler.exeの強制終了を考慮
2028 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2029
2030 return 0;
2031 case WM_DESTROYDEBUGGERBASE:
2032 //BasicCompiler.exeの強制終了を考慮
2033 KillTimer(hOwner,ID_DEBUGSAFTY);
2034
2035 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2036 pobj_Debugger->end();
2037
2038 return 0;
2039
2040 case WM_SETDEBUGGERVIEW:
2041 //デバッガウィンドウ(埋め込み型)が表示されたとき
2042 pobj_Debugger->watch_start((HWND)lParam);
2043 ResizeOwnerWnd();
2044 return 0;
2045 case WM_DESTROYDEBUGGERVIEW:
2046 //デバッガウィンドウ(埋め込み型)が破棄されたとき
2047 pobj_Debugger->watch_quit();
2048 ResizeOwnerWnd();
2049 return 0;
2050#endif
2051
2052 case WM_SIZE:
2053 ResizeOwnerWnd();
2054 return 0;
2055
2056
2057 case WM_MOUSEMOVE:
2058 static DWORD dwDragLever;
2059 static POINT PrevMousePos;
2060 static int start;
2061
2062 pos.x=(long)(short)LOWORD(lParam);
2063 pos.y=(long)(short)HIWORD(lParam);
2064 ClientToScreen(hwnd,&pos);
2065
2066 if(dwDragLever){
2067 GetClientRect(hwnd,&rect);
2068
2069 if(dwDragLever==1){
2070 //プロジェクトビューをリサイズ中
2071 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2072 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2073 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2074 }
2075 else if(dwDragLever==2){
2076 //デバッガビューをリサイズ中
2077 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2078 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2079 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2080 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2081 }
2082 else if(dwDragLever==3){
2083 //コンパイラビューをリサイズ中
2084 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2085 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2086 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2087 pobj_nv->height_ClipCompileView=rect.bottom-100;
2088 }
2089 else if(dwDragLever==4){
2090 //SideWebをリサイズ中
2091 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2092 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2093 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2094 }
2095
2096 ResizeOwnerWnd();
2097 UpdateWindow(hwnd);
2098 }
2099 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2100 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2101 GetWindowRect(hProjectView,&rect);
2102 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2103 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2104 SetCursor(LoadCursor(0,IDC_SIZEWE));
2105 }
2106 }
2107#ifndef THETEXT
2108 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2109 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2110 GetWindowRect(pobj_Debugger->hwnd,&rect);
2111 if(rect.left<=pos.x&&pos.x<=rect.right&&
2112 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2113 SetCursor(LoadCursor(0,IDC_SIZENS));
2114 }
2115 }
2116 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2117 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2118 GetWindowRect(hCompileView,&rect);
2119 if(rect.left<=pos.x&&pos.x<=rect.right&&
2120 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2121 SetCursor(LoadCursor(0,IDC_SIZENS));
2122 }
2123 }
2124#endif
2125 if( pobj_SideWeb )
2126 {
2127 if(pobj_SideWeb->bShow){
2128 //SideWebとMDIクライアントの境目のサイズ変更ライン
2129 pobj_SideWeb->GetRect(&rect);
2130 ClientToScreen(hwnd,&rect);
2131 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2132 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2133 SetCursor(LoadCursor(0,IDC_SIZEWE));
2134 }
2135 }
2136 }
2137 return 0;
2138 case WM_LBUTTONDOWN:
2139 pos.x=LOWORD(lParam);
2140 pos.y=HIWORD(lParam);
2141 ClientToScreen(hwnd,&pos);
2142
2143 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2144 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2145 GetWindowRect(hProjectView,&rect);
2146 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2147 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2148 SetCursor(LoadCursor(0,IDC_SIZEWE));
2149
2150 dwDragLever=1;
2151 SetCapture(hwnd);
2152
2153 PrevMousePos=pos;
2154 start=pobj_nv->width_ClipProjectView;
2155 }
2156 }
2157#ifndef THETEXT
2158 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2159 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2160 GetWindowRect(pobj_Debugger->hwnd,&rect);
2161 if(rect.left<=pos.x&&pos.x<=rect.right&&
2162 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2163 SetCursor(LoadCursor(0,IDC_SIZENS));
2164
2165 dwDragLever=2;
2166 SetCapture(hwnd);
2167
2168 PrevMousePos=pos;
2169 start=pobj_nv->height_ClipDebuggerView;
2170 }
2171 }
2172 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2173 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2174 GetWindowRect(hCompileView,&rect);
2175 if(rect.left<=pos.x&&pos.x<=rect.right&&
2176 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2177 SetCursor(LoadCursor(0,IDC_SIZENS));
2178
2179 dwDragLever=3;
2180 SetCapture(hwnd);
2181
2182 PrevMousePos=pos;
2183 start=pobj_nv->height_ClipCompileView;
2184 }
2185 }
2186#endif
2187 if( pobj_SideWeb && pobj_SideWeb->bShow){
2188 //SideWebとMDIクライアントの境目のサイズ変更ライン
2189 pobj_SideWeb->GetRect(&rect);
2190 ClientToScreen(hwnd,&rect);
2191 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2192 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2193 SetCursor(LoadCursor(0,IDC_SIZENS));
2194
2195 dwDragLever=4;
2196 SetCapture(hwnd);
2197
2198 PrevMousePos=pos;
2199 start=pobj_nv->width_WebSearchView;
2200 }
2201 }
2202 return 0;
2203 case WM_LBUTTONUP:
2204 if(dwDragLever){
2205 dwDragLever=0;
2206 ReleaseCapture();
2207 }
2208 return 0;
2209
2210
2211 case WM_SYSCOMMAND:
2212 //ウィンドウの最小化前にウィンドウ位置を保存
2213 if(wParam==SC_MINIMIZE){
2214 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2215 else if(!IsIconic(hwnd)){
2216 pobj_nv->bWindowMax=0;
2217 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2218 }
2219 }
2220 break; //処理をDefFrameProcへ
2221 case WM_QUERYENDSESSION:
2222 case WM_CLOSE:
2223 extern BOOL bSearchingClasses;
2224 if(bSearchingClasses){
2225 pobj_ClassTreeView->bCloseSwitch=1;
2226 return 0;
2227 }
2228
2229 //コンパイラビューを閉じる
2230 if(hCompileView)
2231 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2232
2233 //次回起動時にMDIウィンドウを最大化させるかを判定
2234 hChild=GetWindow(hClient,GW_CHILD);
2235 pobj_nv->bMDIZoomed=IsZoomed(hChild);
2236
2237 //プロジェクトを閉じる
2238 if(ProjectInfo.name[0]){
2239 if(!CloseProject()) return 0;
2240 }
2241
2242 //MDIウィンドウの保存確認
2243 hChild=GetWindow(hClient,GW_CHILD);
2244 while(hChild){
2245 i=GetWndNum(hChild);
2246 if(!DocumentModifyCheck(hChild)) return 0;
2247 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2248 }
2249
2250
2251 KillTimer(hwnd,ID_TIMER_BACKUP);
2252
2253
2254 //ProjectViewの位置を保存、ProjectViewを破棄
2255 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2256 DestroyWindow(hProjectView);
2257 DestroyWindow(hProjectView_ToolWindow);
2258
2259 //Rebarの位置を保存、Rebarを破棄
2260 delete pobj_Rebar;
2261 pobj_Rebar=0;
2262
2263 //タブコントロールを破棄
2264 delete pobj_MainTab;
2265 pobj_MainTab=0;
2266
2267 //SideWebを破棄
2268 delete pobj_SideWeb;
2269 pobj_SideWeb=0;
2270
2271 //メインウィンドウの最大化有無、座標を保存
2272 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2273 else if(!IsIconic(hwnd)){
2274 pobj_nv->bWindowMax=0;
2275 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2276 }
2277
2278 hChild=GetWindow(hClient,GW_CHILD);
2279 while(hChild){
2280 CloseDocWindow(GetWndNum(hChild));
2281 DestroyWindow(hChild);
2282 hChild=GetWindow(hClient,GW_CHILD);
2283 }
2284
2285 EndProjectEditor(); //ProjectEditorの情報を保存
2286
2287 //エディタ用フォントを破棄
2288 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2289 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2290 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2291
2292 DestroyWindow(hwnd);
2293 return 0;
2294
2295 case WM_DESTROY:
2296 PostQuitMessage(0);
2297 return 0;
2298 }
2299
2300 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
2301}
2302
2303int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2304 WNDCLASSEX wcl;
2305
2306 wcl.cbSize=sizeof(WNDCLASSEX);
2307 wcl.hInstance=hInst;
2308 wcl.lpszClassName=lpClassName;
2309 wcl.lpfnWndProc=WndProc;
2310
2311 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2312 else wcl.style=0;
2313
2314 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2315 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2316
2317 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2318 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2319
2320 wcl.lpszMenuName=NULL;
2321 wcl.cbClsExtra=0;
2322 wcl.cbWndExtra=0;
2323 wcl.hbrBackground=hBackBrush;
2324
2325 return RegisterClassEx(&wcl);
2326}
2327int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2328 int i,i2,IsStr;
2329 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2330 MSG msg;
2331 HACCEL hAccel;
2332
2333 hInst=hThisInst;
2334 if(!SetupProjectEditor()) return 0;
2335
2336 HBRUSH hGrayBrush_LineNumber;
2337 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2338
2339 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2340 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2341 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2342 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2343 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2344 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2345 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2346 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2347 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2348 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2349 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2350 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2351 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2352 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2353 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2354 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2355 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2356
2357 //Web検索用のウィンドウクラス
2358 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2359 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2360 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2361
2362 //ルーラーのウィンドウクラス
2363 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2364
2365 //SideWebのウィンドウクラス
2366 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2367
2368 ActiveBasic::IDE::Program::Main();
2369
2370 //return 0;
2371
2372
2373 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
2374
2375 //メインウィンドウ
2376 RECT *prc;
2377 prc=&pobj_nv->StartupWindowRect;
2378 /*
2379 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
2380 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
2381 prc->left, prc->top,
2382 prc->right-prc->left, prc->bottom-prc->top,
2383 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
2384 */
2385
2386 //バックアップ用タイマーを設定(10秒に一回)
2387 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
2388
2389 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
2390 SetClipboardViewer(hOwner);
2391
2392 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
2393 else ShowWindow(hOwner,ShowCmd);
2394 UpdateWindow(hOwner);
2395
2396 int open_sw=0;
2397 if(lstrlen(lpCmdLine)>0){
2398 lstrcpy(dummy,lpCmdLine);
2399 for(i=0,i2=0,IsStr=0;;i++,i2++){
2400 if(dummy[i]=='\"'){
2401 if(IsStr==0) IsStr=1;
2402 else IsStr=0;
2403 i++;
2404 }
2405 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
2406 str[i2]=0;
2407 if(!(strstr(str,":")||strstr(str,"\\\\"))){
2408 lstrcpy(str2,str);
2409 GetCurrentDirectory(MAX_PATH,str);
2410 lstrcat(str,"\\");
2411 lstrcat(str,str2);
2412 }
2413 ShortPathToLongPath(str,str2);
2414 OpenFileWithExtension(str2);
2415 open_sw=1;
2416 if(dummy[i]=='\0') break;
2417 i2=-1;
2418 continue;
2419 }
2420 str[i2]=dummy[i];
2421 }
2422 }
2423
2424 BOOL bRestore=0;
2425
2426
2427 {
2428 //自動バックアップ及び復元機能
2429
2430 //必要であれば復元
2431 bRestore=restore();
2432 }
2433
2434
2435#ifdef THETEXT
2436 if(open_sw==0&&bRestore==0){
2437 //ファイルが開かれなかったとき
2438 NewTextEditWindow(NULL,WNDTYPE_TEXT);
2439 }
2440#endif
2441
2442
2443 while(GetMessage(&msg,NULL,0,0)){
2444
2445 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
2446 if(ProjectInfo.name[0]){
2447 for(i=0,i2=0;i<MAX_WNDNUM;i++){
2448 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
2449 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
2450 }
2451 }
2452 if(i2==0){
2453 if(!TranslateMDISysAccel(hClient,&msg)){
2454 TranslateMessage(&msg);
2455 DispatchMessage(&msg);
2456 }
2457 }
2458 }
2459 else{
2460 if(!TranslateMDISysAccel(hClient,&msg)){
2461 TranslateMessage(&msg);
2462 DispatchMessage(&msg);
2463 }
2464 }
2465 }
2466 }
2467
2468 DeleteObject(hGrayBrush_LineNumber);
2469
2470#if defined HeapAlloc
2471 CheckHeapCheck();
2472#endif
2473
2474 return msg.wParam;
2475}
Note: See TracBrowser for help on using the repository browser.