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

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

abdevをATL化するための下準備

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