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

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

下記メッセージをMainFrameクラスに実装しなおした
WM_TIMER
WM_DRAWCLIPBOARD
WM_MENUSELECT
WM_INITMENU
WM_MEASUREITEM
WM_DRAWITEM
WM_NOTIFY

File size: 85.9 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 CreateNewFile(void){
991
992#ifdef THETEXT
993 NewTextEditWindow(NULL,WNDTYPE_TEXT);
994 return;
995#else
996 int FileType;
997 BOOL bAddToProject;
998 char temporary[MAX_PATH];
999
1000 FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,(DLGPROC)DlgNewFile);
1001 if(FileType==-1) return;
1002
1003 if(FileType&0x00008000){
1004 bAddToProject=1;
1005 FileType&=0x0FFF;
1006 lstrcpy(temporary,NewFileName);
1007 if(!strstr(temporary,".")) lstrcat(temporary,".ab");
1008 GetFullPath(temporary,ProjectInfo.dir);
1009 }
1010 else bAddToProject=0;
1011
1012 switch(FileType){
1013 case FT_BASICPROGRAM: //Basicプログラム
1014 case FT_SUBPROGRAM:
1015 if(bAddToProject){
1016 WriteBuffer(temporary,0,0);
1017 NewTextEditWindow(temporary,WNDTYPE_BASIC);
1018 Project_File_Insert(temporary);
1019 }
1020 else NewTextEditWindow(NULL,WNDTYPE_BASIC);
1021 break;
1022
1023 case FT_PROJECT:
1024 DlgNewProjectWizard(hOwner);
1025 break;
1026
1027 case FT_TEXT:
1028 NewTextEditWindow(NULL,WNDTYPE_TEXT);
1029 break;
1030
1031 case FT_HTML:
1032 NewTextEditWindow(NULL,WNDTYPE_HTML);
1033 break;
1034
1035 case FT_ICON:
1036 NewIconEditWindow(NULL);
1037 break;
1038 }
1039#endif
1040}
1041void CloseDocWindow(int WndNum){
1042 int i2,i3;
1043
1044 MdiInfo[WndNum].hwnd=0;
1045
1046 //ドキュメントコンボボックスから文字列を消去
1047 extern HWND hDocCombo;
1048 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
1049 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
1050
1051 //タブコントロールからアイテムを消去
1052 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true );
1053
1054
1055 GlobalFree(MdiInfo[WndNum].title);
1056 GlobalFree(MdiInfo[WndNum].path);
1057
1058 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1059 ////////////////////////////
1060 // テキストエディタを閉じる
1061 ////////////////////////////
1062
1063 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
1064 if(ComplementWndInfo.hWnd){
1065 //コード補完リストを破棄する
1066 DestroyWindow(ComplementWndInfo.hWnd);
1067 ComplementWndInfo.hWnd=0;
1068 }
1069
1070 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
1071 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
1072
1073 if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
1074
1075 //エディットコントロールを破棄
1076 DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1077
1078 //Web検索ウィンドウを破棄
1079 delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
1080 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
1081
1082 //ルーラーウィンドウを破棄
1083 delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
1084 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
1085
1086 //アイコンを破棄
1087 if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
1088
1089 delete MdiInfo[WndNum].pMdiTextEdit;
1090 MdiInfo[WndNum].pMdiTextEdit=0;
1091 }
1092 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1093 /////////////////////
1094 // RADツールを閉じる
1095 /////////////////////
1096
1097 for(i2=0;i2<MAX_UNDONUM;i2++){
1098 if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
1099 Rad_DeleteUndoData(WndNum,i2);
1100 }
1101 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
1102 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
1103 SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
1104 DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
1105 DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
1106 GlobalFree(MdiInfo[WndNum].MdiRadInfo);
1107 }
1108 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1109 ////////////////////////////
1110 // メニューエディタを閉じる
1111 ////////////////////////////
1112
1113 DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
1114 GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
1115 }
1116 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1117 ////////////////////////////
1118 // アイコンエディタを閉じる
1119 ////////////////////////////
1120
1121 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1122 for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1123 if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
1124 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
1125 }
1126 }
1127
1128 DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
1129 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
1130 DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
1131 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1132 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
1133 }
1134 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
1135 }
1136}
1137void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1138 int WndNum;
1139 WndNum=GetWndNum(hwnd);
1140 if(WndNum==-1) return;
1141
1142 int WebResultWndHeight;
1143 WebResultWndHeight=LINK_ITEM_HEIGHT;
1144 //未完成
1145 WebResultWndHeight=0;
1146
1147 int iHeightRuler;
1148 if(pobj_nv->bEditor_Ruler){
1149 //ルーラー
1150 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
1151 0,
1152 0,
1153 cx,
1154 HEIGHT_RULER);
1155
1156 iHeightRuler=HEIGHT_RULER;
1157
1158 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1159 }
1160 else{
1161 iHeightRuler=0;
1162
1163 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1164 }
1165
1166 //エディットウィンドウ
1167 MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
1168 0,
1169 iHeightRuler,
1170 cx,
1171 cy-WebResultWndHeight-iHeightRuler,
1172 1);
1173
1174 //Web検索ウィンドウ
1175 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
1176 0,
1177 cy-WebResultWndHeight,
1178 cx,
1179 WebResultWndHeight);
1180}
1181LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1182 int i,i2;
1183 HWND hEdit;
1184
1185 switch(message){
1186 case WM_CREATE:
1187 CREATESTRUCT *lpcs;
1188 lpcs=(CREATESTRUCT *)lParam;
1189 MDICREATESTRUCT *lpmcs;
1190 lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1191 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1192 break;
1193 case WM_MDIACTIVATE:
1194 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1195 if(MethodCheckInfo.hWnd){
1196 DestroyWindow(MethodCheckInfo.hWnd);
1197 MethodCheckInfo.hWnd=0;
1198 }
1199
1200 //以前のコード補完リストを破棄する
1201 if(ComplementWndInfo.hWnd){
1202 DestroyWindow(ComplementWndInfo.hWnd);
1203 ComplementWndInfo.hWnd=0;
1204 }
1205
1206 if(!lParam) return 0;
1207 i=GetWndNum((HWND)lParam);
1208 if(i==-1) return 0; //ウィンドウが初期状態の場合
1209
1210#ifndef THETEXT
1211 //デバッガ メニューの状態を設定
1212 pobj_Debugger->ResetCommandEnabled();
1213#endif
1214
1215 //ドキュメント セレクト コンボボックス
1216 extern HWND hDocCombo;
1217 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1218 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1219
1220 //タブコントロール
1221 pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
1222
1223 if( !ProjectInfo.name[0] ){
1224 ResetClassTree(-1);
1225 }
1226
1227 return 0;
1228 case WM_SETFOCUS:
1229 hEdit=GetWindow(hwnd,GW_CHILD);
1230 SetFocus(hEdit);
1231 SetStatusText(CmdMsg);
1232 ResetState_EditMenu();
1233 ResetState_ViewMenu();
1234 break;
1235 case WM_SIZE:
1236 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1237 break;
1238 case WM_CLOSE:
1239 if(!DocumentModifyCheck(hwnd)) return 0;
1240 CloseDocWindow(GetWndNum(hwnd));
1241 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1242 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1243
1244 //メニュー状態を設定
1245 ResetState_DocMenu();
1246
1247 return i;
1248 }
1249 return DefMDIChildProc(hwnd,message,wParam,lParam);
1250}
1251void ResizeOwnerWnd(void){
1252 int width_owner,height_owner;
1253 int height_Rebar;
1254 int height_MdiClient;
1255 RECT rect,StatusRect,RebarRect;
1256
1257 GetClientRect(hOwner,&rect);
1258 width_owner=rect.right;
1259 height_owner=rect.bottom;
1260
1261 //Rebar
1262 SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1263 UpdateWindow(pobj_Rebar->hRebar);
1264
1265 //Status bar
1266#define STATUSBAR_PARTS_NUM 5
1267 int sb_size[STATUSBAR_PARTS_NUM];
1268 sb_size[0]=width_owner-340;
1269 sb_size[1]=width_owner-220;
1270 sb_size[2]=width_owner-120;
1271 sb_size[3]=width_owner-50;
1272 sb_size[4]=width_owner;
1273 SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
1274 SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1275 UpdateWindow(hStatusBar);
1276
1277 //Status bar
1278 int height_Statusbar;
1279 SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
1280 height_Statusbar=StatusRect.bottom;
1281
1282 GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
1283 height_Rebar=RebarRect.bottom-RebarRect.top+2;
1284
1285 int height_dv; //Width of Debugger View
1286 int height_cv; //Width of Compiler View
1287 height_dv=0;
1288 height_cv=0;
1289#ifndef THETEXT
1290 if(bClipCompileView){
1291 if(pobj_Debugger->IsDebuggerView()){
1292 //デバッガビューが表示されているとき
1293 height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
1294 }
1295 if(hCompileView){
1296 //コンパイラビューが表示されているとき
1297 height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
1298 }
1299 }
1300#endif
1301
1302 int width_pjv=0; //Width of Project View
1303 if(pobj_nv->bClipProjectView){
1304 if(IsWindowVisible(hProjectView)){
1305 //プロジェクトビューが表示されているとき
1306 width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
1307 }
1308 }
1309
1310 int width_SideWeb=0;
1311 if( pobj_SideWeb )
1312 {
1313 if(pobj_SideWeb->bShow){
1314 width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
1315 }
1316 }
1317
1318 //MDIクライアントの高さ
1319 height_MdiClient=height_owner-(
1320 height_Rebar+
1321 height_dv+
1322 height_cv+
1323 height_Statusbar
1324 );
1325
1326 //タブコントロール
1327 int tab_height;
1328 if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
1329 else{
1330 RECT rc;
1331 TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
1332 tab_height=rc.bottom-rc.top;
1333 }
1334 MoveWindow(pobj_MainTab->hTab,
1335 width_pjv,
1336 height_Rebar,
1337 width_owner-width_pjv-width_SideWeb,
1338 tab_height,
1339 1);
1340
1341 //MDIクライアント
1342 MoveWindow(hClient,
1343 width_pjv,
1344 height_Rebar+tab_height,
1345 width_owner-width_pjv-width_SideWeb,
1346 height_MdiClient-tab_height,
1347 1);
1348
1349 if( pobj_SideWeb )
1350 {
1351 if(pobj_SideWeb->bShow){
1352 //SideWeb
1353 pobj_SideWeb->resize(
1354 width_owner - pobj_nv->width_WebSearchView,
1355 height_Rebar,
1356 pobj_nv->width_WebSearchView,
1357 height_MdiClient);
1358 }
1359 else pobj_SideWeb->resize(0,0,0,0);
1360 }
1361
1362 if(width_pjv){
1363 //プロジェクトビュー
1364 MoveWindow(hProjectView,
1365 0,
1366 height_Rebar,
1367 pobj_nv->width_ClipProjectView,
1368 height_MdiClient,
1369 1);
1370 InvalidateRect(hProjectView,NULL,0);
1371 }
1372
1373 if(height_dv){
1374#ifndef THETEXT
1375 //デバッガビュー
1376 pobj_Debugger->resize(
1377 0,
1378 height_Rebar+height_MdiClient+LEVER_THICK,
1379 width_owner,
1380 pobj_nv->height_ClipDebuggerView);
1381#endif
1382 }
1383 if(height_cv){
1384 //コンパイラビュー
1385 MoveWindow(hCompileView,
1386 0,
1387 height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
1388 width_owner,
1389 pobj_nv->height_ClipCompileView,
1390 1);
1391 }
1392}
1393
1394WNDPROC oldMainFrameWndProc;
1395LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1396 int i,i2,i3,WndNum;
1397 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
1398 HWND hChild,hEdit;
1399 RECT rect;
1400 POINT pos;
1401 HDROP hDrop;
1402 HGLOBAL hGlobal;
1403 CHARRANGE CharRange;
1404 HANDLE hFile;
1405 BOOL bChecked;
1406
1407 static COLORREF colorUser=RGB(255,255,255);
1408
1409 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1410 //「最近使ったファイル」メニューコマンド
1411 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1412 OpenFileWithExtension(str);
1413 return 0;
1414 }
1415
1416 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1417 //「最近使ったプロジェクト」メニューコマンド
1418 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1419 OpenFileWithExtension(str);
1420 return 0;
1421 }
1422
1423 switch(message)
1424 {
1425 case WM_COMMAND:
1426 switch(LOWORD(wParam)){
1427 case IDM_NEW:
1428 CreateNewFile();
1429 return 0;
1430 case IDM_OPEN:
1431 //"ファイルを指定してください"
1432 if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return 0;
1433
1434 OpenFileWithExtension(str);
1435 return 0;
1436 case IDM_CLOSE:
1437 hChild=GetWindow(hClient,GW_CHILD);
1438 if(IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
1439 return 0;
1440#ifndef THETEXT
1441 case IDM_PROJECT_OPEN:
1442 //"プロジェクト ファイルを指定して下さい"
1443 if(!GetFilePathDialog(hwnd,str,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE)) return 0;
1444
1445 OpenProject(str);
1446 return 0;
1447 case IDM_PROJECT_SAVE:
1448 SaveProject();
1449 return 0;
1450 case IDM_PROJECT_CLOSE:
1451 CloseProject();
1452 return 0;
1453 case IDM_PROJECT_FOLDER_OPEN:
1454 ShellExecute(hwnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
1455 return 0;
1456#endif
1457 case IDM_SAVE:
1458 SaveDocument(GetWindow(hClient,GW_CHILD),NULL);
1459 return 0;
1460 case IDM_NEWSAVE:
1461 //"保存先のファイルを指定してください"
1462 if(!GetFilePathDialog(hwnd,str,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return 0;
1463
1464 SaveDocument(GetWindow(hClient,GW_CHILD),str);
1465 return 0;
1466 case IDM_CODE_SAVE:
1467 //文字コードを指定して保存
1468 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),hOwner,(DLGPROC)nkfDlgCodeSave);
1469 return 0;
1470 case IDM_ALLSAVE:
1471 for(i=0;i<MAX_WNDNUM;i++){
1472 if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
1473 }
1474 if(ProjectInfo.name[0]) SaveProject();
1475 return 0;
1476
1477 case IDM_PAGESET:
1478 //ページ設定
1479 obj_Page.SetupDlg();
1480 return 0;
1481
1482 case IDM_PREVIEW:
1483 //プレビュー(Pro版のみ)
1484 Preview();
1485 return 0;
1486
1487 case IDM_PRINTOUT:
1488 //印刷
1489 Printout();
1490 return 0;
1491
1492 case IDM_EXIT:
1493 SendMessage(hwnd,WM_CLOSE,0,0);
1494 return 0;
1495 case IDM_UNDO:
1496 case (WORD)IDM_ACCEL_UNDO:
1497 hChild=GetWindow(hClient,GW_CHILD);
1498 if(!hChild) return 0;
1499 WndNum=GetWndNum(hChild);
1500 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
1501 TextEdit_UndoCommand(WndNum);
1502 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1503 Rad_UndoCommand(WndNum);
1504 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
1505 IconEdit_UndoCommand(WndNum);
1506 return 0;
1507 case IDM_REDO:
1508 case (WORD)IDM_ACCEL_REDO:
1509 hChild=GetWindow(hClient,GW_CHILD);
1510 if(!hChild) return 0;
1511 WndNum=GetWndNum(hChild);
1512 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
1513 TextEdit_RedoCommand(WndNum);
1514 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1515 Rad_RedoCommand(WndNum);
1516 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
1517 IconEdit_RedoCommand(WndNum);
1518 return 0;
1519 case IDM_CUT:
1520 hChild=GetWindow(hClient,GW_CHILD);
1521 WndNum=GetWndNum(hChild);
1522 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1523 hEdit=GetWindow(hChild,GW_CHILD);
1524
1525 TextEdit_GetSel(WndNum,&CharRange);
1526
1527 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
1528 pTemp=(char *)GlobalLock(hGlobal);
1529 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
1530 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
1531 GlobalUnlock(hGlobal);
1532
1533 //クリップボードに保存
1534 OpenClipboard(hwnd);
1535 EmptyClipboard();
1536 SetClipboardData(CF_TEXT,hGlobal);
1537 CloseClipboard();
1538
1539 //選択文字列を消去
1540 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
1541 }
1542 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1543 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1544
1545 //クリップボードに格納するためのデータを用意する
1546 ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
1547 ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
1548 hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
1549 ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17;
1550 ProjectInfo.pWindowInfo[i2].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10;
1551
1552 OpenClipboard(hwnd);
1553 EmptyClipboard();
1554 SetClipboardData(dwRadClipboardID,hGlobal);
1555 CloseClipboard();
1556
1557 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1558 }
1559 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1560 //クリップボードに格納するためのデータを用意する
1561 hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
1562 if(hGlobal==0) return 0;
1563
1564 OpenClipboard(hwnd);
1565 EmptyClipboard();
1566 SetClipboardData(CF_BITMAP,hGlobal);
1567 CloseClipboard();
1568
1569 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
1570 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
1571
1572 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
1573 }
1574 return 0;
1575 case IDM_COPY:
1576 hChild=GetWindow(hClient,GW_CHILD);
1577 WndNum=GetWndNum(hChild);
1578 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1579 hEdit=GetWindow(hChild,GW_CHILD);
1580
1581 TextEdit_GetSel(WndNum,&CharRange);
1582
1583 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
1584 pTemp=(char *)GlobalLock(hGlobal);
1585 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
1586 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
1587 GlobalUnlock(hGlobal);
1588
1589 //クリップボードに保存
1590 OpenClipboard(hwnd);
1591 EmptyClipboard();
1592 SetClipboardData(CF_TEXT,hGlobal);
1593 CloseClipboard();
1594 }
1595 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1596 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1597
1598 //クリップボードに格納するためのデータを用意する
1599 hGlobal=Rad_GetChildInfoClipboardData(WndNum,i2);
1600
1601 OpenClipboard(hwnd);
1602 EmptyClipboard();
1603 SetClipboardData(dwRadClipboardID,hGlobal);
1604 CloseClipboard();
1605 }
1606 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1607 //クリップボードに格納するためのデータを用意する
1608 hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
1609
1610 OpenClipboard(hwnd);
1611 EmptyClipboard();
1612 SetClipboardData(CF_BITMAP,hGlobal);
1613 CloseClipboard();
1614 }
1615 return 0;
1616 case IDM_PASTE:
1617 hChild=GetWindow(hClient,GW_CHILD);
1618 WndNum=GetWndNum(hChild);
1619 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1620 hEdit=GetWindow(hChild,GW_CHILD);
1621
1622 //クリップボードを開く
1623 OpenClipboard(hwnd);
1624 hGlobal=GetClipboardData(CF_TEXT);
1625 if(!hGlobal){
1626 CloseClipboard();
1627 return 0;
1628 }
1629
1630
1631 if(pobj_nv->bPasteIndent){
1632 //インデント整形
1633 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
1634 GlobalUnlock(hGlobal);
1635 }
1636 else pTemp=(char *)GlobalLock(hGlobal);
1637
1638
1639 //テキストエディタの文字列をリプレイス
1640 TextEdit_ReplaceUpdateUndoData(WndNum,
1641 pTemp,
1642 1,
1643 1);
1644
1645 if(pobj_nv->bPasteIndent)
1646 HeapDefaultFree(pTemp);
1647 else
1648 GlobalUnlock(hGlobal);
1649
1650 //クリップボードを閉じる
1651 CloseClipboard();
1652
1653
1654 //キャレット位置までスクロールする
1655 TextEdit_ScrollCaret(WndNum,0);
1656 ResetCaretPos(WndNum);
1657 }
1658 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1659 OpenClipboard(hwnd);
1660 hGlobal=GetClipboardData(dwRadClipboardID);
1661 if(!hGlobal){
1662 CloseClipboard();
1663 return 0;
1664 }
1665 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
1666 CloseClipboard();
1667 }
1668 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1669 OpenClipboard(hwnd);
1670 hGlobal=GetClipboardData(CF_BITMAP);
1671 if(!hGlobal){
1672 CloseClipboard();
1673 return 0;
1674 }
1675 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
1676 CloseClipboard();
1677 }
1678 return 0;
1679 case IDM_DELETE:
1680 hChild=GetWindow(hClient,GW_CHILD);
1681 WndNum=GetWndNum(hChild);
1682 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1683 hEdit=GetWindow(hChild,GW_CHILD);
1684 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
1685 }
1686 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1687 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1688 return 0;
1689 case IDM_ALLSELECT:
1690 hChild=GetWindow(hClient,GW_CHILD);
1691 WndNum=GetWndNum(hChild);
1692 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1693 hEdit=GetWindow(hChild,GW_CHILD);
1694
1695 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
1696 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
1697
1698 GetCaretPosFromBufferIndex(
1699 MdiInfo[WndNum].pMdiTextEdit->buffer,
1700 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
1701 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
1702
1703 InvalidateRect(hEdit,NULL,0);
1704
1705 ResetState_EditMenu();
1706 }
1707 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1708 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1709 for(i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
1710 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
1711 }
1712 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
1713 }
1714 return 0;
1715 case IDM_FIND:
1716 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),hOwner,(DLGPROC)DlgFind);
1717 return 0;
1718 case IDM_PERMUTATION:
1719 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),hOwner,(DLGPROC)DlgPermutation);
1720 return 0;
1721
1722
1723 ///////////////////////
1724 // 変換メニュー
1725 ///////////////////////
1726 case IDM_CONV_ALPHA_SMALL:
1727 case IDM_CONV_ALPHA_BIG:
1728 case IDM_CONV_HALF:
1729 case IDM_CONV_MULTI:
1730 case IDM_CONV_KATAKANA:
1731 case IDM_CONV_HIRAGANA:
1732 case IDM_CONV_SPACE:
1733 case IDM_CONV_TAB:
1734#ifdef THETEXT
1735 case IDM_CONV_HASRETURN:
1736 case IDM_CONV_QUOTE:
1737#else
1738 case IDM_CODEFORMAT:
1739#endif
1740 TextEdit_Convert(LOWORD(wParam));
1741 return 0;
1742
1743#ifdef THETEXT
1744 ///////////////////////
1745 // ツールメニュー
1746 ///////////////////////
1747 case IDM_STRING_COUNT:
1748 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,0);
1749 return 0;
1750 case IDM_SEL_STRING_COUNT:
1751 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,1);
1752 return 0;
1753#endif //THETEXT
1754
1755 case IDM_PROJECTVIEW:
1756 if(pobj_nv->bClipProjectView){
1757 if(IsWindowVisible(hProjectView)){
1758 ShowWindow(hProjectView,SW_HIDE);
1759 bChecked=0;
1760 }
1761 else{
1762 ShowWindow(hProjectView,SW_SHOW);
1763 bChecked=1;
1764 }
1765 }
1766 else{
1767 if(IsWindowVisible(hProjectView_ToolWindow)){
1768 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
1769 bChecked=0;
1770 }
1771 else{
1772 ShowWindow(hProjectView_ToolWindow,SW_SHOW);
1773 ShowWindow(hProjectView,SW_SHOW);
1774 bChecked=1;
1775 }
1776 }
1777 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked);
1778
1779 //再配置
1780 ResizeOwnerWnd();
1781
1782 ShowWindow(hClient,SW_SHOW);
1783 return 0;
1784 case IDM_PROJECT_OPTION:
1785 DlgProjectOptionSetting(hwnd);
1786 return 0;
1787 case IDM_TOPMOST:
1788 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
1789 SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1790 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
1791 }
1792 else{
1793 SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1794 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
1795 }
1796 return 0;
1797
1798#ifdef THETEXT
1799 case IDM_RIGHT_TURN:
1800 pobj_nv->bRightTurn^=1;
1801 ResetState_ViewMenu();
1802
1803 //トップのウィンドウを再描画
1804 RedrawAllWindow();
1805
1806 return 0;
1807#endif
1808
1809 case IDM_SET:
1810 DlgOptionSetting(hwnd);
1811 return 0;
1812
1813#ifndef THETEXT
1814 case IDM_DEBUG:
1815 if(pobj_Debugger->IsDebugging()){
1816 pobj_Debugger->DebugContinue();
1817 return 0;
1818 }
1819
1820 hChild=GetWindow(hClient,GW_CHILD);
1821 if(ProjectInfo.name[0]){
1822 //プロジェクトが開かれている場合
1823 if(!SetProjectToRun()) return 0;
1824
1825 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
1826 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
1827 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
1828 hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
1829 DWORD dwAccessBytes;
1830 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
1831 CloseHandle(hFile);
1832
1833 //ソースファイル名をtemp2へ
1834 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1835
1836 //出力ファイル名をtemp3へ
1837 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1838 GetFullPath(temp3,ProjectInfo.dir);
1839
1840 if(IsNeedCompileForProject(1))
1841 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
1842 else
1843 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
1844
1845 //DLLオプション
1846 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1847
1848 //Unicodeオプション
1849 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1850
1851 //ブレークポイントをセーブ
1852 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
1853 }
1854 else{
1855 //単独ソースコード
1856 if(!SetRunning(hChild)) return 0;
1857 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
1858 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1859 else
1860 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1861
1862 //ブレークポイントをセーブ
1863 pobj_DBBreakPoint->SaveToTempFile();
1864 }
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 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1887
1888 return 0;
1889 case IDM_DEBUGCOMPILE:
1890 hChild=GetWindow(hClient,GW_CHILD);
1891 if(ProjectInfo.name[0]){
1892 //プロジェクトが開かれている場合
1893 if(!SetProjectToRun()) return 0;
1894
1895 //ソースファイル名をtemp2へ
1896 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1897
1898 //出力ファイル名をtemp3へ
1899 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1900 GetFullPath(temp3,ProjectInfo.dir);
1901
1902 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
1903
1904 //DLLオプション
1905 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1906
1907 //Unicodeオプション
1908 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1909 }
1910 else{
1911 //単独ソースコード
1912 if(!SetRunning(hChild)) return 0;
1913 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1914 }
1915
1916 //コンパイルビューをクリップするかどうか
1917 if(bClipCompileView){
1918 lstrcat(temporary," /clip_compile_view");
1919
1920 //コンパイラビューを閉じる
1921 if(hCompileView==(HWND)-1) return 0;
1922 if(hCompileView){
1923 hChild=hCompileView;
1924 hCompileView=(HWND)-1;
1925 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1926 }
1927
1928 //重複起動防止のため
1929 hCompileView=(HWND)-1;
1930 }
1931
1932 //インクルードディレクトリ
1933 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1934 lstrcat(temporary,temp2);
1935
1936 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1937
1938 return 0;
1939 case IDM_ATTACH:
1940 int idProcess;
1941 DWORD dwPlatform;
1942 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1943 if(idProcess==0) return 0;
1944
1945 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
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 ActiveBasic::Common::Platform::EnumType platform;
1968 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1969 {
1970 platform = ActiveBasic::Common::Platform::X86;
1971 }
1972 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1973 {
1974 platform = ActiveBasic::Common::Platform::X64;
1975 }
1976 else
1977 {
1978 throw;
1979 }
1980
1981 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1982
1983 return 0;
1984 case IDM_RELEASECOMPILE:
1985 hChild=GetWindow(hClient,GW_CHILD);
1986 if(ProjectInfo.name[0]){
1987 //プロジェクトが開かれている場合
1988 if(!SetProjectToRun()) return 0;
1989
1990 //ソースファイル名をtemp2へ
1991 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1992
1993 //出力ファイル名をtemp3へ
1994 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1995 GetFullPath(temp3,ProjectInfo.dir);
1996
1997 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
1998
1999 //DLLオプション
2000 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
2001
2002 //Unicodeオプション
2003 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
2004 }
2005 else{
2006 //単独ソースコード
2007 if(!SetRunning(hChild)) return 0;
2008 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
2009 }
2010
2011 //コンパイルビューをクリップするかどうか
2012 if(bClipCompileView){
2013 lstrcat(temporary," /clip_compile_view");
2014
2015 //コンパイラビューを閉じる
2016 if(hCompileView==(HWND)-1) return 0;
2017 if(hCompileView){
2018 hChild=hCompileView;
2019 hCompileView=(HWND)-1;
2020 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
2021 }
2022
2023 //重複起動防止のため
2024 hCompileView=(HWND)-1;
2025 }
2026
2027 //インクルードディレクトリ
2028 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
2029 lstrcat(temporary,temp2);
2030
2031 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
2032
2033 return 0;
2034 case IDM_RELEASERUN:
2035 hChild=GetWindow(hClient,GW_CHILD);
2036 if(ProjectInfo.name[0]){
2037/* //プロジェクトが開かれている場合
2038 if(!SetProjectToRun()) return 0;
2039
2040 //必要であればリリースコンパイル
2041 if(IsNeedCompileForProject(0))
2042 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2043
2044 if(ProjectInfo.dwModuleType==MT_DLL){
2045 lstrcpy(temporary,ProjectInfo.szExePath);
2046 }
2047 else{
2048 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
2049 GetFullPath(temporary,ProjectInfo.dir);
2050 }
2051 }
2052 else{
2053/* //必要であればリリースコンパイル
2054 if(!SetRunning(hChild)) return 0;
2055
2056 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
2057 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
2058
2059 //単独ソースコード
2060 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
2061 lstrcat(temporary,temp2);
2062 lstrcat(temporary,temp3);
2063 lstrcat(temporary,".exe");
2064 }
2065
2066 //インクルードディレクトリ
2067 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
2068 lstrcat(temporary,temp2);
2069
2070 ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
2071 return 0;
2072
2073
2074 ////////////////////////
2075 // デバッグ コマンド
2076 ////////////////////////
2077
2078 case IDM_STEP_IN:
2079 pobj_Debugger->StepIn();
2080 break;
2081 case IDM_STEP_OVER:
2082 pobj_Debugger->StepOver();
2083 break;
2084 case IDM_STEP_CURSOR:
2085 pobj_Debugger->StepToCursor();
2086 break;
2087 case IDM_BREAKPOINT:
2088 if(ProjectInfo.name[0]){
2089 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
2090 }
2091 else{
2092 pobj_DBBreakPoint->Event_BreakPoint();
2093 }
2094 break;
2095 case IDM_DEBUG_STOP:
2096 pobj_Debugger->DebugStop();
2097 break;
2098 case IDM_DEBUG_PAUSE:
2099 pobj_Debugger->DebugPause();
2100 break;
2101
2102
2103 case IDM_COMMUNITY:
2104 ShellExecute(hwnd,"open","iexplore.exe",
2105 "http://www.activebasic.com/forum/",
2106 NULL,SW_SHOWNORMAL);
2107 return 0;
2108 case IDM_COMMU_SEARCH:
2109 ShellExecute(hwnd,"open","iexplore.exe",
2110 "http://www.activebasic.com/forum/search.php",
2111 NULL,SW_SHOWNORMAL);
2112 return 0;
2113 case IDM_COMMU_PM:
2114 ShellExecute(hwnd,"open","iexplore.exe",
2115 "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
2116 NULL,SW_SHOWNORMAL);
2117 return 0;
2118 case ID_COMMU_FORUM1:
2119 ShellExecute(hwnd,"open","iexplore.exe",
2120 "http://www.activebasic.com/forum/viewforum.php?f=1",
2121 NULL,SW_SHOWNORMAL);
2122 return 0;
2123 case ID_COMMU_FORUM2:
2124 ShellExecute(hwnd,"open","iexplore.exe",
2125 "http://www.activebasic.com/forum/viewforum.php?f=2",
2126 NULL,SW_SHOWNORMAL);
2127 return 0;
2128 case ID_COMMU_FORUM3:
2129 ShellExecute(hwnd,"open","iexplore.exe",
2130 "http://www.activebasic.com/forum/viewforum.php?f=5",
2131 NULL,SW_SHOWNORMAL);
2132 return 0;
2133 case ID_COMMU_FORUM4:
2134 ShellExecute(hwnd,"open","iexplore.exe",
2135 "http://www.activebasic.com/forum/viewforum.php?f=3",
2136 NULL,SW_SHOWNORMAL);
2137 return 0;
2138 case ID_COMMU_FORUM5:
2139 ShellExecute(hwnd,"open","iexplore.exe",
2140 "http://www.activebasic.com/forum/viewforum.php?f=6",
2141 NULL,SW_SHOWNORMAL);
2142 return 0;
2143 case ID_COMMU_FORUM6:
2144 ShellExecute(hwnd,"open","iexplore.exe",
2145 "http://www.activebasic.com/forum/viewforum.php?f=8",
2146 NULL,SW_SHOWNORMAL);
2147 return 0;
2148 case ID_COMMU_FORUM7:
2149 ShellExecute(hwnd,"open","iexplore.exe",
2150 "http://www.activebasic.com/forum/viewforum.php?f=4",
2151 NULL,SW_SHOWNORMAL);
2152 return 0;
2153 case ID_COMMU_FORUM8:
2154 ShellExecute(hwnd,"open","iexplore.exe",
2155 "http://www.activebasic.com/forum/viewforum.php?f=7",
2156 NULL,SW_SHOWNORMAL);
2157 return 0;
2158#endif //THETEXT
2159
2160
2161 case IDM_TOPIC:
2162#ifdef THETEXT
2163 sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
2164 ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
2165#else
2166 sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
2167 HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
2168#endif
2169 return 0;
2170
2171#ifdef THETEXT
2172 case IDM_DSHOMEPAGE:
2173 ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
2174 return 0;
2175#else
2176 case IDM_AB_WEBSITE:
2177 ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
2178 return 0;
2179 case IDM_ACTBDL:
2180 ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
2181 return 0;
2182#endif
2183
2184 case IDM_ABOUT:
2185 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
2186 return 0;
2187
2188 case IDM_WEB_SEARCH:
2189 hChild=GetWindow(hClient,GW_CHILD);
2190 WndNum=GetWndNum(hChild);
2191 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2192 extern HWND hWebSearchCombo;
2193 SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
2194 }
2195 return 0;
2196
2197
2198
2199 //////////////////////////////////////////////////////
2200 // レバーコントロールのサブメニューコマンド(レバー追加)
2201 //////////////////////////////////////////////////////
2202
2203 case IDM_DOCSELECTBAND:
2204 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
2205 return 0;
2206 case IDM_STANDARDBAND:
2207 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
2208 return 0;
2209#ifndef THETEXT
2210 case IDM_RELEASEBAND:
2211 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
2212 return 0;
2213 case IDM_DEBUGBAND:
2214 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
2215 return 0;
2216 case IDM_SELECTCOMPILERBAND:
2217 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
2218 return 0;
2219#endif
2220 case IDM_BANDMENU_WEB_SEARCH:
2221 pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
2222 return 0;
2223 case IDM_NOGRIPPER:
2224 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
2225 else pobj_nv->bNoGripper=1;
2226
2227 //レバーコントロールを再生成
2228 pobj_Rebar->ResetRebar();
2229
2230 //メニュー状態を設定
2231 ResetState_DocMenu();
2232 return 0;
2233 case IDM_RESET_REBAR:
2234 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
2235 if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
2236
2237 //レバーコントロールを再生成
2238 pobj_Rebar->ResetInitRebar();
2239
2240 //メニュー状態を設定
2241 ResetState_DocMenu();
2242 return 0;
2243
2244
2245
2246 ////////////////////////////////////////////////////
2247 // メイン タブ コントロールのサブメニューコマンド
2248 ////////////////////////////////////////////////////
2249
2250 case IDM_ALLCLOSE_OMIT_MYSELF:
2251 //このウィンドウ以外をすべて閉じる(&A)
2252 hChild=GetWindow(hClient,GW_CHILD);
2253 WndNum=GetWndNum(hChild);
2254 for(i=0;i<MAX_WNDNUM;i++){
2255 if(i==WndNum) continue;
2256 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
2257 }
2258 return 0;
2259
2260 case IDM_PATH_COPY:
2261 hChild=GetWindow(hClient,GW_CHILD);
2262 WndNum=GetWndNum(hChild);
2263
2264 //絶対パスをコピー
2265 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
2266 pTemp=(char *)GlobalLock(hGlobal);
2267 lstrcpy(pTemp,MdiInfo[WndNum].path);
2268 GlobalUnlock(hGlobal);
2269
2270 //クリップボードに保存
2271 OpenClipboard(hwnd);
2272 EmptyClipboard();
2273 SetClipboardData(CF_TEXT,hGlobal);
2274 CloseClipboard();
2275 return 0;
2276
2277 case IDM_FOLDER_OPEN:
2278 hChild=GetWindow(hClient,GW_CHILD);
2279 WndNum=GetWndNum(hChild);
2280
2281 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
2282 lstrcat(temporary,temp2);
2283
2284 ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
2285 return 0;
2286
2287 case IDM_DELETE_FILE:
2288 hChild=GetWindow(hClient,GW_CHILD);
2289 WndNum=GetWndNum(hChild);
2290
2291 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
2292 lstrcat(temporary,temp2);
2293
2294 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
2295 if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
2296
2297 //ゴミ箱へ
2298 SHFILEOPSTRUCT fo;
2299 fo.hwnd=hwnd;
2300 fo.wFunc=FO_DELETE;
2301 fo.pFrom =MdiInfo[WndNum].path;
2302 fo.pTo="\0";
2303 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
2304 SHFileOperation(&fo);
2305
2306 //閉じる
2307 MdiInfo[WndNum].pMdiTextEdit->UnModify();
2308 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
2309
2310 return 0;
2311
2312 case IDM_USER_COLOR:
2313 {
2314 CHOOSECOLOR cc;
2315 COLORREF CusColors[16]={
2316 RGB(255,255,255),
2317 RGB(0,0,0),
2318 RGB(128,128,128),
2319 RGB(192,192,192),
2320 RGB(128,0,0),
2321 RGB(255,0,0),
2322 RGB(128,128,0),
2323 RGB(255,255,0),
2324 RGB(0,128,0),
2325 RGB(0,255,0),
2326 RGB(0,128,128),
2327 RGB(0,255,255),
2328 RGB(0,0,128),
2329 RGB(0,0,255),
2330 RGB(128,0,128),
2331 RGB(255,0,255)};
2332 cc.lStructSize=sizeof(CHOOSECOLOR);
2333 cc.hwndOwner=hwnd;
2334 cc.rgbResult=colorUser;
2335 cc.lpCustColors=CusColors;
2336 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
2337 if(!ChooseColor(&cc)){
2338 return 0;
2339 }
2340 colorUser=cc.rgbResult;
2341 }
2342 case IDM_GRAY:
2343 case IDM_WHITE:
2344 case IDM_RED:
2345 case IDM_GREEN:
2346 case IDM_BLUE:
2347 case IDM_YELLOW:
2348 hChild=GetWindow(hClient,GW_CHILD);
2349 WndNum=GetWndNum(hChild);
2350
2351 TC_ITEM tcItem;
2352 tcItem.mask=TCIF_PARAM;
2353 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
2354 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
2355 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
2356 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
2357 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
2358 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
2359 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
2360 TabCtrl_SetItem(pobj_MainTab->hTab,
2361 TabCtrl_GetCurSel(pobj_MainTab->hTab),
2362 &tcItem);
2363 InvalidateRect(pobj_MainTab->hTab,NULL,0);
2364 return 0;
2365
2366
2367
2368 //////////////////////////////////
2369 // SideWeb
2370 //////////////////////////////////
2371
2372 case IDC_CLIP:
2373 pobj_SideWeb->bShow=0;
2374 ResizeOwnerWnd();
2375 return 0;
2376 }
2377 break;
2378 case WM_DROPFILES:
2379 hDrop=(HDROP)wParam;
2380
2381 i2=DragQueryFile(hDrop,-1,0,0);
2382 for(i=0;i<i2;i++){
2383 DragQueryFile(hDrop,i,str,MAX_PATH);
2384 OpenFileWithExtension(str);
2385 }
2386 DragFinish(hDrop);
2387 return 0;
2388 case WM_SHOWERROR:
2389 //エラー部分を反転表示
2390 DWORD AccBytes;
2391 HANDLE fh;
2392 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
2393 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2394 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
2395 CloseHandle(fh);
2396 temporary[AccBytes]=0;
2397 hChild=GetWindow(hClient,GW_CHILD);
2398 while(hChild){
2399 WndNum=GetWndNum(hChild);
2400 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2401 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
2402 }
2403 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2404 }
2405 if(!hChild){
2406 hChild=OpenFileWithExtension(temporary);
2407 WndNum=GetWndNum(hChild);
2408 }
2409
2410 if(WndNum==-1) return 0;
2411
2412 //ウィンドウを最前面に表示
2413 BringWindowToTop(hChild);
2414 UpdateWindow(hChild);
2415
2416 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
2417
2418 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
2419 for(i=0,i2=0;;i++){
2420 if(i2>=(int)wParam) break;
2421 if(pTemp[i]=='\0') break;
2422 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
2423 i++;
2424 i2++;
2425 }
2426 }
2427 pos.x=i;
2428
2429 //行の終端インデックスを取得
2430 for(;;i++){
2431 if(pTemp[i]=='\0') break;
2432 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
2433 }
2434 pos.y=i;
2435
2436 //行を選択する
2437 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2438
2439 return 0;
2440
2441#ifndef THETEXT
2442 case WM_SETCOMPILEVIEW:
2443 //コンパイラウィンドウ(埋め込み型)が表示されたとき
2444 hCompileView=(HWND)lParam;
2445 ResizeOwnerWnd();
2446 return 0;
2447 case WM_DESTROYCOMPILEVIEW:
2448 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2449 if((int)hCompileView==-1){
2450 //すぐに次のコンパイラウィンドウが起動するとき
2451 hCompileView=0;
2452 }
2453 else{
2454 //完全にコンパイラウィンドウを閉じたときはリサイズ
2455 hCompileView=0;
2456
2457 ResizeOwnerWnd();
2458 }
2459 return 0;
2460
2461 case WM_SETDEBUGGERBASE:
2462 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2463 pobj_Debugger->begin();
2464
2465 //BasicCompiler.exeの強制終了を考慮
2466 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2467
2468 return 0;
2469 case WM_DESTROYDEBUGGERBASE:
2470 //BasicCompiler.exeの強制終了を考慮
2471 KillTimer(hOwner,ID_DEBUGSAFTY);
2472
2473 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2474 pobj_Debugger->end();
2475
2476 return 0;
2477
2478 case WM_SETDEBUGGERVIEW:
2479 //デバッガウィンドウ(埋め込み型)が表示されたとき
2480 pobj_Debugger->watch_start((HWND)lParam);
2481 ResizeOwnerWnd();
2482 return 0;
2483 case WM_DESTROYDEBUGGERVIEW:
2484 //デバッガウィンドウ(埋め込み型)が破棄されたとき
2485 pobj_Debugger->watch_quit();
2486 ResizeOwnerWnd();
2487 return 0;
2488#endif
2489
2490 case WM_SIZE:
2491 ResizeOwnerWnd();
2492 return 0;
2493
2494
2495 case WM_MOUSEMOVE:
2496 static DWORD dwDragLever;
2497 static POINT PrevMousePos;
2498 static int start;
2499
2500 pos.x=(long)(short)LOWORD(lParam);
2501 pos.y=(long)(short)HIWORD(lParam);
2502 ClientToScreen(hwnd,&pos);
2503
2504 if(dwDragLever){
2505 GetClientRect(hwnd,&rect);
2506
2507 if(dwDragLever==1){
2508 //プロジェクトビューをリサイズ中
2509 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2510 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2511 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2512 }
2513 else if(dwDragLever==2){
2514 //デバッガビューをリサイズ中
2515 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2516 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2517 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2518 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2519 }
2520 else if(dwDragLever==3){
2521 //コンパイラビューをリサイズ中
2522 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2523 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2524 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2525 pobj_nv->height_ClipCompileView=rect.bottom-100;
2526 }
2527 else if(dwDragLever==4){
2528 //SideWebをリサイズ中
2529 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2530 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2531 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2532 }
2533
2534 ResizeOwnerWnd();
2535 UpdateWindow(hwnd);
2536 }
2537 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2538 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2539 GetWindowRect(hProjectView,&rect);
2540 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2541 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2542 SetCursor(LoadCursor(0,IDC_SIZEWE));
2543 }
2544 }
2545#ifndef THETEXT
2546 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2547 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2548 GetWindowRect(pobj_Debugger->hwnd,&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 }
2554 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2555 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2556 GetWindowRect(hCompileView,&rect);
2557 if(rect.left<=pos.x&&pos.x<=rect.right&&
2558 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2559 SetCursor(LoadCursor(0,IDC_SIZENS));
2560 }
2561 }
2562#endif
2563 if( pobj_SideWeb )
2564 {
2565 if(pobj_SideWeb->bShow){
2566 //SideWebとMDIクライアントの境目のサイズ変更ライン
2567 pobj_SideWeb->GetRect(&rect);
2568 ClientToScreen(hwnd,&rect);
2569 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2570 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2571 SetCursor(LoadCursor(0,IDC_SIZEWE));
2572 }
2573 }
2574 }
2575 return 0;
2576 case WM_LBUTTONDOWN:
2577 pos.x=LOWORD(lParam);
2578 pos.y=HIWORD(lParam);
2579 ClientToScreen(hwnd,&pos);
2580
2581 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2582 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2583 GetWindowRect(hProjectView,&rect);
2584 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2585 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2586 SetCursor(LoadCursor(0,IDC_SIZEWE));
2587
2588 dwDragLever=1;
2589 SetCapture(hwnd);
2590
2591 PrevMousePos=pos;
2592 start=pobj_nv->width_ClipProjectView;
2593 }
2594 }
2595#ifndef THETEXT
2596 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2597 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2598 GetWindowRect(pobj_Debugger->hwnd,&rect);
2599 if(rect.left<=pos.x&&pos.x<=rect.right&&
2600 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2601 SetCursor(LoadCursor(0,IDC_SIZENS));
2602
2603 dwDragLever=2;
2604 SetCapture(hwnd);
2605
2606 PrevMousePos=pos;
2607 start=pobj_nv->height_ClipDebuggerView;
2608 }
2609 }
2610 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2611 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2612 GetWindowRect(hCompileView,&rect);
2613 if(rect.left<=pos.x&&pos.x<=rect.right&&
2614 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2615 SetCursor(LoadCursor(0,IDC_SIZENS));
2616
2617 dwDragLever=3;
2618 SetCapture(hwnd);
2619
2620 PrevMousePos=pos;
2621 start=pobj_nv->height_ClipCompileView;
2622 }
2623 }
2624#endif
2625 if( pobj_SideWeb && pobj_SideWeb->bShow){
2626 //SideWebとMDIクライアントの境目のサイズ変更ライン
2627 pobj_SideWeb->GetRect(&rect);
2628 ClientToScreen(hwnd,&rect);
2629 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2630 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2631 SetCursor(LoadCursor(0,IDC_SIZENS));
2632
2633 dwDragLever=4;
2634 SetCapture(hwnd);
2635
2636 PrevMousePos=pos;
2637 start=pobj_nv->width_WebSearchView;
2638 }
2639 }
2640 return 0;
2641 case WM_LBUTTONUP:
2642 if(dwDragLever){
2643 dwDragLever=0;
2644 ReleaseCapture();
2645 }
2646 return 0;
2647
2648
2649 case WM_SYSCOMMAND:
2650 //ウィンドウの最小化前にウィンドウ位置を保存
2651 if(wParam==SC_MINIMIZE){
2652 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2653 else if(!IsIconic(hwnd)){
2654 pobj_nv->bWindowMax=0;
2655 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2656 }
2657 }
2658 break; //処理をDefFrameProcへ
2659 case WM_QUERYENDSESSION:
2660 case WM_CLOSE:
2661 extern BOOL bSearchingClasses;
2662 if(bSearchingClasses){
2663 pobj_ClassTreeView->bCloseSwitch=1;
2664 return 0;
2665 }
2666
2667 //コンパイラビューを閉じる
2668 if(hCompileView)
2669 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2670
2671 //次回起動時にMDIウィンドウを最大化させるかを判定
2672 hChild=GetWindow(hClient,GW_CHILD);
2673 pobj_nv->bMDIZoomed=IsZoomed(hChild);
2674
2675 //プロジェクトを閉じる
2676 if(ProjectInfo.name[0]){
2677 if(!CloseProject()) return 0;
2678 }
2679
2680 //MDIウィンドウの保存確認
2681 hChild=GetWindow(hClient,GW_CHILD);
2682 while(hChild){
2683 i=GetWndNum(hChild);
2684 if(!DocumentModifyCheck(hChild)) return 0;
2685 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2686 }
2687
2688
2689 KillTimer(hwnd,ID_TIMER_BACKUP);
2690
2691
2692 //ProjectViewの位置を保存、ProjectViewを破棄
2693 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2694 DestroyWindow(hProjectView);
2695 DestroyWindow(hProjectView_ToolWindow);
2696
2697 //Rebarの位置を保存、Rebarを破棄
2698 delete pobj_Rebar;
2699 pobj_Rebar=0;
2700
2701 //タブコントロールを破棄
2702 delete pobj_MainTab;
2703 pobj_MainTab=0;
2704
2705 //SideWebを破棄
2706 delete pobj_SideWeb;
2707 pobj_SideWeb=0;
2708
2709 //メインウィンドウの最大化有無、座標を保存
2710 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2711 else if(!IsIconic(hwnd)){
2712 pobj_nv->bWindowMax=0;
2713 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2714 }
2715
2716 hChild=GetWindow(hClient,GW_CHILD);
2717 while(hChild){
2718 CloseDocWindow(GetWndNum(hChild));
2719 DestroyWindow(hChild);
2720 hChild=GetWindow(hClient,GW_CHILD);
2721 }
2722
2723 EndProjectEditor(); //ProjectEditorの情報を保存
2724
2725 //エディタ用フォントを破棄
2726 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2727 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2728 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2729
2730 DestroyWindow(hwnd);
2731 return 0;
2732
2733 case WM_DESTROY:
2734 PostQuitMessage(0);
2735 return 0;
2736 }
2737
2738 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
2739}
2740
2741int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2742 WNDCLASSEX wcl;
2743
2744 wcl.cbSize=sizeof(WNDCLASSEX);
2745 wcl.hInstance=hInst;
2746 wcl.lpszClassName=lpClassName;
2747 wcl.lpfnWndProc=WndProc;
2748
2749 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2750 else wcl.style=0;
2751
2752 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2753 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2754
2755 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2756 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2757
2758 wcl.lpszMenuName=NULL;
2759 wcl.cbClsExtra=0;
2760 wcl.cbWndExtra=0;
2761 wcl.hbrBackground=hBackBrush;
2762
2763 return RegisterClassEx(&wcl);
2764}
2765int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2766 int i,i2,IsStr;
2767 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2768 MSG msg;
2769 HACCEL hAccel;
2770
2771 hInst=hThisInst;
2772 if(!SetupProjectEditor()) return 0;
2773
2774 HBRUSH hGrayBrush_LineNumber;
2775 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2776
2777 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2778 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2779 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2780 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2781 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2782 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2783 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2784 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2785 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2786 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2787 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2788 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2789 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2790 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2791 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2792 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2793 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2794
2795 //Web検索用のウィンドウクラス
2796 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2797 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2798 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2799
2800 //ルーラーのウィンドウクラス
2801 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2802
2803 //SideWebのウィンドウクラス
2804 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2805
2806 ActiveBasic::IDE::Program::Main();
2807
2808 //return 0;
2809
2810
2811 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
2812
2813 //メインウィンドウ
2814 RECT *prc;
2815 prc=&pobj_nv->StartupWindowRect;
2816 /*
2817 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
2818 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
2819 prc->left, prc->top,
2820 prc->right-prc->left, prc->bottom-prc->top,
2821 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
2822 */
2823
2824 //バックアップ用タイマーを設定(10秒に一回)
2825 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
2826
2827 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
2828 SetClipboardViewer(hOwner);
2829
2830 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
2831 else ShowWindow(hOwner,ShowCmd);
2832 UpdateWindow(hOwner);
2833
2834 int open_sw=0;
2835 if(lstrlen(lpCmdLine)>0){
2836 lstrcpy(dummy,lpCmdLine);
2837 for(i=0,i2=0,IsStr=0;;i++,i2++){
2838 if(dummy[i]=='\"'){
2839 if(IsStr==0) IsStr=1;
2840 else IsStr=0;
2841 i++;
2842 }
2843 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
2844 str[i2]=0;
2845 if(!(strstr(str,":")||strstr(str,"\\\\"))){
2846 lstrcpy(str2,str);
2847 GetCurrentDirectory(MAX_PATH,str);
2848 lstrcat(str,"\\");
2849 lstrcat(str,str2);
2850 }
2851 ShortPathToLongPath(str,str2);
2852 OpenFileWithExtension(str2);
2853 open_sw=1;
2854 if(dummy[i]=='\0') break;
2855 i2=-1;
2856 continue;
2857 }
2858 str[i2]=dummy[i];
2859 }
2860 }
2861
2862 BOOL bRestore=0;
2863
2864
2865 {
2866 //自動バックアップ及び復元機能
2867
2868 //必要であれば復元
2869 bRestore=restore();
2870 }
2871
2872
2873#ifdef THETEXT
2874 if(open_sw==0&&bRestore==0){
2875 //ファイルが開かれなかったとき
2876 NewTextEditWindow(NULL,WNDTYPE_TEXT);
2877 }
2878#endif
2879
2880
2881 while(GetMessage(&msg,NULL,0,0)){
2882
2883 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
2884 if(ProjectInfo.name[0]){
2885 for(i=0,i2=0;i<MAX_WNDNUM;i++){
2886 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
2887 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
2888 }
2889 }
2890 if(i2==0){
2891 if(!TranslateMDISysAccel(hClient,&msg)){
2892 TranslateMessage(&msg);
2893 DispatchMessage(&msg);
2894 }
2895 }
2896 }
2897 else{
2898 if(!TranslateMDISysAccel(hClient,&msg)){
2899 TranslateMessage(&msg);
2900 DispatchMessage(&msg);
2901 }
2902 }
2903 }
2904 }
2905
2906 DeleteObject(hGrayBrush_LineNumber);
2907
2908#if defined HeapAlloc
2909 CheckHeapCheck();
2910#endif
2911
2912 return msg.wParam;
2913}
Note: See TracBrowser for help on using the repository browser.