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

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

いくつかのメニューをMainFrameに実装しなおした

File size: 75.5 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,i3,WndNum;
1346 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
1347 HWND hChild,hEdit;
1348 RECT rect;
1349 POINT pos;
1350 HDROP hDrop;
1351 HGLOBAL hGlobal;
1352 HANDLE hFile;
1353 BOOL bChecked;
1354
1355 static COLORREF colorUser=RGB(255,255,255);
1356
1357 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1358 //「最近使ったファイル」メニューコマンド
1359 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1360 OpenFileWithExtension(str);
1361 return 0;
1362 }
1363
1364 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1365 //「最近使ったプロジェクト」メニューコマンド
1366 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1367 OpenFileWithExtension(str);
1368 return 0;
1369 }
1370
1371 switch(message)
1372 {
1373 case WM_COMMAND:
1374 switch(LOWORD(wParam)){
1375
1376
1377 ///////////////////////
1378 // 変換メニュー
1379 ///////////////////////
1380 case IDM_CONV_ALPHA_SMALL:
1381 case IDM_CONV_ALPHA_BIG:
1382 case IDM_CONV_HALF:
1383 case IDM_CONV_MULTI:
1384 case IDM_CONV_KATAKANA:
1385 case IDM_CONV_HIRAGANA:
1386 case IDM_CONV_SPACE:
1387 case IDM_CONV_TAB:
1388#ifdef THETEXT
1389 case IDM_CONV_HASRETURN:
1390 case IDM_CONV_QUOTE:
1391#else
1392 case IDM_CODEFORMAT:
1393#endif
1394 TextEdit_Convert(LOWORD(wParam));
1395 return 0;
1396
1397#ifdef THETEXT
1398 ///////////////////////
1399 // ツールメニュー
1400 ///////////////////////
1401 case IDM_STRING_COUNT:
1402 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,0);
1403 return 0;
1404 case IDM_SEL_STRING_COUNT:
1405 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,1);
1406 return 0;
1407#endif //THETEXT
1408
1409 case IDM_PROJECTVIEW:
1410 if(pobj_nv->bClipProjectView){
1411 if(IsWindowVisible(hProjectView)){
1412 ShowWindow(hProjectView,SW_HIDE);
1413 bChecked=0;
1414 }
1415 else{
1416 ShowWindow(hProjectView,SW_SHOW);
1417 bChecked=1;
1418 }
1419 }
1420 else{
1421 if(IsWindowVisible(hProjectView_ToolWindow)){
1422 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
1423 bChecked=0;
1424 }
1425 else{
1426 ShowWindow(hProjectView_ToolWindow,SW_SHOW);
1427 ShowWindow(hProjectView,SW_SHOW);
1428 bChecked=1;
1429 }
1430 }
1431 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked);
1432
1433 //再配置
1434 ResizeOwnerWnd();
1435
1436 ShowWindow(hClient,SW_SHOW);
1437 return 0;
1438 case IDM_PROJECT_OPTION:
1439 DlgProjectOptionSetting(hwnd);
1440 return 0;
1441 case IDM_TOPMOST:
1442 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
1443 SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1444 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
1445 }
1446 else{
1447 SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1448 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
1449 }
1450 return 0;
1451
1452#ifdef THETEXT
1453 case IDM_RIGHT_TURN:
1454 pobj_nv->bRightTurn^=1;
1455 ResetState_ViewMenu();
1456
1457 //トップのウィンドウを再描画
1458 RedrawAllWindow();
1459
1460 return 0;
1461#endif
1462
1463 case IDM_SET:
1464 DlgOptionSetting(hwnd);
1465 return 0;
1466
1467#ifndef THETEXT
1468 case IDM_DEBUG:
1469 if(pobj_Debugger->IsDebugging()){
1470 pobj_Debugger->DebugContinue();
1471 return 0;
1472 }
1473
1474 hChild=GetWindow(hClient,GW_CHILD);
1475 if(ProjectInfo.name[0]){
1476 //プロジェクトが開かれている場合
1477 if(!SetProjectToRun()) return 0;
1478
1479 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
1480 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
1481 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
1482 hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
1483 DWORD dwAccessBytes;
1484 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
1485 CloseHandle(hFile);
1486
1487 //ソースファイル名をtemp2へ
1488 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1489
1490 //出力ファイル名をtemp3へ
1491 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1492 GetFullPath(temp3,ProjectInfo.dir);
1493
1494 if(IsNeedCompileForProject(1))
1495 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
1496 else
1497 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
1498
1499 //DLLオプション
1500 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1501
1502 //Unicodeオプション
1503 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1504
1505 //ブレークポイントをセーブ
1506 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
1507 }
1508 else{
1509 //単独ソースコード
1510 if(!SetRunning(hChild)) return 0;
1511 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
1512 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1513 else
1514 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1515
1516 //ブレークポイントをセーブ
1517 pobj_DBBreakPoint->SaveToTempFile();
1518 }
1519
1520 //コンパイルビューをクリップするかどうか
1521 if(bClipCompileView){
1522 lstrcat(temporary," /clip_compile_view");
1523
1524 //コンパイラビューを閉じる
1525 if(hCompileView==(HWND)-1) return 0;
1526 if(hCompileView){
1527 hChild=hCompileView;
1528 hCompileView=(HWND)-1;
1529 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1530 }
1531
1532 //重複起動防止のため
1533 hCompileView=(HWND)-1;
1534 }
1535
1536 //インクルードディレクトリ
1537 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1538 lstrcat(temporary,temp2);
1539
1540 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1541
1542 return 0;
1543 case IDM_DEBUGCOMPILE:
1544 hChild=GetWindow(hClient,GW_CHILD);
1545 if(ProjectInfo.name[0]){
1546 //プロジェクトが開かれている場合
1547 if(!SetProjectToRun()) return 0;
1548
1549 //ソースファイル名をtemp2へ
1550 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1551
1552 //出力ファイル名をtemp3へ
1553 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1554 GetFullPath(temp3,ProjectInfo.dir);
1555
1556 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
1557
1558 //DLLオプション
1559 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1560
1561 //Unicodeオプション
1562 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1563 }
1564 else{
1565 //単独ソースコード
1566 if(!SetRunning(hChild)) return 0;
1567 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1568 }
1569
1570 //コンパイルビューをクリップするかどうか
1571 if(bClipCompileView){
1572 lstrcat(temporary," /clip_compile_view");
1573
1574 //コンパイラビューを閉じる
1575 if(hCompileView==(HWND)-1) return 0;
1576 if(hCompileView){
1577 hChild=hCompileView;
1578 hCompileView=(HWND)-1;
1579 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1580 }
1581
1582 //重複起動防止のため
1583 hCompileView=(HWND)-1;
1584 }
1585
1586 //インクルードディレクトリ
1587 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1588 lstrcat(temporary,temp2);
1589
1590 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1591
1592 return 0;
1593 case IDM_ATTACH:
1594 int idProcess;
1595 DWORD dwPlatform;
1596 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1597 if(idProcess==0) return 0;
1598
1599 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
1600
1601 //コンパイルビューをクリップするかどうか
1602 if(bClipCompileView){
1603 lstrcat(temporary," /clip_compile_view");
1604
1605 //コンパイラビューを閉じる
1606 if(hCompileView==(HWND)-1) return 0;
1607 if(hCompileView){
1608 hChild=hCompileView;
1609 hCompileView=(HWND)-1;
1610 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1611 }
1612
1613 //重複起動防止のため
1614 hCompileView=(HWND)-1;
1615 }
1616
1617 //インクルードディレクトリ
1618 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1619 lstrcat(temporary,temp2);
1620
1621 ActiveBasic::Common::Platform::EnumType platform;
1622 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1623 {
1624 platform = ActiveBasic::Common::Platform::X86;
1625 }
1626 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1627 {
1628 platform = ActiveBasic::Common::Platform::X64;
1629 }
1630 else
1631 {
1632 throw;
1633 }
1634
1635 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1636
1637 return 0;
1638 case IDM_RELEASECOMPILE:
1639 hChild=GetWindow(hClient,GW_CHILD);
1640 if(ProjectInfo.name[0]){
1641 //プロジェクトが開かれている場合
1642 if(!SetProjectToRun()) return 0;
1643
1644 //ソースファイル名をtemp2へ
1645 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1646
1647 //出力ファイル名をtemp3へ
1648 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1649 GetFullPath(temp3,ProjectInfo.dir);
1650
1651 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
1652
1653 //DLLオプション
1654 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1655
1656 //Unicodeオプション
1657 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1658 }
1659 else{
1660 //単独ソースコード
1661 if(!SetRunning(hChild)) return 0;
1662 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1663 }
1664
1665 //コンパイルビューをクリップするかどうか
1666 if(bClipCompileView){
1667 lstrcat(temporary," /clip_compile_view");
1668
1669 //コンパイラビューを閉じる
1670 if(hCompileView==(HWND)-1) return 0;
1671 if(hCompileView){
1672 hChild=hCompileView;
1673 hCompileView=(HWND)-1;
1674 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1675 }
1676
1677 //重複起動防止のため
1678 hCompileView=(HWND)-1;
1679 }
1680
1681 //インクルードディレクトリ
1682 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1683 lstrcat(temporary,temp2);
1684
1685 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1686
1687 return 0;
1688 case IDM_RELEASERUN:
1689 hChild=GetWindow(hClient,GW_CHILD);
1690 if(ProjectInfo.name[0]){
1691/* //プロジェクトが開かれている場合
1692 if(!SetProjectToRun()) return 0;
1693
1694 //必要であればリリースコンパイル
1695 if(IsNeedCompileForProject(0))
1696 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1697
1698 if(ProjectInfo.dwModuleType==MT_DLL){
1699 lstrcpy(temporary,ProjectInfo.szExePath);
1700 }
1701 else{
1702 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1703 GetFullPath(temporary,ProjectInfo.dir);
1704 }
1705 }
1706 else{
1707/* //必要であればリリースコンパイル
1708 if(!SetRunning(hChild)) return 0;
1709
1710 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1711 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1712
1713 //単独ソースコード
1714 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1715 lstrcat(temporary,temp2);
1716 lstrcat(temporary,temp3);
1717 lstrcat(temporary,".exe");
1718 }
1719
1720 //インクルードディレクトリ
1721 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1722 lstrcat(temporary,temp2);
1723
1724 ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1725 return 0;
1726
1727
1728 ////////////////////////
1729 // デバッグ コマンド
1730 ////////////////////////
1731
1732 case IDM_STEP_IN:
1733 pobj_Debugger->StepIn();
1734 break;
1735 case IDM_STEP_OVER:
1736 pobj_Debugger->StepOver();
1737 break;
1738 case IDM_STEP_CURSOR:
1739 pobj_Debugger->StepToCursor();
1740 break;
1741 case IDM_BREAKPOINT:
1742 if(ProjectInfo.name[0]){
1743 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1744 }
1745 else{
1746 pobj_DBBreakPoint->Event_BreakPoint();
1747 }
1748 break;
1749 case IDM_DEBUG_STOP:
1750 pobj_Debugger->DebugStop();
1751 break;
1752 case IDM_DEBUG_PAUSE:
1753 pobj_Debugger->DebugPause();
1754 break;
1755
1756
1757 case IDM_COMMUNITY:
1758 ShellExecute(hwnd,"open","iexplore.exe",
1759 "http://www.activebasic.com/forum/",
1760 NULL,SW_SHOWNORMAL);
1761 return 0;
1762 case IDM_COMMU_SEARCH:
1763 ShellExecute(hwnd,"open","iexplore.exe",
1764 "http://www.activebasic.com/forum/search.php",
1765 NULL,SW_SHOWNORMAL);
1766 return 0;
1767 case IDM_COMMU_PM:
1768 ShellExecute(hwnd,"open","iexplore.exe",
1769 "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
1770 NULL,SW_SHOWNORMAL);
1771 return 0;
1772 case ID_COMMU_FORUM1:
1773 ShellExecute(hwnd,"open","iexplore.exe",
1774 "http://www.activebasic.com/forum/viewforum.php?f=1",
1775 NULL,SW_SHOWNORMAL);
1776 return 0;
1777 case ID_COMMU_FORUM2:
1778 ShellExecute(hwnd,"open","iexplore.exe",
1779 "http://www.activebasic.com/forum/viewforum.php?f=2",
1780 NULL,SW_SHOWNORMAL);
1781 return 0;
1782 case ID_COMMU_FORUM3:
1783 ShellExecute(hwnd,"open","iexplore.exe",
1784 "http://www.activebasic.com/forum/viewforum.php?f=5",
1785 NULL,SW_SHOWNORMAL);
1786 return 0;
1787 case ID_COMMU_FORUM4:
1788 ShellExecute(hwnd,"open","iexplore.exe",
1789 "http://www.activebasic.com/forum/viewforum.php?f=3",
1790 NULL,SW_SHOWNORMAL);
1791 return 0;
1792 case ID_COMMU_FORUM5:
1793 ShellExecute(hwnd,"open","iexplore.exe",
1794 "http://www.activebasic.com/forum/viewforum.php?f=6",
1795 NULL,SW_SHOWNORMAL);
1796 return 0;
1797 case ID_COMMU_FORUM6:
1798 ShellExecute(hwnd,"open","iexplore.exe",
1799 "http://www.activebasic.com/forum/viewforum.php?f=8",
1800 NULL,SW_SHOWNORMAL);
1801 return 0;
1802 case ID_COMMU_FORUM7:
1803 ShellExecute(hwnd,"open","iexplore.exe",
1804 "http://www.activebasic.com/forum/viewforum.php?f=4",
1805 NULL,SW_SHOWNORMAL);
1806 return 0;
1807 case ID_COMMU_FORUM8:
1808 ShellExecute(hwnd,"open","iexplore.exe",
1809 "http://www.activebasic.com/forum/viewforum.php?f=7",
1810 NULL,SW_SHOWNORMAL);
1811 return 0;
1812#endif //THETEXT
1813
1814
1815 case IDM_TOPIC:
1816#ifdef THETEXT
1817 sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
1818 ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
1819#else
1820 sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
1821 HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
1822#endif
1823 return 0;
1824
1825#ifdef THETEXT
1826 case IDM_DSHOMEPAGE:
1827 ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
1828 return 0;
1829#else
1830 case IDM_AB_WEBSITE:
1831 ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
1832 return 0;
1833 case IDM_ACTBDL:
1834 ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
1835 return 0;
1836#endif
1837
1838 case IDM_ABOUT:
1839 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
1840 return 0;
1841
1842 case IDM_WEB_SEARCH:
1843 hChild=GetWindow(hClient,GW_CHILD);
1844 WndNum=GetWndNum(hChild);
1845 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1846 extern HWND hWebSearchCombo;
1847 SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
1848 }
1849 return 0;
1850
1851
1852
1853 //////////////////////////////////////////////////////
1854 // レバーコントロールのサブメニューコマンド(レバー追加)
1855 //////////////////////////////////////////////////////
1856
1857 case IDM_DOCSELECTBAND:
1858 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1859 return 0;
1860 case IDM_STANDARDBAND:
1861 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1862 return 0;
1863#ifndef THETEXT
1864 case IDM_RELEASEBAND:
1865 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1866 return 0;
1867 case IDM_DEBUGBAND:
1868 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1869 return 0;
1870 case IDM_SELECTCOMPILERBAND:
1871 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1872 return 0;
1873#endif
1874 case IDM_BANDMENU_WEB_SEARCH:
1875 pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
1876 return 0;
1877 case IDM_NOGRIPPER:
1878 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1879 else pobj_nv->bNoGripper=1;
1880
1881 //レバーコントロールを再生成
1882 pobj_Rebar->ResetRebar();
1883
1884 //メニュー状態を設定
1885 ResetState_DocMenu();
1886 return 0;
1887 case IDM_RESET_REBAR:
1888 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1889 if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1890
1891 //レバーコントロールを再生成
1892 pobj_Rebar->ResetInitRebar();
1893
1894 //メニュー状態を設定
1895 ResetState_DocMenu();
1896 return 0;
1897
1898
1899
1900 ////////////////////////////////////////////////////
1901 // メイン タブ コントロールのサブメニューコマンド
1902 ////////////////////////////////////////////////////
1903
1904 case IDM_ALLCLOSE_OMIT_MYSELF:
1905 //このウィンドウ以外をすべて閉じる(&A)
1906 hChild=GetWindow(hClient,GW_CHILD);
1907 WndNum=GetWndNum(hChild);
1908 for(i=0;i<MAX_WNDNUM;i++){
1909 if(i==WndNum) continue;
1910 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1911 }
1912 return 0;
1913
1914 case IDM_PATH_COPY:
1915 hChild=GetWindow(hClient,GW_CHILD);
1916 WndNum=GetWndNum(hChild);
1917
1918 //絶対パスをコピー
1919 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1920 pTemp=(char *)GlobalLock(hGlobal);
1921 lstrcpy(pTemp,MdiInfo[WndNum].path);
1922 GlobalUnlock(hGlobal);
1923
1924 //クリップボードに保存
1925 OpenClipboard(hwnd);
1926 EmptyClipboard();
1927 SetClipboardData(CF_TEXT,hGlobal);
1928 CloseClipboard();
1929 return 0;
1930
1931 case IDM_FOLDER_OPEN:
1932 hChild=GetWindow(hClient,GW_CHILD);
1933 WndNum=GetWndNum(hChild);
1934
1935 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1936 lstrcat(temporary,temp2);
1937
1938 ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
1939 return 0;
1940
1941 case IDM_DELETE_FILE:
1942 hChild=GetWindow(hClient,GW_CHILD);
1943 WndNum=GetWndNum(hChild);
1944
1945 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1946 lstrcat(temporary,temp2);
1947
1948 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1949 if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
1950
1951 //ゴミ箱へ
1952 SHFILEOPSTRUCT fo;
1953 fo.hwnd=hwnd;
1954 fo.wFunc=FO_DELETE;
1955 fo.pFrom =MdiInfo[WndNum].path;
1956 fo.pTo="\0";
1957 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1958 SHFileOperation(&fo);
1959
1960 //閉じる
1961 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1962 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1963
1964 return 0;
1965
1966 case IDM_USER_COLOR:
1967 {
1968 CHOOSECOLOR cc;
1969 COLORREF CusColors[16]={
1970 RGB(255,255,255),
1971 RGB(0,0,0),
1972 RGB(128,128,128),
1973 RGB(192,192,192),
1974 RGB(128,0,0),
1975 RGB(255,0,0),
1976 RGB(128,128,0),
1977 RGB(255,255,0),
1978 RGB(0,128,0),
1979 RGB(0,255,0),
1980 RGB(0,128,128),
1981 RGB(0,255,255),
1982 RGB(0,0,128),
1983 RGB(0,0,255),
1984 RGB(128,0,128),
1985 RGB(255,0,255)};
1986 cc.lStructSize=sizeof(CHOOSECOLOR);
1987 cc.hwndOwner=hwnd;
1988 cc.rgbResult=colorUser;
1989 cc.lpCustColors=CusColors;
1990 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1991 if(!ChooseColor(&cc)){
1992 return 0;
1993 }
1994 colorUser=cc.rgbResult;
1995 }
1996 case IDM_GRAY:
1997 case IDM_WHITE:
1998 case IDM_RED:
1999 case IDM_GREEN:
2000 case IDM_BLUE:
2001 case IDM_YELLOW:
2002 hChild=GetWindow(hClient,GW_CHILD);
2003 WndNum=GetWndNum(hChild);
2004
2005 TC_ITEM tcItem;
2006 tcItem.mask=TCIF_PARAM;
2007 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
2008 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
2009 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
2010 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
2011 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
2012 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
2013 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
2014 TabCtrl_SetItem(pobj_MainTab->hTab,
2015 TabCtrl_GetCurSel(pobj_MainTab->hTab),
2016 &tcItem);
2017 InvalidateRect(pobj_MainTab->hTab,NULL,0);
2018 return 0;
2019
2020
2021
2022 //////////////////////////////////
2023 // SideWeb
2024 //////////////////////////////////
2025
2026 case IDC_CLIP:
2027 pobj_SideWeb->bShow=0;
2028 ResizeOwnerWnd();
2029 return 0;
2030 }
2031 break;
2032 case WM_DROPFILES:
2033 hDrop=(HDROP)wParam;
2034
2035 i2=DragQueryFile(hDrop,-1,0,0);
2036 for(i=0;i<i2;i++){
2037 DragQueryFile(hDrop,i,str,MAX_PATH);
2038 OpenFileWithExtension(str);
2039 }
2040 DragFinish(hDrop);
2041 return 0;
2042 case WM_SHOWERROR:
2043 //エラー部分を反転表示
2044 DWORD AccBytes;
2045 HANDLE fh;
2046 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
2047 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2048 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
2049 CloseHandle(fh);
2050 temporary[AccBytes]=0;
2051 hChild=GetWindow(hClient,GW_CHILD);
2052 while(hChild){
2053 WndNum=GetWndNum(hChild);
2054 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2055 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
2056 }
2057 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2058 }
2059 if(!hChild){
2060 hChild=OpenFileWithExtension(temporary);
2061 WndNum=GetWndNum(hChild);
2062 }
2063
2064 if(WndNum==-1) return 0;
2065
2066 //ウィンドウを最前面に表示
2067 BringWindowToTop(hChild);
2068 UpdateWindow(hChild);
2069
2070 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
2071
2072 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
2073 for(i=0,i2=0;;i++){
2074 if(i2>=(int)wParam) break;
2075 if(pTemp[i]=='\0') break;
2076 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
2077 i++;
2078 i2++;
2079 }
2080 }
2081 pos.x=i;
2082
2083 //行の終端インデックスを取得
2084 for(;;i++){
2085 if(pTemp[i]=='\0') break;
2086 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
2087 }
2088 pos.y=i;
2089
2090 //行を選択する
2091 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2092
2093 return 0;
2094
2095#ifndef THETEXT
2096 case WM_SETCOMPILEVIEW:
2097 //コンパイラウィンドウ(埋め込み型)が表示されたとき
2098 hCompileView=(HWND)lParam;
2099 ResizeOwnerWnd();
2100 return 0;
2101 case WM_DESTROYCOMPILEVIEW:
2102 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2103 if((int)hCompileView==-1){
2104 //すぐに次のコンパイラウィンドウが起動するとき
2105 hCompileView=0;
2106 }
2107 else{
2108 //完全にコンパイラウィンドウを閉じたときはリサイズ
2109 hCompileView=0;
2110
2111 ResizeOwnerWnd();
2112 }
2113 return 0;
2114
2115 case WM_SETDEBUGGERBASE:
2116 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2117 pobj_Debugger->begin();
2118
2119 //BasicCompiler.exeの強制終了を考慮
2120 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2121
2122 return 0;
2123 case WM_DESTROYDEBUGGERBASE:
2124 //BasicCompiler.exeの強制終了を考慮
2125 KillTimer(hOwner,ID_DEBUGSAFTY);
2126
2127 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2128 pobj_Debugger->end();
2129
2130 return 0;
2131
2132 case WM_SETDEBUGGERVIEW:
2133 //デバッガウィンドウ(埋め込み型)が表示されたとき
2134 pobj_Debugger->watch_start((HWND)lParam);
2135 ResizeOwnerWnd();
2136 return 0;
2137 case WM_DESTROYDEBUGGERVIEW:
2138 //デバッガウィンドウ(埋め込み型)が破棄されたとき
2139 pobj_Debugger->watch_quit();
2140 ResizeOwnerWnd();
2141 return 0;
2142#endif
2143
2144 case WM_SIZE:
2145 ResizeOwnerWnd();
2146 return 0;
2147
2148
2149 case WM_MOUSEMOVE:
2150 static DWORD dwDragLever;
2151 static POINT PrevMousePos;
2152 static int start;
2153
2154 pos.x=(long)(short)LOWORD(lParam);
2155 pos.y=(long)(short)HIWORD(lParam);
2156 ClientToScreen(hwnd,&pos);
2157
2158 if(dwDragLever){
2159 GetClientRect(hwnd,&rect);
2160
2161 if(dwDragLever==1){
2162 //プロジェクトビューをリサイズ中
2163 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2164 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2165 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2166 }
2167 else if(dwDragLever==2){
2168 //デバッガビューをリサイズ中
2169 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2170 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2171 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2172 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2173 }
2174 else if(dwDragLever==3){
2175 //コンパイラビューをリサイズ中
2176 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2177 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2178 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2179 pobj_nv->height_ClipCompileView=rect.bottom-100;
2180 }
2181 else if(dwDragLever==4){
2182 //SideWebをリサイズ中
2183 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2184 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2185 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2186 }
2187
2188 ResizeOwnerWnd();
2189 UpdateWindow(hwnd);
2190 }
2191 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2192 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2193 GetWindowRect(hProjectView,&rect);
2194 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2195 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2196 SetCursor(LoadCursor(0,IDC_SIZEWE));
2197 }
2198 }
2199#ifndef THETEXT
2200 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2201 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2202 GetWindowRect(pobj_Debugger->hwnd,&rect);
2203 if(rect.left<=pos.x&&pos.x<=rect.right&&
2204 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2205 SetCursor(LoadCursor(0,IDC_SIZENS));
2206 }
2207 }
2208 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2209 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2210 GetWindowRect(hCompileView,&rect);
2211 if(rect.left<=pos.x&&pos.x<=rect.right&&
2212 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2213 SetCursor(LoadCursor(0,IDC_SIZENS));
2214 }
2215 }
2216#endif
2217 if( pobj_SideWeb )
2218 {
2219 if(pobj_SideWeb->bShow){
2220 //SideWebとMDIクライアントの境目のサイズ変更ライン
2221 pobj_SideWeb->GetRect(&rect);
2222 ClientToScreen(hwnd,&rect);
2223 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2224 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2225 SetCursor(LoadCursor(0,IDC_SIZEWE));
2226 }
2227 }
2228 }
2229 return 0;
2230 case WM_LBUTTONDOWN:
2231 pos.x=LOWORD(lParam);
2232 pos.y=HIWORD(lParam);
2233 ClientToScreen(hwnd,&pos);
2234
2235 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2236 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2237 GetWindowRect(hProjectView,&rect);
2238 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2239 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2240 SetCursor(LoadCursor(0,IDC_SIZEWE));
2241
2242 dwDragLever=1;
2243 SetCapture(hwnd);
2244
2245 PrevMousePos=pos;
2246 start=pobj_nv->width_ClipProjectView;
2247 }
2248 }
2249#ifndef THETEXT
2250 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2251 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2252 GetWindowRect(pobj_Debugger->hwnd,&rect);
2253 if(rect.left<=pos.x&&pos.x<=rect.right&&
2254 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2255 SetCursor(LoadCursor(0,IDC_SIZENS));
2256
2257 dwDragLever=2;
2258 SetCapture(hwnd);
2259
2260 PrevMousePos=pos;
2261 start=pobj_nv->height_ClipDebuggerView;
2262 }
2263 }
2264 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2265 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2266 GetWindowRect(hCompileView,&rect);
2267 if(rect.left<=pos.x&&pos.x<=rect.right&&
2268 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2269 SetCursor(LoadCursor(0,IDC_SIZENS));
2270
2271 dwDragLever=3;
2272 SetCapture(hwnd);
2273
2274 PrevMousePos=pos;
2275 start=pobj_nv->height_ClipCompileView;
2276 }
2277 }
2278#endif
2279 if( pobj_SideWeb && pobj_SideWeb->bShow){
2280 //SideWebとMDIクライアントの境目のサイズ変更ライン
2281 pobj_SideWeb->GetRect(&rect);
2282 ClientToScreen(hwnd,&rect);
2283 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2284 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2285 SetCursor(LoadCursor(0,IDC_SIZENS));
2286
2287 dwDragLever=4;
2288 SetCapture(hwnd);
2289
2290 PrevMousePos=pos;
2291 start=pobj_nv->width_WebSearchView;
2292 }
2293 }
2294 return 0;
2295 case WM_LBUTTONUP:
2296 if(dwDragLever){
2297 dwDragLever=0;
2298 ReleaseCapture();
2299 }
2300 return 0;
2301
2302
2303 case WM_SYSCOMMAND:
2304 //ウィンドウの最小化前にウィンドウ位置を保存
2305 if(wParam==SC_MINIMIZE){
2306 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2307 else if(!IsIconic(hwnd)){
2308 pobj_nv->bWindowMax=0;
2309 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2310 }
2311 }
2312 break; //処理をDefFrameProcへ
2313 case WM_QUERYENDSESSION:
2314 case WM_CLOSE:
2315 extern BOOL bSearchingClasses;
2316 if(bSearchingClasses){
2317 pobj_ClassTreeView->bCloseSwitch=1;
2318 return 0;
2319 }
2320
2321 //コンパイラビューを閉じる
2322 if(hCompileView)
2323 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2324
2325 //次回起動時にMDIウィンドウを最大化させるかを判定
2326 hChild=GetWindow(hClient,GW_CHILD);
2327 pobj_nv->bMDIZoomed=IsZoomed(hChild);
2328
2329 //プロジェクトを閉じる
2330 if(ProjectInfo.name[0]){
2331 if(!CloseProject()) return 0;
2332 }
2333
2334 //MDIウィンドウの保存確認
2335 hChild=GetWindow(hClient,GW_CHILD);
2336 while(hChild){
2337 i=GetWndNum(hChild);
2338 if(!DocumentModifyCheck(hChild)) return 0;
2339 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2340 }
2341
2342
2343 KillTimer(hwnd,ID_TIMER_BACKUP);
2344
2345
2346 //ProjectViewの位置を保存、ProjectViewを破棄
2347 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2348 DestroyWindow(hProjectView);
2349 DestroyWindow(hProjectView_ToolWindow);
2350
2351 //Rebarの位置を保存、Rebarを破棄
2352 delete pobj_Rebar;
2353 pobj_Rebar=0;
2354
2355 //タブコントロールを破棄
2356 delete pobj_MainTab;
2357 pobj_MainTab=0;
2358
2359 //SideWebを破棄
2360 delete pobj_SideWeb;
2361 pobj_SideWeb=0;
2362
2363 //メインウィンドウの最大化有無、座標を保存
2364 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2365 else if(!IsIconic(hwnd)){
2366 pobj_nv->bWindowMax=0;
2367 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2368 }
2369
2370 hChild=GetWindow(hClient,GW_CHILD);
2371 while(hChild){
2372 CloseDocWindow(GetWndNum(hChild));
2373 DestroyWindow(hChild);
2374 hChild=GetWindow(hClient,GW_CHILD);
2375 }
2376
2377 EndProjectEditor(); //ProjectEditorの情報を保存
2378
2379 //エディタ用フォントを破棄
2380 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2381 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2382 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2383
2384 DestroyWindow(hwnd);
2385 return 0;
2386
2387 case WM_DESTROY:
2388 PostQuitMessage(0);
2389 return 0;
2390 }
2391
2392 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
2393}
2394
2395int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2396 WNDCLASSEX wcl;
2397
2398 wcl.cbSize=sizeof(WNDCLASSEX);
2399 wcl.hInstance=hInst;
2400 wcl.lpszClassName=lpClassName;
2401 wcl.lpfnWndProc=WndProc;
2402
2403 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2404 else wcl.style=0;
2405
2406 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2407 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2408
2409 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2410 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2411
2412 wcl.lpszMenuName=NULL;
2413 wcl.cbClsExtra=0;
2414 wcl.cbWndExtra=0;
2415 wcl.hbrBackground=hBackBrush;
2416
2417 return RegisterClassEx(&wcl);
2418}
2419int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2420 int i,i2,IsStr;
2421 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2422 MSG msg;
2423 HACCEL hAccel;
2424
2425 hInst=hThisInst;
2426 if(!SetupProjectEditor()) return 0;
2427
2428 HBRUSH hGrayBrush_LineNumber;
2429 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2430
2431 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2432 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2433 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2434 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2435 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2436 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2437 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2438 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2439 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2440 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2441 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2442 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2443 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2444 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2445 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2446 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2447 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2448
2449 //Web検索用のウィンドウクラス
2450 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2451 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2452 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2453
2454 //ルーラーのウィンドウクラス
2455 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2456
2457 //SideWebのウィンドウクラス
2458 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2459
2460 ActiveBasic::IDE::Program::Main();
2461
2462 //return 0;
2463
2464
2465 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
2466
2467 //メインウィンドウ
2468 RECT *prc;
2469 prc=&pobj_nv->StartupWindowRect;
2470 /*
2471 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
2472 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
2473 prc->left, prc->top,
2474 prc->right-prc->left, prc->bottom-prc->top,
2475 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
2476 */
2477
2478 //バックアップ用タイマーを設定(10秒に一回)
2479 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
2480
2481 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
2482 SetClipboardViewer(hOwner);
2483
2484 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
2485 else ShowWindow(hOwner,ShowCmd);
2486 UpdateWindow(hOwner);
2487
2488 int open_sw=0;
2489 if(lstrlen(lpCmdLine)>0){
2490 lstrcpy(dummy,lpCmdLine);
2491 for(i=0,i2=0,IsStr=0;;i++,i2++){
2492 if(dummy[i]=='\"'){
2493 if(IsStr==0) IsStr=1;
2494 else IsStr=0;
2495 i++;
2496 }
2497 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
2498 str[i2]=0;
2499 if(!(strstr(str,":")||strstr(str,"\\\\"))){
2500 lstrcpy(str2,str);
2501 GetCurrentDirectory(MAX_PATH,str);
2502 lstrcat(str,"\\");
2503 lstrcat(str,str2);
2504 }
2505 ShortPathToLongPath(str,str2);
2506 OpenFileWithExtension(str2);
2507 open_sw=1;
2508 if(dummy[i]=='\0') break;
2509 i2=-1;
2510 continue;
2511 }
2512 str[i2]=dummy[i];
2513 }
2514 }
2515
2516 BOOL bRestore=0;
2517
2518
2519 {
2520 //自動バックアップ及び復元機能
2521
2522 //必要であれば復元
2523 bRestore=restore();
2524 }
2525
2526
2527#ifdef THETEXT
2528 if(open_sw==0&&bRestore==0){
2529 //ファイルが開かれなかったとき
2530 NewTextEditWindow(NULL,WNDTYPE_TEXT);
2531 }
2532#endif
2533
2534
2535 while(GetMessage(&msg,NULL,0,0)){
2536
2537 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
2538 if(ProjectInfo.name[0]){
2539 for(i=0,i2=0;i<MAX_WNDNUM;i++){
2540 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
2541 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
2542 }
2543 }
2544 if(i2==0){
2545 if(!TranslateMDISysAccel(hClient,&msg)){
2546 TranslateMessage(&msg);
2547 DispatchMessage(&msg);
2548 }
2549 }
2550 }
2551 else{
2552 if(!TranslateMDISysAccel(hClient,&msg)){
2553 TranslateMessage(&msg);
2554 DispatchMessage(&msg);
2555 }
2556 }
2557 }
2558 }
2559
2560 DeleteObject(hGrayBrush_LineNumber);
2561
2562#if defined HeapAlloc
2563 CheckHeapCheck();
2564#endif
2565
2566 return msg.wParam;
2567}
Note: See TracBrowser for help on using the repository browser.