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

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

svn:eol-styleとsvn:mime-type(文字コード指定含む)の設定

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