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

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

CMenuへのキャストを排除。
いくつかのメニューをMainFrameに実装しなおした

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