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

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

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

File size: 64.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 ToBigChar(char str[]){
92 int i;
93 for(i=0;TRUE;i++){
94 str[i]=(char)toupper((int)str[i]);
95 if(str[i]=='\0') break;
96 }
97}
98int GetWndNum(HWND hChild){
99 int i;
100 if(!IsWindow(hChild)) return -1;
101 for(i=0;i<MAX_WNDNUM;i++){
102 if(hChild==MdiInfo[i].hwnd) break;
103 }
104 if(i==MAX_WNDNUM) i=-1;
105 return i;
106}
107int GetNowWndNum(void){
108 return GetWndNum(GetWindow(hClient,GW_CHILD));
109}
110int GetFileNum(int WndNum){
111 if( !ProjectInfo.name[0] ){
112 return -1;
113 }
114
115 int i;
116 char temporary[MAX_PATH];
117 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
118
119 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
120
121 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) return i;
122 }
123 return -1;
124}
125
126void SendTextEditResizeEvent(HWND hwnd){
127 RECT rect;
128 GetClientRect(hwnd,&rect);
129 ResizeTextEditWnd(hwnd,rect.right,rect.bottom);
130}
131
132void RedrawAllWindow(void){
133 HWND hChild;
134 hChild=GetWindow(hClient,GW_CHILD);
135 if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD));
136 while(hChild){
137 int WndNum;
138 WndNum=GetWndNum(hChild);
139 if(WndNum==-1) break;
140
141 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
142 //コントロールタブスペースの幅と行番号の文字数を更新
143 MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace=
144 GetControlTabSpace(WndNum,&MdiInfo[WndNum].pMdiTextEdit->iLineNumberTextCount);
145
146 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
147 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
148
149 SendTextEditResizeEvent(MdiInfo[WndNum].hwnd);
150 }
151 else{
152 HWND hEdit;
153 hEdit=GetWindow(hChild,GW_CHILD);
154 InvalidateRect(hEdit,NULL,0);
155 }
156
157 hChild=GetWindow(hChild,GW_HWNDNEXT);
158 }
159}
160
161int DocumentModifyCheck(HWND hChild){ //終了保存確認
162 int BoxID,WndNum,sw;
163 char str[MAX_PATH],temporary[MAX_PATH];
164
165 WndNum=GetWndNum(hChild);
166 sw=0;
167 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
168 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ) sw=1;
169 }
170 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
171 if(MdiInfo[WndNum].MdiIconEditInfo->bModify) sw=1;
172 }
173
174 if(sw){
175 GetWindowText(hChild,temporary,MAX_PATH);
176
177 //"\"%s\" ファイルは変更されています。保存しますか?"
178 sprintf(str,STRING_MODIFYCHECK_FILE,temporary);
179 BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION);
180
181 if(BoxID==IDYES){
182 if(!SaveDocument(hChild,NULL)) return 0;
183 }
184 else if(BoxID==IDCANCEL) return 0;
185 }
186 return 1;
187}
188void SetStatusText(char *MenuText){
189 //////////////////////////
190 // ステータスバーの更新
191 //////////////////////////
192
193 int WndNum;
194 double BufSize;
195 char temporary[255];
196 HWND hChild;
197
198 if(MenuText){
199 SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText);
200 if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0;
201 }
202
203 hChild=GetWindow(hClient,GW_CHILD);
204 WndNum=GetWndNum(hChild);
205 if(WndNum==-1) return;
206 hChild=GetWindow(hChild,GW_CHILD);
207 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
208 //////////////////////
209 // テキストエディタ
210 //////////////////////
211
212 //サイズ
213 BufSize=(double)lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer);
214 if(IsWindow(hChild)){
215 if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
216 else if(BufSize<1024*1024){
217 BufSize/=1024;
218 sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize);
219 }
220 else{
221 BufSize/=1024*1024;
222 sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize);
223 }
224 }
225 else temporary[0]=0;
226 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
227
228 //行と桁
229 if(IsWindow(hChild)){
230#if defined(JPN)
231 //日本語
232 sprintf(temporary,"%d 行、%d 列",
233 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
234 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
235#else
236 //英語
237 sprintf(temporary,"%d : %d",
238 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
239 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
240#endif
241 }
242 else temporary[0]=0;
243 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
244
245 //文字コード
246 nkf.GetCharCodeName(MdiInfo[WndNum].pMdiTextEdit->iCharCode,temporary);
247 SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
248
249 //文字コード
250 nkf.GetLfCodeName(MdiInfo[WndNum].pMdiTextEdit->iLfCode,temporary);
251 SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
252 }
253 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
254 ////////////////
255 // RADツール
256 ////////////////
257
258 int WndInfoNum;
259 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
260 if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
261 sprintf(temporary,"pos %d, %d",
262 RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
263 RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
264 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
265 sprintf(temporary,"size %d * %d",
266 RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left,
267 RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
268 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
269 }
270 else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
271 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
272 sprintf(temporary,"size %d * %d",ProjectInfo.pWindowInfo[WndInfoNum].size.cx,ProjectInfo.pWindowInfo[WndInfoNum].size.cy);
273 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
274 }
275 else{
276 sprintf(temporary,"pos %d, %d",
277 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x,
278 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
279 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
280 sprintf(temporary,"size %d * %d",
281 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx,
282 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
283 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
284 }
285 }
286 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
287 //////////////////
288 // MENU エディタ
289 //////////////////
290
291 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
292 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
293 }
294 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
295 //////////////////
296 // ICON エディタ
297 //////////////////
298
299 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
300 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
301 }
302}
303void ResetState_UndoMenu(void){ //「元に戻す、やり直し」のメニュー表示制御
304 int i,i2;
305 HWND hChild;
306
307 hChild=GetWindow(hClient,GW_CHILD);
308 i=GetWndNum(hChild);
309 if(i==-1){
310 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
311 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
312 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
313 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
314 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
315 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
316 }
317 else if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
318 i2=MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos-1;
319 if(i2==-1) i2=MAX_UNDONUM-1;
320 if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[i2]){
321 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
322 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
323 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
324 }
325 else{
326 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
327 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
328 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
329 }
330 if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos]){
331 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
332 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
333 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
334 }
335 else{
336 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
337 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
338 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
339 }
340 }
341 else if(MdiInfo[i].DocType==WNDTYPE_RAD){
342 i2=MdiInfo[i].MdiRadInfo->undo.NowPos-1;
343 if(i2==-1) i2=MAX_UNDONUM-1;
344 if(!MdiInfo[i].MdiRadInfo->undo.Command[i2]){
345 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
346 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
347 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
348 }
349 else{
350 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
351 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
352 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
353 }
354 if(!MdiInfo[i].MdiRadInfo->undo.Command[MdiInfo[i].MdiRadInfo->undo.NowPos]){
355 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
356 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
357 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
358 }
359 else{
360 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
361 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
362 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
363 }
364 }
365 else if(MdiInfo[i].DocType==WNDTYPE_MENU){
366 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
367 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
368 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
369
370 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
371 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
372 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
373 }
374 else if(MdiInfo[i].DocType==WNDTYPE_ICONEDIT){
375 i2=MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos-1;
376 if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
377 if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[i2]){
378 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
379 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
380 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
381 }
382 else{
383 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
384 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
385 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
386 }
387 if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos]){
388 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
389 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
390 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
391 }
392 else{
393 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
394 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
395 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
396 }
397 }
398}
399void ResetState_ConvMenu(BOOL bEnable){
400 int MenuMsg;
401 if(bEnable)
402 MenuMsg=MF_BYCOMMAND|MF_ENABLED;
403 else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
404
405 pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg);
406 pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg);
407 pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg);
408 pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg);
409 pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg);
410 pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg);
411 pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg);
412 pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg);
413#ifdef THETEXT
414 pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg);
415 pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg);
416#else
417 pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg);
418#endif
419}
420void ResetState_PrintMenu(void);
421void ResetState_EditMenu(void){ //編集メニューの表示制御
422 HWND hChild;
423 int WndNum;
424 long MenuMsg,ToolbarMsg;
425
426 //印刷メニューの状態を設定
427 ResetState_PrintMenu();
428
429 hChild=GetWindow(hClient,GW_CHILD);
430 if(!IsWindow(hChild)){
431 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
432 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
433#ifdef THETEXT
434 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
435#endif
436 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
437
438 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
439 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
440 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
441 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
442 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
443 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
444 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
445 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
446 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
447 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
448 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
449
450 ResetState_ConvMenu(0);
451
452 ResetState_UndoMenu();
453 return;
454 }
455 WndNum=GetWndNum(hChild);
456 if(WndNum==-1) return;
457 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
458 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
459 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
460 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED);
461#ifdef THETEXT
462 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED);
463#endif
464 pobj_StandardToolbar->EnableItem(IDM_FIND,1);
465
466 BOOL bConvEnable;
467 hChild=GetWindow(hChild,GW_CHILD);
468 if(!(
469 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.x&&
470 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.y
471 )){
472 MenuMsg=MF_BYCOMMAND|MF_ENABLED;
473 ToolbarMsg=1;
474
475 bConvEnable=1;
476 }
477 else{
478 MenuMsg=MF_BYCOMMAND|MF_GRAYED;
479 ToolbarMsg=0;
480
481 bConvEnable=0;
482 }
483 pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg);
484 pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg);
485 pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg);
486 EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg);
487 EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg);
488 EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg);
489 pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg);
490 pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg);
491
492 if(IsClipboardFormatAvailable(CF_TEXT)){
493 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
494 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
495 }
496 else{
497 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
498 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
499 }
500
501
502 //変換コマンド
503 ResetState_ConvMenu(bConvEnable);
504 }
505 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
506 //検索、置換、文字カウントを無効化
507 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
508 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
509#ifdef THETEXT
510 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
511#endif
512 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
513
514 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
515 //切り取り、コピー、削除を有効化
516 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
517 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
518 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
519 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
520 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
521 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
522 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
523 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
524 }
525 else{
526 //切り取り、コピー、削除を無効化
527 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
528 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
529 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
530 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
531 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
532 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
533 pobj_StandardToolbar->EnableItem(IDM_CUT,1);
534 pobj_StandardToolbar->EnableItem(IDM_COPY,1);
535 }
536
537 //すべて選択を有効化
538 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
539
540 if(IsClipboardFormatAvailable(dwRadClipboardID)){
541 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
542 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
543 }
544 else{
545 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
546 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
547 }
548
549 ResetState_ConvMenu(0);
550 }
551 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
552 //検索、置換、文字カウントを無効化
553 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
554 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
555#ifdef THETEXT
556 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
557#endif
558 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
559
560 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
561 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
562 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
563 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
564 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
565 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
566 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
567 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
568 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
569 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
570 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
571
572 ResetState_ConvMenu(0);
573 }
574 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
575 //検索、置換、文字カウントを無効化
576 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
577 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
578#ifdef THETEXT
579 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
580#endif
581 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
582
583 if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==0){
584 //切り取り、コピー、削除を無効化
585 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
586 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
587 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
588 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
589 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
590 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
591 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
592 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
593 }
594 else{
595 //切り取り、コピー、削除を有効化
596 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
597 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
598 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
599 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
600 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
601 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
602 pobj_StandardToolbar->EnableItem(IDM_CUT,1);
603 pobj_StandardToolbar->EnableItem(IDM_COPY,1);
604 }
605
606 //すべて選択を有効化
607 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
608
609 if(IsClipboardFormatAvailable(CF_BITMAP)){
610 //貼り付けを有効化
611 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
612 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
613 }
614 else{
615 //貼り付けを無効化
616 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
617 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
618 }
619
620 ResetState_ConvMenu(0);
621 }
622
623 ResetState_UndoMenu();
624}
625void ResetState_ViewMenu(void){
626 // 表示 メニューの状態を設定
627
628
629#ifdef THETEXT
630 pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn);
631#endif
632}
633void ResetState_PrintMenu(void){ //編集メニューの表示制御
634 HWND hChild;
635 int WndNum;
636 hChild=GetWindow(hClient,GW_CHILD);
637 if(!IsWindow(hChild)){
638 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
639
640 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
641
642 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
643 return;
644 }
645 WndNum=GetWndNum(hChild);
646 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
647 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
648
649 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
650
651 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED);
652 }
653 else{
654 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
655
656 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
657
658 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
659 }
660}
661void ResetState_DocMenu(void){
662 long MenuMsg,ToolbarMsg;
663 HWND hChild;
664
665 hChild=GetWindow(hClient,GW_CHILD);
666
667
668 /////////////////////////////////////////
669 // 共通ドキュメント メニューの状態を設定
670 /////////////////////////////////////////
671
672 if(!IsWindow(hChild)){
673 MenuMsg=MF_GRAYED;
674 ToolbarMsg=0;
675 }
676 else{
677 MenuMsg=MF_ENABLED;
678 ToolbarMsg=1;
679 }
680 pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg);
681 pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg);
682 pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg);
683 pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg);
684 pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg);
685
686 pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg);
687 pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg);
688 pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg);
689
690
691#ifndef THETEXT
692 /////////////////////////////////////////////////
693 // プロジェクトドキュメント メニューの状態を設定
694 /////////////////////////////////////////////////
695
696 if(ProjectInfo.name[0]){
697 pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED);
698 pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1);
699
700 MenuMsg=MF_ENABLED;
701 ToolbarMsg=TBSTATE_ENABLED;
702 }
703 else{
704 MenuMsg=MF_GRAYED;
705 ToolbarMsg=TBSTATE_INDETERMINATE;
706 }
707 pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg);
708 pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg);
709 pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg);
710 pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg);
711
712 //デバッガ メニューの状態を設定
713 pobj_Debugger->ResetCommandEnabled();
714#endif
715
716
717 //編集メニューの状態を設定
718 ResetState_EditMenu();
719
720 //表示メニューの状態を設定
721 ResetState_ViewMenu();
722}
723void DuplicateTitleCheck(char *lpszTitle){
724 int i;
725 for(i=0;i<MAX_WNDNUM;i++){
726 if(MdiInfo[i].hwnd){
727 if(lstrcmpi(MdiInfo[i].title,lpszTitle)==0){
728 lstrcat(lpszTitle,"_");
729 DuplicateTitleCheck(lpszTitle);
730 return;
731 }
732 }
733 }
734}
735HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor){
736 int i;
737 char str[MAX_PATH],str2[32],*buffer;
738 HWND hChild,hEdit;
739 RECT rect;
740 int iCharCode=NKF_SHIFT_JIS;
741 int iLfCode=LFCODE_CRLF;
742
743 if(filepath){
744
745 //すでに指定されたファイルが開かれている場合
746 hChild=GetWindow(hClient,GW_CHILD);
747 while(hChild){
748 i=GetWndNum(hChild);
749 if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
750 if(lstrcmpi(MdiInfo[i].path,filepath)==0) break;
751 }
752 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
753 }
754 if(hChild){
755 //前面に表示して終了
756 BringWindowToTop(hChild);
757 return hChild;
758 }
759
760
761 //////////////////////////////////////////////////////
762 //ファイル読み込み(正常に読み込めるかの確認も含む)
763 //////////////////////////////////////////////////////
764
765 HANDLE hFile;
766 hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
767 if(hFile==INVALID_HANDLE_VALUE){
768 sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
769 MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
770 return 0;
771 }
772 int length;
773 length=GetFileSize(hFile,NULL);
774
775 char *temp;
776 temp=(char *)HeapAlloc(hHeap,0,length+1);
777 DWORD dw;
778 ReadFile(hFile,temp,length,&dw,NULL);
779 CloseHandle(hFile);
780 for(i=0;i<length;i++){
781 if(temp[i]=='\0') temp[i]=' ';
782 }
783 temp[length]=0;
784
785
786 ///////////////////////
787 // 改行コードを判別
788 ///////////////////////
789
790 char *temp2;
791 for(i=0;i<length;i++){
792 if(temp[i]=='\r'){
793 if(temp[i+1]=='\n')
794 iLfCode=LFCODE_CRLF;
795 else
796 iLfCode=LFCODE_CR;
797 break;
798 }
799 if(temp[i]=='\n'){
800 iLfCode=LFCODE_LF;
801 break;
802 }
803 }
804
805 //改行コードを変換
806 if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){
807 temp2=nkf.ToCRLF(iLfCode,temp);
808 HeapDefaultFree(temp);
809 temp=temp2;
810
811 length=lstrlen(temp);
812 }
813
814
815 /////////////////////
816 // Shift-JISに変換
817 /////////////////////
818
819 buffer=(char *)HeapAlloc(hHeap,0,length*2+1);
820 nkf.pSetNkfOption("-sx"); //Shift-JISに変換(xは半角カタカナを全角に変換しないオプション)
821 nkf.pNkfConvert(buffer,temp);
822 buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1);
823 HeapDefaultFree(temp);
824
825 //変換前の文字コードを判別
826 iCharCode=nkf.pNkfGetKanjiCode();
827 if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){
828 //判別不能な場合は、Shift-JISにする
829 iCharCode=NKF_SHIFT_JIS;
830 }
831 else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){
832 //EUC、JISの場合で、判別不能な場合は、Shift-JISを優先
833 for(i=0;;i++){
834 if(buffer[i]=='\0'){
835 //半角コードのみ
836 iCharCode=NKF_SHIFT_JIS;
837 break;
838 }
839 if(IsDBCSLeadByte(buffer[i])) break;
840 }
841 }
842
843
844 //////////////////////////
845 // ファイルパスをセット
846 //////////////////////////
847
848 _splitpath(filepath,NULL,NULL,str,str2);
849 lstrcat(str,str2);
850 }
851 else{
852 buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
853 DocumentCounter++;
854 sprintf(str,"Document[%d]",DocumentCounter);
855 }
856
857 MDICREATESTRUCT mdic;
858 mdic.szClass="MDIClientWindow_TextEdit";
859 mdic.hOwner=hInst;
860 mdic.x=CW_USEDEFAULT;
861 mdic.y=CW_USEDEFAULT;
862 mdic.cx=CW_USEDEFAULT;
863 mdic.cy=CW_USEDEFAULT;
864 mdic.szTitle=str;
865
866 hChild=GetWindow(hClient,GW_CHILD);
867 if(IsWindow(hChild)){
868 if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
869 else mdic.style=0;
870 }
871 else{
872 if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
873 else mdic.style=0;
874 }
875
876 //ファイルアイコンをセット
877 SHFILEINFO shfi;
878 if(filepath)
879 SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
880 else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
881 mdic.lParam=(LPARAM)shfi.hIcon;
882
883 mdic.style|=WS_CLIPCHILDREN;
884 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成
885
886 //TextEditorコントロールを設置
887 GetClientRect(hChild,&rect);
888 hEdit=CreateWindow("TextEditor",NULL,
889 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
890 0,0,0,0,
891 hChild,NULL,hInst,NULL);
892
893 //ウィンドウのID登録
894 for(i=0;i<MAX_WNDNUM;i++){
895 if(MdiInfo[i].hwnd==0){
896 MdiInfo[i].hwnd=hChild;
897 MdiInfo[i].DocType=DocumentType;
898 DuplicateTitleCheck(str);
899 MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
900 lstrcpy(MdiInfo[i].title,str);
901 if(filepath){
902 MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(filepath)+1);
903 lstrcpy(MdiInfo[i].path,filepath);
904 }
905 else{
906 MdiInfo[i].path=(char *)GlobalAlloc(GPTR,1);
907 }
908
909 MdiInfo[i].pMdiTextEdit = new CMdiTextEdit( &MdiInfo[i] );
910
911 MdiInfo[i].pMdiTextEdit->hEdit=hEdit;
912 MdiInfo[i].pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
913 MdiInfo[i].pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
914 MdiInfo[i].pMdiTextEdit->hIcon=shfi.hIcon;
915 MdiInfo[i].pMdiTextEdit->buffer=buffer;
916 MdiInfo[i].pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
917 MdiInfo[i].pMdiTextEdit->iUnderStart=-1;
918 MdiInfo[i].pMdiTextEdit->iUnderEnd=-1;
919 MdiInfo[i].pMdiTextEdit->StartCaretPos.x=0;
920 MdiInfo[i].pMdiTextEdit->StartCaretPos.y=0;
921 MdiInfo[i].pMdiTextEdit->EndCaretPos.x=0;
922 MdiInfo[i].pMdiTextEdit->EndCaretPos.y=0;
923 MdiInfo[i].pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
924 MdiInfo[i].pMdiTextEdit->bAutoScroll=0;
925 MdiInfo[i].pMdiTextEdit->iWidth_ControlTabSpace=
926 GetControlTabSpace(i,&MdiInfo[i].pMdiTextEdit->iLineNumberTextCount);
927 MdiInfo[i].pMdiTextEdit->iCharCode=iCharCode;
928 MdiInfo[i].pMdiTextEdit->iLfCode=iLfCode;
929
930 MdiInfo[i].IndentStr=0;
931
932 int flag;
933 if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
934 else flag=0;
935 SendTextEditResizeEvent(hChild);
936 break;
937 }
938 }
939
940 //ワードカラーをセット
941 if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(i);
942
943 //Docコンボボックスに追加
944 extern HWND hDocCombo;
945 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
946 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
947
948 //タブに追加
949 pobj_MainTab->InsertItem( str, true, TabColor );
950
951 SetFocus(hEdit);
952 SetStatusText(NULL);
953
954 //メニュー状態を設定
955 ResetState_DocMenu();
956
957 if( DocumentType == WNDTYPE_BASIC && ProjectInfo.name[0] == '\0' ){
958 // 単体ソースコードを開いたとき
959 if( !IsWindowVisible( hProjectView ) ){
960 // クラスビューを表示する
961 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
962 ShowClassView();
963
964 // クラスビューを更新
965 ResetClassTree(-1);
966 }
967 }
968
969 return hChild;
970}
971void CloseDocWindow(int WndNum){
972 int i2,i3;
973
974 MdiInfo[WndNum].hwnd=0;
975
976 //ドキュメントコンボボックスから文字列を消去
977 extern HWND hDocCombo;
978 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
979 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
980
981 //タブコントロールからアイテムを消去
982 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true );
983
984
985 GlobalFree(MdiInfo[WndNum].title);
986 GlobalFree(MdiInfo[WndNum].path);
987
988 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
989 ////////////////////////////
990 // テキストエディタを閉じる
991 ////////////////////////////
992
993 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
994 if(ComplementWndInfo.hWnd){
995 //コード補完リストを破棄する
996 DestroyWindow(ComplementWndInfo.hWnd);
997 ComplementWndInfo.hWnd=0;
998 }
999
1000 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
1001 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
1002
1003 if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
1004
1005 //エディットコントロールを破棄
1006 DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1007
1008 //Web検索ウィンドウを破棄
1009 delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
1010 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
1011
1012 //ルーラーウィンドウを破棄
1013 delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
1014 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
1015
1016 //アイコンを破棄
1017 if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
1018
1019 delete MdiInfo[WndNum].pMdiTextEdit;
1020 MdiInfo[WndNum].pMdiTextEdit=0;
1021 }
1022 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1023 /////////////////////
1024 // RADツールを閉じる
1025 /////////////////////
1026
1027 for(i2=0;i2<MAX_UNDONUM;i2++){
1028 if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
1029 Rad_DeleteUndoData(WndNum,i2);
1030 }
1031 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
1032 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
1033 SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
1034 DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
1035 DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
1036 GlobalFree(MdiInfo[WndNum].MdiRadInfo);
1037 }
1038 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1039 ////////////////////////////
1040 // メニューエディタを閉じる
1041 ////////////////////////////
1042
1043 DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
1044 GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
1045 }
1046 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1047 ////////////////////////////
1048 // アイコンエディタを閉じる
1049 ////////////////////////////
1050
1051 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1052 for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1053 if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
1054 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
1055 }
1056 }
1057
1058 DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
1059 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
1060 DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
1061 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1062 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
1063 }
1064 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
1065 }
1066}
1067void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1068 int WndNum;
1069 WndNum=GetWndNum(hwnd);
1070 if(WndNum==-1) return;
1071
1072 int WebResultWndHeight;
1073 WebResultWndHeight=LINK_ITEM_HEIGHT;
1074 //未完成
1075 WebResultWndHeight=0;
1076
1077 int iHeightRuler;
1078 if(pobj_nv->bEditor_Ruler){
1079 //ルーラー
1080 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
1081 0,
1082 0,
1083 cx,
1084 HEIGHT_RULER);
1085
1086 iHeightRuler=HEIGHT_RULER;
1087
1088 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1089 }
1090 else{
1091 iHeightRuler=0;
1092
1093 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1094 }
1095
1096 //エディットウィンドウ
1097 MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
1098 0,
1099 iHeightRuler,
1100 cx,
1101 cy-WebResultWndHeight-iHeightRuler,
1102 1);
1103
1104 //Web検索ウィンドウ
1105 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
1106 0,
1107 cy-WebResultWndHeight,
1108 cx,
1109 WebResultWndHeight);
1110}
1111LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1112 int i,i2;
1113 HWND hEdit;
1114
1115 switch(message){
1116 case WM_CREATE:
1117 CREATESTRUCT *lpcs;
1118 lpcs=(CREATESTRUCT *)lParam;
1119 MDICREATESTRUCT *lpmcs;
1120 lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1121 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1122 break;
1123 case WM_MDIACTIVATE:
1124 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1125 if(MethodCheckInfo.hWnd){
1126 DestroyWindow(MethodCheckInfo.hWnd);
1127 MethodCheckInfo.hWnd=0;
1128 }
1129
1130 //以前のコード補完リストを破棄する
1131 if(ComplementWndInfo.hWnd){
1132 DestroyWindow(ComplementWndInfo.hWnd);
1133 ComplementWndInfo.hWnd=0;
1134 }
1135
1136 if(!lParam) return 0;
1137 i=GetWndNum((HWND)lParam);
1138 if(i==-1) return 0; //ウィンドウが初期状態の場合
1139
1140#ifndef THETEXT
1141 //デバッガ メニューの状態を設定
1142 pobj_Debugger->ResetCommandEnabled();
1143#endif
1144
1145 //ドキュメント セレクト コンボボックス
1146 extern HWND hDocCombo;
1147 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1148 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1149
1150 //タブコントロール
1151 pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
1152
1153 if( !ProjectInfo.name[0] ){
1154 ResetClassTree(-1);
1155 }
1156
1157 return 0;
1158 case WM_SETFOCUS:
1159 hEdit=GetWindow(hwnd,GW_CHILD);
1160 SetFocus(hEdit);
1161 SetStatusText(CmdMsg);
1162 ResetState_EditMenu();
1163 ResetState_ViewMenu();
1164 break;
1165 case WM_SIZE:
1166 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1167 break;
1168 case WM_CLOSE:
1169 if(!DocumentModifyCheck(hwnd)) return 0;
1170 CloseDocWindow(GetWndNum(hwnd));
1171 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1172 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1173
1174 //メニュー状態を設定
1175 ResetState_DocMenu();
1176
1177 return i;
1178 }
1179 return DefMDIChildProc(hwnd,message,wParam,lParam);
1180}
1181void ResizeOwnerWnd(void){
1182 int width_owner,height_owner;
1183 int height_Rebar;
1184 int height_MdiClient;
1185 RECT rect,StatusRect,RebarRect;
1186
1187 GetClientRect(hOwner,&rect);
1188 width_owner=rect.right;
1189 height_owner=rect.bottom;
1190
1191 //Rebar
1192 SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1193 UpdateWindow(pobj_Rebar->hRebar);
1194
1195 //Status bar
1196#define STATUSBAR_PARTS_NUM 5
1197 int sb_size[STATUSBAR_PARTS_NUM];
1198 sb_size[0]=width_owner-340;
1199 sb_size[1]=width_owner-220;
1200 sb_size[2]=width_owner-120;
1201 sb_size[3]=width_owner-50;
1202 sb_size[4]=width_owner;
1203 SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
1204 SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1205 UpdateWindow(hStatusBar);
1206
1207 //Status bar
1208 int height_Statusbar;
1209 SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
1210 height_Statusbar=StatusRect.bottom;
1211
1212 GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
1213 height_Rebar=RebarRect.bottom-RebarRect.top+2;
1214
1215 int height_dv; //Width of Debugger View
1216 int height_cv; //Width of Compiler View
1217 height_dv=0;
1218 height_cv=0;
1219#ifndef THETEXT
1220 if(bClipCompileView){
1221 if(pobj_Debugger->IsDebuggerView()){
1222 //デバッガビューが表示されているとき
1223 height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
1224 }
1225 if(hCompileView){
1226 //コンパイラビューが表示されているとき
1227 height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
1228 }
1229 }
1230#endif
1231
1232 int width_pjv=0; //Width of Project View
1233 if(pobj_nv->bClipProjectView){
1234 if(IsWindowVisible(hProjectView)){
1235 //プロジェクトビューが表示されているとき
1236 width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
1237 }
1238 }
1239
1240 int width_SideWeb=0;
1241 if( pobj_SideWeb )
1242 {
1243 if(pobj_SideWeb->bShow){
1244 width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
1245 }
1246 }
1247
1248 //MDIクライアントの高さ
1249 height_MdiClient=height_owner-(
1250 height_Rebar+
1251 height_dv+
1252 height_cv+
1253 height_Statusbar
1254 );
1255
1256 //タブコントロール
1257 int tab_height;
1258 if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
1259 else{
1260 RECT rc;
1261 TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
1262 tab_height=rc.bottom-rc.top;
1263 }
1264 MoveWindow(pobj_MainTab->hTab,
1265 width_pjv,
1266 height_Rebar,
1267 width_owner-width_pjv-width_SideWeb,
1268 tab_height,
1269 1);
1270
1271 //MDIクライアント
1272 MoveWindow(hClient,
1273 width_pjv,
1274 height_Rebar+tab_height,
1275 width_owner-width_pjv-width_SideWeb,
1276 height_MdiClient-tab_height,
1277 1);
1278
1279 if( pobj_SideWeb )
1280 {
1281 if(pobj_SideWeb->bShow){
1282 //SideWeb
1283 pobj_SideWeb->resize(
1284 width_owner - pobj_nv->width_WebSearchView,
1285 height_Rebar,
1286 pobj_nv->width_WebSearchView,
1287 height_MdiClient);
1288 }
1289 else pobj_SideWeb->resize(0,0,0,0);
1290 }
1291
1292 if(width_pjv){
1293 //プロジェクトビュー
1294 MoveWindow(hProjectView,
1295 0,
1296 height_Rebar,
1297 pobj_nv->width_ClipProjectView,
1298 height_MdiClient,
1299 1);
1300 InvalidateRect(hProjectView,NULL,0);
1301 }
1302
1303 if(height_dv){
1304#ifndef THETEXT
1305 //デバッガビュー
1306 pobj_Debugger->resize(
1307 0,
1308 height_Rebar+height_MdiClient+LEVER_THICK,
1309 width_owner,
1310 pobj_nv->height_ClipDebuggerView);
1311#endif
1312 }
1313 if(height_cv){
1314 //コンパイラビュー
1315 MoveWindow(hCompileView,
1316 0,
1317 height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
1318 width_owner,
1319 pobj_nv->height_ClipCompileView,
1320 1);
1321 }
1322}
1323
1324WNDPROC oldMainFrameWndProc;
1325LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1326 int i,i2,WndNum;
1327 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],*pTemp;
1328 HWND hChild;
1329 RECT rect;
1330 POINT pos;
1331 HDROP hDrop;
1332 HGLOBAL hGlobal;
1333
1334 static COLORREF colorUser=RGB(255,255,255);
1335
1336 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1337 //「最近使ったファイル」メニューコマンド
1338 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1339 OpenFileWithExtension(str);
1340 return 0;
1341 }
1342
1343 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1344 //「最近使ったプロジェクト」メニューコマンド
1345 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1346 OpenFileWithExtension(str);
1347 return 0;
1348 }
1349
1350 switch(message)
1351 {
1352 case WM_COMMAND:
1353 switch(LOWORD(wParam)){
1354
1355#ifndef THETEXT
1356
1357
1358 ////////////////////////
1359 // デバッグ コマンド
1360 ////////////////////////
1361
1362 case IDM_STEP_IN:
1363 pobj_Debugger->StepIn();
1364 break;
1365 case IDM_STEP_OVER:
1366 pobj_Debugger->StepOver();
1367 break;
1368 case IDM_STEP_CURSOR:
1369 pobj_Debugger->StepToCursor();
1370 break;
1371 case IDM_BREAKPOINT:
1372 if(ProjectInfo.name[0]){
1373 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1374 }
1375 else{
1376 pobj_DBBreakPoint->Event_BreakPoint();
1377 }
1378 break;
1379 case IDM_DEBUG_STOP:
1380 pobj_Debugger->DebugStop();
1381 break;
1382 case IDM_DEBUG_PAUSE:
1383 pobj_Debugger->DebugPause();
1384 break;
1385
1386
1387 case IDM_COMMUNITY:
1388 ShellExecute(hwnd,"open","iexplore.exe",
1389 "http://www.activebasic.com/forum/",
1390 NULL,SW_SHOWNORMAL);
1391 return 0;
1392 case IDM_COMMU_SEARCH:
1393 ShellExecute(hwnd,"open","iexplore.exe",
1394 "http://www.activebasic.com/forum/search.php",
1395 NULL,SW_SHOWNORMAL);
1396 return 0;
1397 case IDM_COMMU_PM:
1398 ShellExecute(hwnd,"open","iexplore.exe",
1399 "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
1400 NULL,SW_SHOWNORMAL);
1401 return 0;
1402 case ID_COMMU_FORUM1:
1403 ShellExecute(hwnd,"open","iexplore.exe",
1404 "http://www.activebasic.com/forum/viewforum.php?f=1",
1405 NULL,SW_SHOWNORMAL);
1406 return 0;
1407 case ID_COMMU_FORUM2:
1408 ShellExecute(hwnd,"open","iexplore.exe",
1409 "http://www.activebasic.com/forum/viewforum.php?f=2",
1410 NULL,SW_SHOWNORMAL);
1411 return 0;
1412 case ID_COMMU_FORUM3:
1413 ShellExecute(hwnd,"open","iexplore.exe",
1414 "http://www.activebasic.com/forum/viewforum.php?f=5",
1415 NULL,SW_SHOWNORMAL);
1416 return 0;
1417 case ID_COMMU_FORUM4:
1418 ShellExecute(hwnd,"open","iexplore.exe",
1419 "http://www.activebasic.com/forum/viewforum.php?f=3",
1420 NULL,SW_SHOWNORMAL);
1421 return 0;
1422 case ID_COMMU_FORUM5:
1423 ShellExecute(hwnd,"open","iexplore.exe",
1424 "http://www.activebasic.com/forum/viewforum.php?f=6",
1425 NULL,SW_SHOWNORMAL);
1426 return 0;
1427 case ID_COMMU_FORUM6:
1428 ShellExecute(hwnd,"open","iexplore.exe",
1429 "http://www.activebasic.com/forum/viewforum.php?f=8",
1430 NULL,SW_SHOWNORMAL);
1431 return 0;
1432 case ID_COMMU_FORUM7:
1433 ShellExecute(hwnd,"open","iexplore.exe",
1434 "http://www.activebasic.com/forum/viewforum.php?f=4",
1435 NULL,SW_SHOWNORMAL);
1436 return 0;
1437 case ID_COMMU_FORUM8:
1438 ShellExecute(hwnd,"open","iexplore.exe",
1439 "http://www.activebasic.com/forum/viewforum.php?f=7",
1440 NULL,SW_SHOWNORMAL);
1441 return 0;
1442#endif //THETEXT
1443
1444
1445 case IDM_TOPIC:
1446#ifdef THETEXT
1447 sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
1448 ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
1449#else
1450 sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
1451 HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
1452#endif
1453 return 0;
1454
1455#ifdef THETEXT
1456 case IDM_DSHOMEPAGE:
1457 ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
1458 return 0;
1459#else
1460 case IDM_AB_WEBSITE:
1461 ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
1462 return 0;
1463 case IDM_ACTBDL:
1464 ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
1465 return 0;
1466#endif
1467
1468 case IDM_ABOUT:
1469 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
1470 return 0;
1471
1472 case IDM_WEB_SEARCH:
1473 hChild=GetWindow(hClient,GW_CHILD);
1474 WndNum=GetWndNum(hChild);
1475 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1476 extern HWND hWebSearchCombo;
1477 SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
1478 }
1479 return 0;
1480
1481
1482
1483 //////////////////////////////////////////////////////
1484 // レバーコントロールのサブメニューコマンド(レバー追加)
1485 //////////////////////////////////////////////////////
1486
1487 case IDM_DOCSELECTBAND:
1488 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1489 return 0;
1490 case IDM_STANDARDBAND:
1491 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1492 return 0;
1493#ifndef THETEXT
1494 case IDM_RELEASEBAND:
1495 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1496 return 0;
1497 case IDM_DEBUGBAND:
1498 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1499 return 0;
1500 case IDM_SELECTCOMPILERBAND:
1501 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1502 return 0;
1503#endif
1504 case IDM_BANDMENU_WEB_SEARCH:
1505 pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
1506 return 0;
1507 case IDM_NOGRIPPER:
1508 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1509 else pobj_nv->bNoGripper=1;
1510
1511 //レバーコントロールを再生成
1512 pobj_Rebar->ResetRebar();
1513
1514 //メニュー状態を設定
1515 ResetState_DocMenu();
1516 return 0;
1517 case IDM_RESET_REBAR:
1518 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1519 if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1520
1521 //レバーコントロールを再生成
1522 pobj_Rebar->ResetInitRebar();
1523
1524 //メニュー状態を設定
1525 ResetState_DocMenu();
1526 return 0;
1527
1528
1529
1530 ////////////////////////////////////////////////////
1531 // メイン タブ コントロールのサブメニューコマンド
1532 ////////////////////////////////////////////////////
1533
1534 case IDM_ALLCLOSE_OMIT_MYSELF:
1535 //このウィンドウ以外をすべて閉じる(&A)
1536 hChild=GetWindow(hClient,GW_CHILD);
1537 WndNum=GetWndNum(hChild);
1538 for(i=0;i<MAX_WNDNUM;i++){
1539 if(i==WndNum) continue;
1540 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1541 }
1542 return 0;
1543
1544 case IDM_PATH_COPY:
1545 hChild=GetWindow(hClient,GW_CHILD);
1546 WndNum=GetWndNum(hChild);
1547
1548 //絶対パスをコピー
1549 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1550 pTemp=(char *)GlobalLock(hGlobal);
1551 lstrcpy(pTemp,MdiInfo[WndNum].path);
1552 GlobalUnlock(hGlobal);
1553
1554 //クリップボードに保存
1555 OpenClipboard(hwnd);
1556 EmptyClipboard();
1557 SetClipboardData(CF_TEXT,hGlobal);
1558 CloseClipboard();
1559 return 0;
1560
1561 case IDM_FOLDER_OPEN:
1562 hChild=GetWindow(hClient,GW_CHILD);
1563 WndNum=GetWndNum(hChild);
1564
1565 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1566 lstrcat(temporary,temp2);
1567
1568 ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
1569 return 0;
1570
1571 case IDM_DELETE_FILE:
1572 hChild=GetWindow(hClient,GW_CHILD);
1573 WndNum=GetWndNum(hChild);
1574
1575 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1576 lstrcat(temporary,temp2);
1577
1578 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1579 if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
1580
1581 //ゴミ箱へ
1582 SHFILEOPSTRUCT fo;
1583 fo.hwnd=hwnd;
1584 fo.wFunc=FO_DELETE;
1585 fo.pFrom =MdiInfo[WndNum].path;
1586 fo.pTo="\0";
1587 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1588 SHFileOperation(&fo);
1589
1590 //閉じる
1591 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1592 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1593
1594 return 0;
1595
1596 case IDM_USER_COLOR:
1597 {
1598 CHOOSECOLOR cc;
1599 COLORREF CusColors[16]={
1600 RGB(255,255,255),
1601 RGB(0,0,0),
1602 RGB(128,128,128),
1603 RGB(192,192,192),
1604 RGB(128,0,0),
1605 RGB(255,0,0),
1606 RGB(128,128,0),
1607 RGB(255,255,0),
1608 RGB(0,128,0),
1609 RGB(0,255,0),
1610 RGB(0,128,128),
1611 RGB(0,255,255),
1612 RGB(0,0,128),
1613 RGB(0,0,255),
1614 RGB(128,0,128),
1615 RGB(255,0,255)};
1616 cc.lStructSize=sizeof(CHOOSECOLOR);
1617 cc.hwndOwner=hwnd;
1618 cc.rgbResult=colorUser;
1619 cc.lpCustColors=CusColors;
1620 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1621 if(!ChooseColor(&cc)){
1622 return 0;
1623 }
1624 colorUser=cc.rgbResult;
1625 }
1626 case IDM_GRAY:
1627 case IDM_WHITE:
1628 case IDM_RED:
1629 case IDM_GREEN:
1630 case IDM_BLUE:
1631 case IDM_YELLOW:
1632 hChild=GetWindow(hClient,GW_CHILD);
1633 WndNum=GetWndNum(hChild);
1634
1635 TC_ITEM tcItem;
1636 tcItem.mask=TCIF_PARAM;
1637 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1638 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1639 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1640 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1641 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1642 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1643 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
1644 TabCtrl_SetItem(pobj_MainTab->hTab,
1645 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1646 &tcItem);
1647 InvalidateRect(pobj_MainTab->hTab,NULL,0);
1648 return 0;
1649
1650
1651
1652 //////////////////////////////////
1653 // SideWeb
1654 //////////////////////////////////
1655
1656 case IDC_CLIP:
1657 pobj_SideWeb->bShow=0;
1658 ResizeOwnerWnd();
1659 return 0;
1660 }
1661 break;
1662 case WM_DROPFILES:
1663 hDrop=(HDROP)wParam;
1664
1665 i2=DragQueryFile(hDrop,-1,0,0);
1666 for(i=0;i<i2;i++){
1667 DragQueryFile(hDrop,i,str,MAX_PATH);
1668 OpenFileWithExtension(str);
1669 }
1670 DragFinish(hDrop);
1671 return 0;
1672 case WM_SHOWERROR:
1673 //エラー部分を反転表示
1674 DWORD AccBytes;
1675 HANDLE fh;
1676 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
1677 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1678 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
1679 CloseHandle(fh);
1680 temporary[AccBytes]=0;
1681 hChild=GetWindow(hClient,GW_CHILD);
1682 while(hChild){
1683 WndNum=GetWndNum(hChild);
1684 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1685 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
1686 }
1687 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1688 }
1689 if(!hChild){
1690 hChild=OpenFileWithExtension(temporary);
1691 WndNum=GetWndNum(hChild);
1692 }
1693
1694 if(WndNum==-1) return 0;
1695
1696 //ウィンドウを最前面に表示
1697 BringWindowToTop(hChild);
1698 UpdateWindow(hChild);
1699
1700 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
1701
1702 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
1703 for(i=0,i2=0;;i++){
1704 if(i2>=(int)wParam) break;
1705 if(pTemp[i]=='\0') break;
1706 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
1707 i++;
1708 i2++;
1709 }
1710 }
1711 pos.x=i;
1712
1713 //行の終端インデックスを取得
1714 for(;;i++){
1715 if(pTemp[i]=='\0') break;
1716 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
1717 }
1718 pos.y=i;
1719
1720 //行を選択する
1721 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
1722
1723 return 0;
1724
1725#ifndef THETEXT
1726 case WM_SETCOMPILEVIEW:
1727 //コンパイラウィンドウ(埋め込み型)が表示されたとき
1728 hCompileView=(HWND)lParam;
1729 ResizeOwnerWnd();
1730 return 0;
1731 case WM_DESTROYCOMPILEVIEW:
1732 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
1733 if((int)hCompileView==-1){
1734 //すぐに次のコンパイラウィンドウが起動するとき
1735 hCompileView=0;
1736 }
1737 else{
1738 //完全にコンパイラウィンドウを閉じたときはリサイズ
1739 hCompileView=0;
1740
1741 ResizeOwnerWnd();
1742 }
1743 return 0;
1744
1745 case WM_SETDEBUGGERBASE:
1746 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
1747 pobj_Debugger->begin();
1748
1749 //BasicCompiler.exeの強制終了を考慮
1750 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
1751
1752 return 0;
1753 case WM_DESTROYDEBUGGERBASE:
1754 //BasicCompiler.exeの強制終了を考慮
1755 KillTimer(hOwner,ID_DEBUGSAFTY);
1756
1757 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
1758 pobj_Debugger->end();
1759
1760 return 0;
1761
1762 case WM_SETDEBUGGERVIEW:
1763 //デバッガウィンドウ(埋め込み型)が表示されたとき
1764 pobj_Debugger->watch_start((HWND)lParam);
1765 ResizeOwnerWnd();
1766 return 0;
1767 case WM_DESTROYDEBUGGERVIEW:
1768 //デバッガウィンドウ(埋め込み型)が破棄されたとき
1769 pobj_Debugger->watch_quit();
1770 ResizeOwnerWnd();
1771 return 0;
1772#endif
1773
1774 case WM_SIZE:
1775 ResizeOwnerWnd();
1776 return 0;
1777
1778
1779 case WM_MOUSEMOVE:
1780 static DWORD dwDragLever;
1781 static POINT PrevMousePos;
1782 static int start;
1783
1784 pos.x=(long)(short)LOWORD(lParam);
1785 pos.y=(long)(short)HIWORD(lParam);
1786 ClientToScreen(hwnd,&pos);
1787
1788 if(dwDragLever){
1789 GetClientRect(hwnd,&rect);
1790
1791 if(dwDragLever==1){
1792 //プロジェクトビューをリサイズ中
1793 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
1794 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
1795 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
1796 }
1797 else if(dwDragLever==2){
1798 //デバッガビューをリサイズ中
1799 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
1800 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
1801 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
1802 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
1803 }
1804 else if(dwDragLever==3){
1805 //コンパイラビューをリサイズ中
1806 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
1807 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
1808 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
1809 pobj_nv->height_ClipCompileView=rect.bottom-100;
1810 }
1811 else if(dwDragLever==4){
1812 //SideWebをリサイズ中
1813 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
1814 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
1815 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
1816 }
1817
1818 ResizeOwnerWnd();
1819 UpdateWindow(hwnd);
1820 }
1821 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1822 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1823 GetWindowRect(hProjectView,&rect);
1824 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1825 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1826 SetCursor(LoadCursor(0,IDC_SIZEWE));
1827 }
1828 }
1829#ifndef THETEXT
1830 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1831 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1832 GetWindowRect(pobj_Debugger->hwnd,&rect);
1833 if(rect.left<=pos.x&&pos.x<=rect.right&&
1834 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1835 SetCursor(LoadCursor(0,IDC_SIZENS));
1836 }
1837 }
1838 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1839 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1840 GetWindowRect(hCompileView,&rect);
1841 if(rect.left<=pos.x&&pos.x<=rect.right&&
1842 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1843 SetCursor(LoadCursor(0,IDC_SIZENS));
1844 }
1845 }
1846#endif
1847 if( pobj_SideWeb )
1848 {
1849 if(pobj_SideWeb->bShow){
1850 //SideWebとMDIクライアントの境目のサイズ変更ライン
1851 pobj_SideWeb->GetRect(&rect);
1852 ClientToScreen(hwnd,&rect);
1853 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1854 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1855 SetCursor(LoadCursor(0,IDC_SIZEWE));
1856 }
1857 }
1858 }
1859 return 0;
1860 case WM_LBUTTONDOWN:
1861 pos.x=LOWORD(lParam);
1862 pos.y=HIWORD(lParam);
1863 ClientToScreen(hwnd,&pos);
1864
1865 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1866 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1867 GetWindowRect(hProjectView,&rect);
1868 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1869 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1870 SetCursor(LoadCursor(0,IDC_SIZEWE));
1871
1872 dwDragLever=1;
1873 SetCapture(hwnd);
1874
1875 PrevMousePos=pos;
1876 start=pobj_nv->width_ClipProjectView;
1877 }
1878 }
1879#ifndef THETEXT
1880 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1881 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1882 GetWindowRect(pobj_Debugger->hwnd,&rect);
1883 if(rect.left<=pos.x&&pos.x<=rect.right&&
1884 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1885 SetCursor(LoadCursor(0,IDC_SIZENS));
1886
1887 dwDragLever=2;
1888 SetCapture(hwnd);
1889
1890 PrevMousePos=pos;
1891 start=pobj_nv->height_ClipDebuggerView;
1892 }
1893 }
1894 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1895 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1896 GetWindowRect(hCompileView,&rect);
1897 if(rect.left<=pos.x&&pos.x<=rect.right&&
1898 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1899 SetCursor(LoadCursor(0,IDC_SIZENS));
1900
1901 dwDragLever=3;
1902 SetCapture(hwnd);
1903
1904 PrevMousePos=pos;
1905 start=pobj_nv->height_ClipCompileView;
1906 }
1907 }
1908#endif
1909 if( pobj_SideWeb && pobj_SideWeb->bShow){
1910 //SideWebとMDIクライアントの境目のサイズ変更ライン
1911 pobj_SideWeb->GetRect(&rect);
1912 ClientToScreen(hwnd,&rect);
1913 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1914 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1915 SetCursor(LoadCursor(0,IDC_SIZENS));
1916
1917 dwDragLever=4;
1918 SetCapture(hwnd);
1919
1920 PrevMousePos=pos;
1921 start=pobj_nv->width_WebSearchView;
1922 }
1923 }
1924 return 0;
1925 case WM_LBUTTONUP:
1926 if(dwDragLever){
1927 dwDragLever=0;
1928 ReleaseCapture();
1929 }
1930 return 0;
1931
1932
1933 case WM_SYSCOMMAND:
1934 //ウィンドウの最小化前にウィンドウ位置を保存
1935 if(wParam==SC_MINIMIZE){
1936 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
1937 else if(!IsIconic(hwnd)){
1938 pobj_nv->bWindowMax=0;
1939 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
1940 }
1941 }
1942 break; //処理をDefFrameProcへ
1943 case WM_QUERYENDSESSION:
1944 case WM_CLOSE:
1945 extern BOOL bSearchingClasses;
1946 if(bSearchingClasses){
1947 pobj_ClassTreeView->bCloseSwitch=1;
1948 return 0;
1949 }
1950
1951 //コンパイラビューを閉じる
1952 if(hCompileView)
1953 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
1954
1955 //次回起動時にMDIウィンドウを最大化させるかを判定
1956 hChild=GetWindow(hClient,GW_CHILD);
1957 pobj_nv->bMDIZoomed=IsZoomed(hChild);
1958
1959 //プロジェクトを閉じる
1960 if(ProjectInfo.name[0]){
1961 if(!CloseProject()) return 0;
1962 }
1963
1964 //MDIウィンドウの保存確認
1965 hChild=GetWindow(hClient,GW_CHILD);
1966 while(hChild){
1967 i=GetWndNum(hChild);
1968 if(!DocumentModifyCheck(hChild)) return 0;
1969 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1970 }
1971
1972
1973 KillTimer(hwnd,ID_TIMER_BACKUP);
1974
1975
1976 //ProjectViewの位置を保存、ProjectViewを破棄
1977 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
1978 DestroyWindow(hProjectView);
1979 DestroyWindow(hProjectView_ToolWindow);
1980
1981 //Rebarの位置を保存、Rebarを破棄
1982 delete pobj_Rebar;
1983 pobj_Rebar=0;
1984
1985 //タブコントロールを破棄
1986 delete pobj_MainTab;
1987 pobj_MainTab=0;
1988
1989 //SideWebを破棄
1990 delete pobj_SideWeb;
1991 pobj_SideWeb=0;
1992
1993 //メインウィンドウの最大化有無、座標を保存
1994 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
1995 else if(!IsIconic(hwnd)){
1996 pobj_nv->bWindowMax=0;
1997 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
1998 }
1999
2000 hChild=GetWindow(hClient,GW_CHILD);
2001 while(hChild){
2002 CloseDocWindow(GetWndNum(hChild));
2003 DestroyWindow(hChild);
2004 hChild=GetWindow(hClient,GW_CHILD);
2005 }
2006
2007 EndProjectEditor(); //ProjectEditorの情報を保存
2008
2009 //エディタ用フォントを破棄
2010 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2011 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2012 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2013
2014 DestroyWindow(hwnd);
2015 return 0;
2016
2017 case WM_DESTROY:
2018 PostQuitMessage(0);
2019 return 0;
2020 }
2021
2022 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
2023}
2024
2025int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2026 WNDCLASSEX wcl;
2027
2028 wcl.cbSize=sizeof(WNDCLASSEX);
2029 wcl.hInstance=hInst;
2030 wcl.lpszClassName=lpClassName;
2031 wcl.lpfnWndProc=WndProc;
2032
2033 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2034 else wcl.style=0;
2035
2036 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2037 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2038
2039 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2040 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2041
2042 wcl.lpszMenuName=NULL;
2043 wcl.cbClsExtra=0;
2044 wcl.cbWndExtra=0;
2045 wcl.hbrBackground=hBackBrush;
2046
2047 return RegisterClassEx(&wcl);
2048}
2049int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2050 int i,i2,IsStr;
2051 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2052 MSG msg;
2053 HACCEL hAccel;
2054
2055 hInst=hThisInst;
2056 if(!SetupProjectEditor()) return 0;
2057
2058 HBRUSH hGrayBrush_LineNumber;
2059 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2060
2061 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2062 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2063 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2064 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2065 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2066 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2067 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2068 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2069 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2070 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2071 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2072 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2073 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2074 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2075 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2076 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2077 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2078
2079 //Web検索用のウィンドウクラス
2080 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2081 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2082 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2083
2084 //ルーラーのウィンドウクラス
2085 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2086
2087 //SideWebのウィンドウクラス
2088 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2089
2090 ActiveBasic::IDE::Program::Main();
2091
2092 //return 0;
2093
2094
2095 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
2096
2097 //メインウィンドウ
2098 RECT *prc;
2099 prc=&pobj_nv->StartupWindowRect;
2100 /*
2101 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
2102 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
2103 prc->left, prc->top,
2104 prc->right-prc->left, prc->bottom-prc->top,
2105 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
2106 */
2107
2108 //バックアップ用タイマーを設定(10秒に一回)
2109 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
2110
2111 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
2112 SetClipboardViewer(hOwner);
2113
2114 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
2115 else ShowWindow(hOwner,ShowCmd);
2116 UpdateWindow(hOwner);
2117
2118 int open_sw=0;
2119 if(lstrlen(lpCmdLine)>0){
2120 lstrcpy(dummy,lpCmdLine);
2121 for(i=0,i2=0,IsStr=0;;i++,i2++){
2122 if(dummy[i]=='\"'){
2123 if(IsStr==0) IsStr=1;
2124 else IsStr=0;
2125 i++;
2126 }
2127 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
2128 str[i2]=0;
2129 if(!(strstr(str,":")||strstr(str,"\\\\"))){
2130 lstrcpy(str2,str);
2131 GetCurrentDirectory(MAX_PATH,str);
2132 lstrcat(str,"\\");
2133 lstrcat(str,str2);
2134 }
2135 ShortPathToLongPath(str,str2);
2136 OpenFileWithExtension(str2);
2137 open_sw=1;
2138 if(dummy[i]=='\0') break;
2139 i2=-1;
2140 continue;
2141 }
2142 str[i2]=dummy[i];
2143 }
2144 }
2145
2146 BOOL bRestore=0;
2147
2148
2149 {
2150 //自動バックアップ及び復元機能
2151
2152 //必要であれば復元
2153 bRestore=restore();
2154 }
2155
2156
2157#ifdef THETEXT
2158 if(open_sw==0&&bRestore==0){
2159 //ファイルが開かれなかったとき
2160 NewTextEditWindow(NULL,WNDTYPE_TEXT);
2161 }
2162#endif
2163
2164
2165 while(GetMessage(&msg,NULL,0,0)){
2166
2167 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
2168 if(ProjectInfo.name[0]){
2169 for(i=0,i2=0;i<MAX_WNDNUM;i++){
2170 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
2171 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
2172 }
2173 }
2174 if(i2==0){
2175 if(!TranslateMDISysAccel(hClient,&msg)){
2176 TranslateMessage(&msg);
2177 DispatchMessage(&msg);
2178 }
2179 }
2180 }
2181 else{
2182 if(!TranslateMDISysAccel(hClient,&msg)){
2183 TranslateMessage(&msg);
2184 DispatchMessage(&msg);
2185 }
2186 }
2187 }
2188 }
2189
2190 DeleteObject(hGrayBrush_LineNumber);
2191
2192#if defined HeapAlloc
2193 CheckHeapCheck();
2194#endif
2195
2196 return msg.wParam;
2197}
Note: See TracBrowser for help on using the repository browser.