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

Last change on this file since 705 was 705, checked in by イグトランス (egtra), 16 years ago

ファイルハンドルが解放されず困ることがあるのでCHandleへ入れた。

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