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

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