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

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

FileManager周りをリファクタリング

File size: 48.9 KB
Line 
1#include "stdafx.h"
2
3#include "abdev.h"
4
5
6#if defined HeapAlloc
7#define MEM_MAX 65536
8LPVOID pCheckMem[MEM_MAX];
9int now;
10#undef HeapAlloc
11#undef HeapReAlloc
12LPVOID CheckHeapAlloc(HANDLE hf,DWORD dwFlags,DWORD dwBytes){
13 LPVOID ret;
14 ret=HeapAlloc(hf,dwFlags,dwBytes);
15 pCheckMem[now]=ret;
16
17 //この部分にnowのチェックを挿入
18
19
20 now++;
21 if(now>=MEM_MAX){
22 MessageBox(0,"pCheckMemの最大値を超えました","Check",0);
23 }
24 return ret;
25}
26LPVOID CheckHeapReAlloc(HANDLE hf,DWORD dwFlags,LPVOID lpMem,DWORD dwBytes){
27 int i;
28 LPVOID ret;
29 for(i=0;;i++){
30 if(lpMem==pCheckMem[i]) break;
31 if(i>=MEM_MAX){
32 MessageBox(0,"エラー","CheckHeapReAlloc",0);
33 break;
34 }
35 }
36 ret=HeapReAlloc(hf,dwFlags,lpMem,dwBytes);
37 pCheckMem[i]=ret;
38 return ret;
39}
40void HeapDefaultFree(LPVOID lpMem){
41 int i;
42 for(i=0;;i++){
43 if(lpMem==pCheckMem[i]) break;
44 if(i>=MEM_MAX){
45 MessageBox(0,"エラー","HeapDefaultFree",0);
46 break;
47 }
48 }
49 pCheckMem[i]=0;
50 HeapFree(hHeap,0,lpMem);
51}
52void CheckHeapCheck(){
53 int i,i2;
54 char temp[100];
55 temp[0]=0;
56 for(i=0,i2=0;i<MEM_MAX;i++){
57 if(pCheckMem[i]){
58 sprintf(temp+lstrlen(temp),"%d\r\n",i);
59 i2++;
60 if(i2==10){
61 lstrcat(temp,"これ以上の未解放が確認されています");
62 break;
63 }
64 }
65 }
66 if(temp[0]) MessageBox(0,temp,"Check - BasicCompiler.exe",0);
67}
68#define HeapAlloc CheckHeapAlloc
69#define HeapReAlloc CheckHeapReAlloc
70#else
71void HeapDefaultFree(LPVOID lpMem){
72 HeapFree(hHeap,0,lpMem);
73}
74#endif
75
76#ifdef DeleteObject
77#undef DeleteObject
78BOOL CheckDeleteObject(HGDIOBJ hObject){
79 BOOL bRet;
80 bRet=DeleteObject(hObject);
81
82 if(bRet==0){
83 MessageBox(0,"DeleteObject Error","Check",0);
84 }
85 return bRet;
86}
87#define DeleteObject CheckDeleteObject
88#endif
89
90
91void 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<MdiInfo.size();i++){
102 if(hChild==MdiInfo[i]->hwnd) break;
103 }
104 if(i==MdiInfo.size()) i=-1;
105 return i;
106}
107int GetNowWndNum(void){
108 return GetWndNum(GetWindow(hClient,GW_CHILD));
109}
110int GetFileNum(int WndNum){
111 if( !projectInfo.IsOpened() ){
112 return -1;
113 }
114
115 for(int i=0;i<projectInfo.fileSystem.root.files.size();i++)
116 {
117 if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),projectInfo.fileSystem.root.files[i].GetFullPath().c_str())==0) return i;
118 }
119 return -1;
120}
121
122void SendTextEditResizeEvent(HWND hwnd){
123 RECT rect;
124 GetClientRect(hwnd,&rect);
125 ResizeTextEditWnd(hwnd,rect.right,rect.bottom);
126}
127
128void RedrawAllWindow(void){
129 HWND hChild;
130 hChild=GetWindow(hClient,GW_CHILD);
131 if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD));
132 while(hChild){
133 int WndNum;
134 WndNum=GetWndNum(hChild);
135 if(WndNum==-1) break;
136
137 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
138 //コントロールタブスペースの幅と行番号の文字数を更新
139 MdiInfo[WndNum]->pMdiTextEdit->iWidth_ControlTabSpace=
140 GetControlTabSpace(WndNum,&MdiInfo[WndNum]->pMdiTextEdit->iLineNumberTextCount);
141
142 InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->hEdit,NULL,0);
143 InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
144
145 SendTextEditResizeEvent(MdiInfo[WndNum]->hwnd);
146 }
147 else{
148 HWND hEdit;
149 hEdit=GetWindow(hChild,GW_CHILD);
150 InvalidateRect(hEdit,NULL,0);
151 }
152
153 hChild=GetWindow(hChild,GW_HWNDNEXT);
154 }
155}
156
157int DocumentModifyCheck(HWND hChild){ //終了保存確認
158 int BoxID,WndNum,sw;
159 char str[MAX_PATH],temporary[MAX_PATH];
160
161 WndNum=GetWndNum(hChild);
162 sw=0;
163 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
164 if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ) sw=1;
165 }
166 else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
167 if(MdiInfo[WndNum]->MdiIconEditInfo->bModify) sw=1;
168 }
169
170 if(sw){
171 GetWindowText(hChild,temporary,MAX_PATH);
172
173 //"\"%s\" ファイルは変更されています。保存しますか?"
174 sprintf(str,STRING_MODIFYCHECK_FILE,temporary);
175 BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION);
176
177 if(BoxID==IDYES){
178 if(!SaveDocument(hChild,NULL)) return 0;
179 }
180 else if(BoxID==IDCANCEL) return 0;
181 }
182 return 1;
183}
184void SetStatusText(char *MenuText){
185 //////////////////////////
186 // ステータスバーの更新
187 //////////////////////////
188
189 int WndNum;
190 double BufSize;
191 char temporary[255];
192 HWND hChild;
193
194 if(MenuText){
195 SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText);
196 if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0;
197 }
198
199 hChild=GetWindow(hClient,GW_CHILD);
200 WndNum=GetWndNum(hChild);
201 if(WndNum==-1) return;
202 hChild=GetWindow(hChild,GW_CHILD);
203 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
204 //////////////////////
205 // テキストエディタ
206 //////////////////////
207
208 //サイズ
209 BufSize=(double)lstrlen(MdiInfo[WndNum]->pMdiTextEdit->buffer);
210 if(IsWindow(hChild)){
211 if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
212 else if(BufSize<1024*1024){
213 BufSize/=1024;
214 sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize);
215 }
216 else{
217 BufSize/=1024*1024;
218 sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize);
219 }
220 }
221 else temporary[0]=0;
222 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
223
224 //行と桁
225 if(IsWindow(hChild)){
226#if defined(JPN)
227 //日本語
228 sprintf(temporary,"%d 行、%d 列",
229 MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1,
230 MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1);
231#else
232 //英語
233 sprintf(temporary,"%d : %d",
234 MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1,
235 MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1);
236#endif
237 }
238 else temporary[0]=0;
239 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
240
241 //文字コード
242 nkf.GetCharCodeName(MdiInfo[WndNum]->pMdiTextEdit->iCharCode,temporary);
243 SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
244
245 //文字コード
246 nkf.GetLfCodeName(MdiInfo[WndNum]->pMdiTextEdit->iLfCode,temporary);
247 SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
248 }
249 else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
250 ////////////////
251 // RADツール
252 ////////////////
253
254 ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path);
255 if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
256 sprintf(temporary,"pos %d, %d",
257 RadInfo.DraggingRect[0].left-MdiInfo[WndNum]->MdiRadInfo->ClientPos.x,
258 RadInfo.DraggingRect[0].top-MdiInfo[WndNum]->MdiRadInfo->ClientPos.y);
259 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
260 sprintf(temporary,"size %d * %d",
261 RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left,
262 RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
263 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
264 }
265 else if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
266 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
267 sprintf(temporary,"size %d * %d",pWindowInfo->size.cx,pWindowInfo->size.cy);
268 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
269 }
270 else{
271 sprintf(temporary,"pos %d, %d",
272 pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.x,
273 pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.y);
274 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
275 sprintf(temporary,"size %d * %d",
276 pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cx,
277 pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cy);
278 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
279 }
280 }
281 else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
282 //////////////////
283 // MENU エディタ
284 //////////////////
285
286 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
287 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
288 }
289 else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
290 //////////////////
291 // ICON エディタ
292 //////////////////
293
294 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
295 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
296 }
297}
298void ResetState_UndoMenu(void){ //「元に戻す、やり直し」のメニュー表示制御
299 int i,i2;
300 HWND hChild;
301
302 hChild=GetWindow(hClient,GW_CHILD);
303 i=GetWndNum(hChild);
304 if(i==-1){
305 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
306 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
307 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
308 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
309 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
310 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
311 }
312 else if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){
313 i2=MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos-1;
314 if(i2==-1) i2=MAX_UNDONUM-1;
315 if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[i2]){
316 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
317 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
318 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
319 }
320 else{
321 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
322 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
323 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
324 }
325 if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos]){
326 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
327 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
328 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
329 }
330 else{
331 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
332 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
333 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
334 }
335 }
336 else if(MdiInfo[i]->DocType==WNDTYPE_RAD){
337 i2=MdiInfo[i]->MdiRadInfo->undo.NowPos-1;
338 if(i2==-1) i2=MAX_UNDONUM-1;
339 if(!MdiInfo[i]->MdiRadInfo->undo.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]->MdiRadInfo->undo.Command[MdiInfo[i]->MdiRadInfo->undo.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_MENU){
361 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
362 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
363 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
364
365 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
366 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
367 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
368 }
369 else if(MdiInfo[i]->DocType==WNDTYPE_ICONEDIT){
370 i2=MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos-1;
371 if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
372 if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[i2]){
373 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
374 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
375 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
376 }
377 else{
378 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
379 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
380 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
381 }
382 if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos]){
383 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
384 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
385 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
386 }
387 else{
388 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
389 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
390 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
391 }
392 }
393}
394void ResetState_ConvMenu(BOOL bEnable){
395 int MenuMsg;
396 if(bEnable)
397 MenuMsg=MF_BYCOMMAND|MF_ENABLED;
398 else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
399
400 pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg);
401 pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg);
402 pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg);
403 pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg);
404 pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg);
405 pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg);
406 pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg);
407 pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg);
408#ifdef THETEXT
409 pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg);
410 pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg);
411#else
412 pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg);
413#endif
414}
415void ResetState_PrintMenu(void);
416void ResetState_EditMenu(void){ //編集メニューの表示制御
417 HWND hChild;
418 int WndNum;
419 long MenuMsg,ToolbarMsg;
420
421 //印刷メニューの状態を設定
422 ResetState_PrintMenu();
423
424 hChild=GetWindow(hClient,GW_CHILD);
425 if(!IsWindow(hChild)){
426 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
427 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
428#ifdef THETEXT
429 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
430#endif
431 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
432
433 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
434 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
435 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
436 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
437 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
438 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
439 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
440 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
441 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
442 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
443 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
444
445 ResetState_ConvMenu(0);
446
447 ResetState_UndoMenu();
448 return;
449 }
450 WndNum=GetWndNum(hChild);
451 if(WndNum==-1) return;
452 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
453 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
454 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
455 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED);
456#ifdef THETEXT
457 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED);
458#endif
459 pobj_StandardToolbar->EnableItem(IDM_FIND,1);
460
461 BOOL bConvEnable;
462 hChild=GetWindow(hChild,GW_CHILD);
463 if(!(
464 MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x&&
465 MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y
466 )){
467 MenuMsg=MF_BYCOMMAND|MF_ENABLED;
468 ToolbarMsg=1;
469
470 bConvEnable=1;
471 }
472 else{
473 MenuMsg=MF_BYCOMMAND|MF_GRAYED;
474 ToolbarMsg=0;
475
476 bConvEnable=0;
477 }
478 pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg);
479 pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg);
480 pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg);
481 EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg);
482 EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg);
483 EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg);
484 pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg);
485 pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg);
486
487 if(IsClipboardFormatAvailable(CF_TEXT)){
488 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
489 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
490 }
491 else{
492 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
493 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
494 }
495
496
497 //変換コマンド
498 ResetState_ConvMenu(bConvEnable);
499 }
500 else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
501 //検索、置換、文字カウントを無効化
502 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
503 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
504#ifdef THETEXT
505 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
506#endif
507 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
508
509 if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
510 //切り取り、コピー、削除を有効化
511 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
512 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
513 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
514 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
515 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
516 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
517 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
518 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
519 }
520 else{
521 //切り取り、コピー、削除を無効化
522 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
523 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
524 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
525 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
526 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
527 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
528 pobj_StandardToolbar->EnableItem(IDM_CUT,1);
529 pobj_StandardToolbar->EnableItem(IDM_COPY,1);
530 }
531
532 //すべて選択を有効化
533 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
534
535 if(IsClipboardFormatAvailable(dwRadClipboardID)){
536 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
537 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
538 }
539 else{
540 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
541 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
542 }
543
544 ResetState_ConvMenu(0);
545 }
546 else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
547 //検索、置換、文字カウントを無効化
548 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
549 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
550#ifdef THETEXT
551 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
552#endif
553 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
554
555 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
556 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
557 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
558 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
559 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
560 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
561 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
562 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
563 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
564 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
565 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
566
567 ResetState_ConvMenu(0);
568 }
569 else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
570 //検索、置換、文字カウントを無効化
571 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
572 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
573#ifdef THETEXT
574 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
575#endif
576 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
577
578 if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==0){
579 //切り取り、コピー、削除を無効化
580 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
581 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
582 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
583 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
584 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
585 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
586 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
587 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
588 }
589 else{
590 //切り取り、コピー、削除を有効化
591 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
592 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
593 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
594 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
595 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
596 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
597 pobj_StandardToolbar->EnableItem(IDM_CUT,1);
598 pobj_StandardToolbar->EnableItem(IDM_COPY,1);
599 }
600
601 //すべて選択を有効化
602 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
603
604 if(IsClipboardFormatAvailable(CF_BITMAP)){
605 //貼り付けを有効化
606 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
607 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
608 }
609 else{
610 //貼り付けを無効化
611 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
612 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
613 }
614
615 ResetState_ConvMenu(0);
616 }
617
618 ResetState_UndoMenu();
619}
620void ResetState_ViewMenu(void){
621 // 表示 メニューの状態を設定
622
623
624#ifdef THETEXT
625 pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn);
626#endif
627}
628void ResetState_PrintMenu(void){ //編集メニューの表示制御
629 HWND hChild;
630 int WndNum;
631 hChild=GetWindow(hClient,GW_CHILD);
632 if(!IsWindow(hChild)){
633 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
634
635 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
636
637 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
638 return;
639 }
640 WndNum=GetWndNum(hChild);
641 if( WndNum != -1 )
642 {
643 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
644 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
645
646 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
647
648 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED);
649 }
650 else{
651 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
652
653 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
654
655 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
656 }
657 }
658}
659void ResetState_DocMenu(void){
660 long MenuMsg,ToolbarMsg;
661 HWND hChild;
662
663 hChild=GetWindow(hClient,GW_CHILD);
664
665
666 /////////////////////////////////////////
667 // 共通ドキュメント メニューの状態を設定
668 /////////////////////////////////////////
669
670 if(!IsWindow(hChild)){
671 MenuMsg=MF_GRAYED;
672 ToolbarMsg=0;
673 }
674 else{
675 MenuMsg=MF_ENABLED;
676 ToolbarMsg=1;
677 }
678 pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg);
679 pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg);
680 pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg);
681 pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg);
682 pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg);
683
684 pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg);
685 pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg);
686 pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg);
687
688
689#ifndef THETEXT
690 /////////////////////////////////////////////////
691 // プロジェクトドキュメント メニューの状態を設定
692 /////////////////////////////////////////////////
693
694 if( projectInfo.IsOpened() ){
695 pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED);
696 pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1);
697
698 MenuMsg=MF_ENABLED;
699 ToolbarMsg=TBSTATE_ENABLED;
700 }
701 else{
702 MenuMsg=MF_GRAYED;
703 ToolbarMsg=TBSTATE_INDETERMINATE;
704 }
705 pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg);
706 pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg);
707 pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg);
708 pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg);
709
710 //デバッガ メニューの状態を設定
711 pobj_Debugger->ResetCommandEnabled();
712#endif
713
714
715 //編集メニューの状態を設定
716 ResetState_EditMenu();
717
718 //表示メニューの状態を設定
719 ResetState_ViewMenu();
720}
721void DuplicateTitleCheck(char *lpszTitle){
722 int i;
723 for(i=0;i<MdiInfo.size();i++){
724 if(MdiInfo[i]->hwnd){
725 if(lstrcmpi(MdiInfo[i]->title.c_str(),lpszTitle)==0){
726 lstrcat(lpszTitle,"_");
727 DuplicateTitleCheck(lpszTitle);
728 return;
729 }
730 }
731 }
732}
733HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor)
734{
735 int i;
736 char str[MAX_PATH],str2[32],*buffer;
737 HWND hChild,hEdit;
738 RECT rect;
739 int iCharCode=NKF_SHIFT_JIS;
740 int iLfCode=LFCODE_CRLF;
741
742 if(filepath){
743
744 //すでに指定されたファイルが開かれている場合
745 hChild=::GetWindow(hClient,GW_CHILD);
746 while(hChild){
747 i=GetWndNum(hChild);
748 if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){
749 if(lstrcmpi(MdiInfo[i]->path.c_str(),filepath)==0) break;
750 }
751 hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
752 }
753 if(hChild){
754 //前面に表示して終了
755 ::BringWindowToTop(hChild);
756 return hChild;
757 }
758
759
760 //////////////////////////////////////////////////////
761 //ファイル読み込み(正常に読み込めるかの確認も含む)
762 //////////////////////////////////////////////////////
763
764 HANDLE hFile;
765 hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
766 if(hFile==INVALID_HANDLE_VALUE){
767 sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
768 ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
769 return 0;
770 }
771 int length;
772 length=GetFileSize(hFile,NULL);
773
774 char *temp;
775 temp=(char *)HeapAlloc(hHeap,0,length+1);
776 DWORD dw;
777 ReadFile(hFile,temp,length,&dw,NULL);
778 CloseHandle(hFile);
779 for(i=0;i<length;i++){
780 if(temp[i]=='\0') temp[i]=' ';
781 }
782 temp[length]=0;
783
784
785 ///////////////////////
786 // 改行コードを判別
787 ///////////////////////
788
789 char *temp2;
790 for(i=0;i<length;i++){
791 if(temp[i]=='\r'){
792 if(temp[i+1]=='\n')
793 iLfCode=LFCODE_CRLF;
794 else
795 iLfCode=LFCODE_CR;
796 break;
797 }
798 if(temp[i]=='\n'){
799 iLfCode=LFCODE_LF;
800 break;
801 }
802 }
803
804 //改行コードを変換
805 if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){
806 temp2=nkf.ToCRLF(iLfCode,temp);
807 HeapDefaultFree(temp);
808 temp=temp2;
809
810 length=lstrlen(temp);
811 }
812
813
814 /////////////////////
815 // Shift-JISに変換
816 /////////////////////
817
818 buffer=(char *)HeapAlloc(hHeap,0,length*2+1);
819 nkf.pSetNkfOption("-sx"); //Shift-JISに変換(xは半角カタカナを全角に変換しないオプション)
820 nkf.pNkfConvert(buffer,temp);
821 buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1);
822 HeapDefaultFree(temp);
823
824 //変換前の文字コードを判別
825 iCharCode=nkf.pNkfGetKanjiCode();
826 if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){
827 //判別不能な場合は、Shift-JISにする
828 iCharCode=NKF_SHIFT_JIS;
829 }
830 else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){
831 //EUC、JISの場合で、判別不能な場合は、Shift-JISを優先
832 for(i=0;;i++){
833 if(buffer[i]=='\0'){
834 //半角コードのみ
835 iCharCode=NKF_SHIFT_JIS;
836 break;
837 }
838 if(IsDBCSLeadByte(buffer[i])) break;
839 }
840 }
841
842
843 //////////////////////////
844 // ファイルパスをセット
845 //////////////////////////
846
847 _splitpath(filepath,NULL,NULL,str,str2);
848 lstrcat(str,str2);
849 }
850 else{
851 buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
852 extern int DocumentCounter;
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_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
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
894 //ウィンドウのID登録
895 MdiInfo.push_back( new MDIINFO() );
896 i = MdiInfo.size()-1;
897 MdiInfo[i]->hwnd=hChild;
898 MdiInfo[i]->DocType=DocumentType;
899 DuplicateTitleCheck(str);
900 MdiInfo[i]->title = str;
901 if(filepath)
902 {
903 MdiInfo[i]->path = filepath;
904 }
905 else
906 {
907 MdiInfo[i]->path = "";
908 }
909
910 MdiInfo[i]->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] );
911
912 MdiInfo[i]->pMdiTextEdit->hEdit=hEdit;
913 MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
914 MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,MdiInfo[i]);
915 MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon;
916 MdiInfo[i]->pMdiTextEdit->buffer=buffer;
917 MdiInfo[i]->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
918 MdiInfo[i]->pMdiTextEdit->iUnderStart=-1;
919 MdiInfo[i]->pMdiTextEdit->iUnderEnd=-1;
920 MdiInfo[i]->pMdiTextEdit->StartCaretPos.x=0;
921 MdiInfo[i]->pMdiTextEdit->StartCaretPos.y=0;
922 MdiInfo[i]->pMdiTextEdit->EndCaretPos.x=0;
923 MdiInfo[i]->pMdiTextEdit->EndCaretPos.y=0;
924 MdiInfo[i]->pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
925 MdiInfo[i]->pMdiTextEdit->bAutoScroll=0;
926 MdiInfo[i]->pMdiTextEdit->iWidth_ControlTabSpace=
927 GetControlTabSpace(i,&MdiInfo[i]->pMdiTextEdit->iLineNumberTextCount);
928 MdiInfo[i]->pMdiTextEdit->iCharCode=iCharCode;
929 MdiInfo[i]->pMdiTextEdit->iLfCode=iLfCode;
930 MdiInfo[i]->IndentStr=0;
931
932
933 int flag;
934 if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
935 else flag=0;
936 SendTextEditResizeEvent(hChild);
937
938
939 //ワードカラーをセット
940 if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(MdiInfo.size()-1);
941
942 //Docコンボボックスに追加
943 extern HWND hDocCombo;
944 if( hDocCombo )
945 {
946 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
947 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
948 }
949
950 //タブに追加
951 pobj_MainTab->InsertItem( str, true, TabColor );
952
953 ::SetFocus(hEdit);
954 SetStatusText(NULL);
955
956 //メニュー状態を設定
957 ResetState_DocMenu();
958
959 if( DocumentType == WNDTYPE_BASIC && !projectInfo.IsOpened() ){
960 // 単体ソースコードを開いたとき
961 extern HWND hProjectView;
962 if( !::IsWindowVisible( hProjectView ) ){
963 // クラスビューを表示する
964 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
965 ShowClassView();
966
967 // クラスビューを更新
968 ResetClassTree((HTREEITEM)-1);
969 }
970 }
971
972 return hChild;
973}
974void CloseDocWindow(int WndNum){
975 int i2,i3;
976
977 MdiInfo[WndNum]->hwnd=0;
978
979 //ドキュメントコンボボックスから文字列を消去
980 extern HWND hDocCombo;
981 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
982 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
983
984 //タブコントロールからアイテムを消去
985 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum]->title.c_str(), true );
986
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 else
1067 {
1068 throw;
1069 }
1070
1071 delete MdiInfo[WndNum];
1072 Jenga::Common::EraseVectorItem<std::vector<MDIINFO *>>( MdiInfo, WndNum );
1073}
1074void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1075 int WndNum;
1076 WndNum=GetWndNum(hwnd);
1077 if(WndNum==-1) return;
1078
1079 int WebResultWndHeight;
1080 WebResultWndHeight=LINK_ITEM_HEIGHT;
1081 //未完成
1082 WebResultWndHeight=0;
1083
1084 int iHeightRuler;
1085 if(pobj_nv->bEditor_Ruler){
1086 //ルーラー
1087 MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->resize(
1088 0,
1089 0,
1090 cx,
1091 HEIGHT_RULER);
1092
1093 iHeightRuler=HEIGHT_RULER;
1094
1095 ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1096 }
1097 else{
1098 iHeightRuler=0;
1099
1100 ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1101 }
1102
1103 //エディットウィンドウ
1104 MoveWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit,
1105 0,
1106 iHeightRuler,
1107 cx,
1108 cy-WebResultWndHeight-iHeightRuler,
1109 1);
1110
1111 //Web検索ウィンドウ
1112 MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult->resize(
1113 0,
1114 cy-WebResultWndHeight,
1115 cx,
1116 WebResultWndHeight);
1117}
1118LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1119 int i,i2;
1120 HWND hEdit;
1121
1122 switch(message){
1123 case WM_CREATE:
1124 CREATESTRUCT *lpcs;
1125 lpcs=(CREATESTRUCT *)lParam;
1126 MDICREATESTRUCT *lpmcs;
1127 lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1128 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1129 break;
1130 case WM_MDIACTIVATE:
1131 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1132 if(MethodCheckInfo.hWnd){
1133 DestroyWindow(MethodCheckInfo.hWnd);
1134 MethodCheckInfo.hWnd=0;
1135 }
1136
1137 //以前のコード補完リストを破棄する
1138 if(ComplementWndInfo.hWnd){
1139 DestroyWindow(ComplementWndInfo.hWnd);
1140 ComplementWndInfo.hWnd=0;
1141 }
1142
1143 if(!lParam) return 0;
1144 i=GetWndNum((HWND)lParam);
1145 if(i==-1) return 0; //ウィンドウが初期状態の場合
1146
1147#ifndef THETEXT
1148 //デバッガ メニューの状態を設定
1149 pobj_Debugger->ResetCommandEnabled();
1150#endif
1151
1152 //ドキュメント セレクト コンボボックス
1153 extern HWND hDocCombo;
1154 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i]->title.c_str());
1155 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1156
1157 //タブコントロール
1158 pobj_MainTab->MdiActiveEvent(MdiInfo[i]->title.c_str());
1159
1160 if( !projectInfo.IsOpened() ){
1161 ResetClassTree((HTREEITEM)-1);
1162 }
1163
1164 return 0;
1165 case WM_SETFOCUS:
1166 hEdit=GetWindow(hwnd,GW_CHILD);
1167 SetFocus(hEdit);
1168 SetStatusText(CmdMsg);
1169 ResetState_EditMenu();
1170 ResetState_ViewMenu();
1171 break;
1172 case WM_SIZE:
1173 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1174 break;
1175 case WM_CLOSE:
1176 if(!DocumentModifyCheck(hwnd)) return 0;
1177 CloseDocWindow(GetWndNum(hwnd));
1178 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1179 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1180
1181 //メニュー状態を設定
1182 ResetState_DocMenu();
1183
1184 return i;
1185 }
1186 return DefMDIChildProc(hwnd,message,wParam,lParam);
1187}
1188
1189WNDPROC oldMainFrameWndProc;
1190LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1191 char str[MAX_PATH];
1192 RECT rect;
1193 POINT pos;
1194
1195 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1196 //「最近使ったファイル」メニューコマンド
1197 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1198 OpenFileWithExtension(str);
1199 return 0;
1200 }
1201
1202 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1203 //「最近使ったプロジェクト」メニューコマンド
1204 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1205 OpenFileWithExtension(str);
1206 return 0;
1207 }
1208
1209 switch(message)
1210 {
1211
1212#ifndef THETEXT
1213 case WM_SETCOMPILEVIEW:
1214 //コンパイラウィンドウ(埋め込み型)が表示されたとき
1215 hCompileView=(HWND)lParam;
1216 ActiveBasic::IDE::Program::mainFrame.Resized();
1217 return 0;
1218 case WM_DESTROYCOMPILEVIEW:
1219 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
1220 if((int)hCompileView==-1){
1221 //すぐに次のコンパイラウィンドウが起動するとき
1222 hCompileView=0;
1223 }
1224 else{
1225 //完全にコンパイラウィンドウを閉じたときはリサイズ
1226 hCompileView=0;
1227
1228 ActiveBasic::IDE::Program::mainFrame.Resized();
1229 }
1230 return 0;
1231
1232 case WM_SETDEBUGGERBASE:
1233 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
1234 pobj_Debugger->begin();
1235
1236 //BasicCompiler.exeの強制終了を考慮
1237 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
1238
1239 return 0;
1240 case WM_DESTROYDEBUGGERBASE:
1241 //BasicCompiler.exeの強制終了を考慮
1242 KillTimer(hOwner,ID_DEBUGSAFTY);
1243
1244 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
1245 pobj_Debugger->end();
1246
1247 return 0;
1248
1249 case WM_SETDEBUGGERVIEW:
1250 //デバッガウィンドウ(埋め込み型)が表示されたとき
1251 pobj_Debugger->watch_start((HWND)lParam);
1252 ActiveBasic::IDE::Program::mainFrame.Resized();
1253 return 0;
1254 case WM_DESTROYDEBUGGERVIEW:
1255 //デバッガウィンドウ(埋め込み型)が破棄されたとき
1256 pobj_Debugger->watch_quit();
1257 ActiveBasic::IDE::Program::mainFrame.Resized();
1258 return 0;
1259#endif
1260
1261
1262 case WM_MOUSEMOVE:
1263 static DWORD dwDragLever;
1264 static POINT PrevMousePos;
1265 static int start;
1266
1267 pos.x=(long)(short)LOWORD(lParam);
1268 pos.y=(long)(short)HIWORD(lParam);
1269 ClientToScreen(hwnd,&pos);
1270
1271 if(dwDragLever){
1272 GetClientRect(hwnd,&rect);
1273
1274 if(dwDragLever==1){
1275 //プロジェクトビューをリサイズ中
1276 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
1277 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
1278 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
1279 }
1280 else if(dwDragLever==2){
1281 //デバッガビューをリサイズ中
1282 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
1283 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
1284 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
1285 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
1286 }
1287 else if(dwDragLever==3){
1288 //コンパイラビューをリサイズ中
1289 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
1290 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
1291 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
1292 pobj_nv->height_ClipCompileView=rect.bottom-100;
1293 }
1294 else if(dwDragLever==4){
1295 //SideWebをリサイズ中
1296 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
1297 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
1298 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
1299 }
1300
1301 ActiveBasic::IDE::Program::mainFrame.Resized();
1302 UpdateWindow(hwnd);
1303 }
1304 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1305 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1306 GetWindowRect(hProjectView,&rect);
1307 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1308 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1309 SetCursor(LoadCursor(0,IDC_SIZEWE));
1310 }
1311 }
1312#ifndef THETEXT
1313 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1314 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1315 GetWindowRect(pobj_Debugger->hwnd,&rect);
1316 if(rect.left<=pos.x&&pos.x<=rect.right&&
1317 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1318 SetCursor(LoadCursor(0,IDC_SIZENS));
1319 }
1320 }
1321 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1322 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1323 GetWindowRect(hCompileView,&rect);
1324 if(rect.left<=pos.x&&pos.x<=rect.right&&
1325 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1326 SetCursor(LoadCursor(0,IDC_SIZENS));
1327 }
1328 }
1329#endif
1330 if( pobj_SideWeb )
1331 {
1332 if(pobj_SideWeb->bShow){
1333 //SideWebとMDIクライアントの境目のサイズ変更ライン
1334 pobj_SideWeb->GetRect(&rect);
1335 ClientToScreen(hwnd,&rect);
1336 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1337 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1338 SetCursor(LoadCursor(0,IDC_SIZEWE));
1339 }
1340 }
1341 }
1342 return 0;
1343 case WM_LBUTTONDOWN:
1344 pos.x=LOWORD(lParam);
1345 pos.y=HIWORD(lParam);
1346 ClientToScreen(hwnd,&pos);
1347
1348 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1349 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1350 GetWindowRect(hProjectView,&rect);
1351 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1352 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1353 SetCursor(LoadCursor(0,IDC_SIZEWE));
1354
1355 dwDragLever=1;
1356 SetCapture(hwnd);
1357
1358 PrevMousePos=pos;
1359 start=pobj_nv->width_ClipProjectView;
1360 }
1361 }
1362#ifndef THETEXT
1363 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1364 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1365 GetWindowRect(pobj_Debugger->hwnd,&rect);
1366 if(rect.left<=pos.x&&pos.x<=rect.right&&
1367 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1368 SetCursor(LoadCursor(0,IDC_SIZENS));
1369
1370 dwDragLever=2;
1371 SetCapture(hwnd);
1372
1373 PrevMousePos=pos;
1374 start=pobj_nv->height_ClipDebuggerView;
1375 }
1376 }
1377 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1378 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1379 GetWindowRect(hCompileView,&rect);
1380 if(rect.left<=pos.x&&pos.x<=rect.right&&
1381 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1382 SetCursor(LoadCursor(0,IDC_SIZENS));
1383
1384 dwDragLever=3;
1385 SetCapture(hwnd);
1386
1387 PrevMousePos=pos;
1388 start=pobj_nv->height_ClipCompileView;
1389 }
1390 }
1391#endif
1392 if( pobj_SideWeb && pobj_SideWeb->bShow){
1393 //SideWebとMDIクライアントの境目のサイズ変更ライン
1394 pobj_SideWeb->GetRect(&rect);
1395 ClientToScreen(hwnd,&rect);
1396 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1397 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1398 SetCursor(LoadCursor(0,IDC_SIZENS));
1399
1400 dwDragLever=4;
1401 SetCapture(hwnd);
1402
1403 PrevMousePos=pos;
1404 start=pobj_nv->width_WebSearchView;
1405 }
1406 }
1407 return 0;
1408 case WM_LBUTTONUP:
1409 if(dwDragLever){
1410 dwDragLever=0;
1411 ReleaseCapture();
1412 }
1413 return 0;
1414
1415
1416 case WM_SYSCOMMAND:
1417 //ウィンドウの最小化前にウィンドウ位置を保存
1418 if(wParam==SC_MINIMIZE){
1419 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
1420 else if(!IsIconic(hwnd)){
1421 pobj_nv->bWindowMax=0;
1422 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
1423 }
1424 }
1425 break; //処理をDefFrameProcへ
1426 }
1427
1428 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
1429}
1430
1431int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
1432 WNDCLASSEX wcl;
1433
1434 wcl.cbSize=sizeof(WNDCLASSEX);
1435 wcl.hInstance=hInst;
1436 wcl.lpszClassName=lpClassName;
1437 wcl.lpfnWndProc=WndProc;
1438
1439 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
1440 else wcl.style=0;
1441
1442 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
1443 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
1444
1445 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
1446 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
1447
1448 wcl.lpszMenuName=NULL;
1449 wcl.cbClsExtra=0;
1450 wcl.cbWndExtra=0;
1451 wcl.hbrBackground=hBackBrush;
1452
1453 return RegisterClassEx(&wcl);
1454}
1455int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
1456 int i,i2,IsStr;
1457 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
1458 MSG msg;
1459 HACCEL hAccel;
1460
1461 hInst=hThisInst;
1462 if(!SetupProjectEditor()) return 0;
1463
1464 HBRUSH hGrayBrush_LineNumber;
1465 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
1466
1467 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1468 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1469 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1470 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1471 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1472 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1473 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
1474 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1475 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1476 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1477 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1478 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
1479 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1480 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1481 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
1482 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
1483 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
1484
1485 //Web検索用のウィンドウクラス
1486 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1487 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1488 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1489
1490 //ルーラーのウィンドウクラス
1491 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1492
1493 //SideWebのウィンドウクラス
1494 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1495
1496 ActiveBasic::IDE::Program::Main();
1497
1498 //return 0;
1499
1500
1501 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
1502
1503 //メインウィンドウ
1504 RECT *prc;
1505 prc=&pobj_nv->StartupWindowRect;
1506 /*
1507 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
1508 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
1509 prc->left, prc->top,
1510 prc->right-prc->left, prc->bottom-prc->top,
1511 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
1512 */
1513
1514 //バックアップ用タイマーを設定(10秒に一回)
1515 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
1516
1517 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
1518 SetClipboardViewer(hOwner);
1519
1520 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
1521 else ShowWindow(hOwner,ShowCmd);
1522 UpdateWindow(hOwner);
1523
1524 int open_sw=0;
1525 if(lstrlen(lpCmdLine)>0){
1526 lstrcpy(dummy,lpCmdLine);
1527 for(i=0,i2=0,IsStr=0;;i++,i2++){
1528 if(dummy[i]=='\"'){
1529 if(IsStr==0) IsStr=1;
1530 else IsStr=0;
1531 i++;
1532 }
1533 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
1534 str[i2]=0;
1535 if(!(strstr(str,":")||strstr(str,"\\\\"))){
1536 lstrcpy(str2,str);
1537 GetCurrentDirectory(MAX_PATH,str);
1538 lstrcat(str,"\\");
1539 lstrcat(str,str2);
1540 }
1541 ShortPathToLongPath(str,str2);
1542 OpenFileWithExtension(str2);
1543 open_sw=1;
1544 if(dummy[i]=='\0') break;
1545 i2=-1;
1546 continue;
1547 }
1548 str[i2]=dummy[i];
1549 }
1550 }
1551
1552 BOOL bRestore=0;
1553
1554
1555 {
1556 //自動バックアップ及び復元機能
1557
1558 //必要であれば復元
1559 bRestore=restore();
1560 }
1561
1562
1563#ifdef THETEXT
1564 if(open_sw==0&&bRestore==0){
1565 //ファイルが開かれなかったとき
1566 NewTextEditWindow(NULL,WNDTYPE_TEXT);
1567 }
1568#endif
1569
1570
1571 while(GetMessage(&msg,NULL,0,0)){
1572
1573 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
1574 if( projectInfo.IsOpened() ){
1575 for(i=0,i2=0;i<MdiInfo.size();i++){
1576 if(MdiInfo[i]->hwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){
1577 if(IsDialogMessage(MdiInfo[i]->MdiRadInfo->hProp_Dlg,&msg)) i2=1;
1578 }
1579 }
1580 if(i2==0){
1581 if(!TranslateMDISysAccel(hClient,&msg)){
1582 TranslateMessage(&msg);
1583 DispatchMessage(&msg);
1584 }
1585 }
1586 }
1587 else{
1588 if(!TranslateMDISysAccel(hClient,&msg)){
1589 TranslateMessage(&msg);
1590 DispatchMessage(&msg);
1591 }
1592 }
1593 }
1594 }
1595
1596 DeleteObject(hGrayBrush_LineNumber);
1597
1598#if defined HeapAlloc
1599 CheckHeapCheck();
1600#endif
1601
1602 return msg.wParam;
1603}
Note: See TracBrowser for help on using the repository browser.