source: dev/branches/egtra/ab5.0/abdev/abdev/abdev.cpp@ 780

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

VC++ 2010 EE + Windows SDK 7.1 + WDK 7.1環境用にライブラリのリンクの指定の記述を追加。

File size: 50.2 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 SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
917 else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
918 mdic.lParam=(LPARAM)shfi.hIcon;
919
920 mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
921 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,reinterpret_cast<LPARAM>(&mdic)); //ウィンドウ作成
922
923 //TextEditorコントロールを設置
924 ::GetClientRect(hChild,&rect);
925 hEdit=CreateWindow("TextEditor",NULL,
926 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
927 0,0,0,0,
928 hChild,NULL,hInst,NULL);
929
930
931 //ウィンドウのID登録
932 MDIINFO *pmi = new MDIINFO();
933 MdiInfo.push_back( pmi );
934 i = MdiInfo.size()-1;
935 pmi->hwnd=hChild;
936 pmi->DocType=DocumentType;
937 DuplicateTitleCheck(str);
938 pmi->title = str;
939 pmi->FileIdentity = fileIdentity;
940 if(filepath)
941 {
942 pmi->path = filepath;
943 }
944 else
945 {
946 pmi->path = "";
947 }
948
949 pmi->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] );
950
951 pmi->pMdiTextEdit->hEdit=hEdit;
952 pmi->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
953 pmi->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,pmi);
954 pmi->pMdiTextEdit->hIcon=shfi.hIcon;
955 pmi->pMdiTextEdit->buffer=buffer;
956 pmi->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
957 pmi->pMdiTextEdit->iUnderStart=-1;
958 pmi->pMdiTextEdit->iUnderEnd=-1;
959 pmi->pMdiTextEdit->StartCaretPos.x=0;
960 pmi->pMdiTextEdit->StartCaretPos.y=0;
961 pmi->pMdiTextEdit->EndCaretPos.x=0;
962 pmi->pMdiTextEdit->EndCaretPos.y=0;
963 pmi->pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
964 pmi->pMdiTextEdit->bAutoScroll=0;
965 pmi->pMdiTextEdit->iWidth_ControlTabSpace=
966 GetControlTabSpace(i,&pmi->pMdiTextEdit->iLineNumberTextCount);
967 pmi->pMdiTextEdit->iCharCode=iCharCode;
968 pmi->pMdiTextEdit->iLfCode=iLfCode;
969 pmi->IndentStr=0;
970
971
972 int flag;
973 if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
974 else flag=0;
975 SendTextEditResizeEvent(hChild);
976
977
978 //ワードカラーをセット
979 if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(MdiInfo.size()-1);
980
981 //Docコンボボックスに追加
982 extern HWND hDocCombo;
983 if( hDocCombo )
984 {
985 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(LPARAM)str);
986 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
987 }
988
989 //タブに追加
990 pobj_MainTab->InsertItem( hChild, str, true, TabColor );
991
992 ::SetFocus(hEdit);
993 SetStatusText(NULL);
994
995 //メニュー状態を設定
996 ResetState_DocMenu();
997
998 if( DocumentType == WNDTYPE_BASIC && !projectInfo.IsOpened() ){
999 // 単体ソースコードを開いたとき
1000 extern HWND hProjectView;
1001 if( !::IsWindowVisible( hProjectView ) ){
1002 // クラスビューを表示する
1003 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
1004 ShowClassView();
1005
1006 // クラスビューを更新
1007 ResetClassTree((HTREEITEM)-1);
1008 }
1009 }
1010 UpdateWindow(hChild);
1011 return hChild;
1012}
1013void CloseDocWindow(int WndNum){
1014 int i2,i3;
1015
1016 MdiInfo[WndNum]->hwnd=0;
1017
1018 //ドキュメントコンボボックスから文字列を消去
1019 extern HWND hDocCombo;
1020 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LPARAM)MdiInfo[WndNum]->title.c_str());
1021 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
1022
1023 //タブコントロールからアイテムを消去
1024 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum]->title.c_str(), true );
1025
1026 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
1027 ////////////////////////////
1028 // テキストエディタを閉じる
1029 ////////////////////////////
1030
1031 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
1032 if(ComplementWndInfo.hWnd){
1033 //コード補完リストを破棄する
1034 DestroyWindow(ComplementWndInfo.hWnd);
1035 ComplementWndInfo.hWnd=0;
1036 }
1037
1038 HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->buffer);
1039 HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->pColorRef);
1040
1041 if(MdiInfo[WndNum]->IndentStr) HeapDefaultFree(MdiInfo[WndNum]->IndentStr);
1042
1043 //エディットコントロールを破棄
1044 DestroyWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit);
1045
1046 //Web検索ウィンドウを破棄
1047 delete MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult;
1048 MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult=0;
1049
1050 //ルーラーウィンドウを破棄
1051 delete MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler;
1052 MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler=0;
1053
1054 //アイコンを破棄
1055 if(MdiInfo[WndNum]->pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum]->pMdiTextEdit->hIcon);
1056
1057 delete MdiInfo[WndNum]->pMdiTextEdit;
1058 MdiInfo[WndNum]->pMdiTextEdit=0;
1059 }
1060 else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
1061 /////////////////////
1062 // RADツールを閉じる
1063 /////////////////////
1064
1065 for(i2=0;i2<MAX_UNDONUM;i2++){
1066 if(MdiInfo[WndNum]->MdiRadInfo->undo.Command[i2])
1067 Rad_DeleteUndoData(WndNum,i2);
1068 }
1069 DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hTools);
1070 DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hRad);
1071 SelectObject(MdiInfo[WndNum]->MdiRadInfo->hMemDC,MdiInfo[WndNum]->MdiRadInfo->hOldBitmap);
1072 DeleteDC(MdiInfo[WndNum]->MdiRadInfo->hMemDC);
1073 DeleteObject(MdiInfo[WndNum]->MdiRadInfo->hBitmap);
1074 GlobalFree(MdiInfo[WndNum]->MdiRadInfo);
1075 }
1076 else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
1077 ////////////////////////////
1078 // メニューエディタを閉じる
1079 ////////////////////////////
1080
1081 DestroyWindow(MdiInfo[WndNum]->MdiMenuInfo->hList);
1082 GlobalFree(MdiInfo[WndNum]->MdiMenuInfo);
1083 }
1084 else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
1085 ////////////////////////////
1086 // アイコンエディタを閉じる
1087 ////////////////////////////
1088
1089 for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){
1090 for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1091 if(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3])
1092 HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3]);
1093 }
1094 }
1095
1096 DeleteDC(MdiInfo[WndNum]->MdiIconEditInfo->memdc);
1097 DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hMemBmp);
1098 DestroyWindow(MdiInfo[WndNum]->MdiIconEditInfo->hMain);
1099 for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){
1100 HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[i2]);
1101 }
1102 HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo);
1103 }
1104 else
1105 {
1106 throw;
1107 }
1108
1109 delete MdiInfo[WndNum];
1110 Jenga::Common::EraseVectorItem<std::vector<MDIINFO *>>( MdiInfo, WndNum );
1111}
1112void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1113 int WndNum;
1114 WndNum=GetWndNum(hwnd);
1115 if(WndNum==-1) return;
1116
1117 int WebResultWndHeight;
1118 WebResultWndHeight=LINK_ITEM_HEIGHT;
1119 //未完成
1120 WebResultWndHeight=0;
1121
1122 int iHeightRuler;
1123 if(pobj_nv->bEditor_Ruler){
1124 //ルーラー
1125 MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->resize(
1126 0,
1127 0,
1128 cx,
1129 HEIGHT_RULER);
1130
1131 iHeightRuler=HEIGHT_RULER;
1132
1133 ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1134 }
1135 else{
1136 iHeightRuler=0;
1137
1138 ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1139 }
1140
1141 //エディットウィンドウ
1142 MoveWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit,
1143 0,
1144 iHeightRuler,
1145 cx,
1146 cy-WebResultWndHeight-iHeightRuler,
1147 1);
1148
1149 //Web検索ウィンドウ
1150 MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult->resize(
1151 0,
1152 cy-WebResultWndHeight,
1153 cx,
1154 WebResultWndHeight);
1155}
1156
1157LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1158 int i,i2;
1159 HWND hEdit;
1160
1161 switch(message){
1162 case WM_CREATE:
1163 {
1164 CREATESTRUCT *lpcs = (CREATESTRUCT *)lParam;
1165 MDICREATESTRUCT *lpmcs = (MDICREATESTRUCT *)lpcs->lpCreateParams;
1166 SendMessage(hwnd,WM_SETICON,ICON_SMALL,lpmcs->lParam);
1167
1168 break;
1169 }
1170 case WM_MDIACTIVATE:
1171 {
1172 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1173 if(MethodCheckInfo.hWnd){
1174 DestroyWindow(MethodCheckInfo.hWnd);
1175 MethodCheckInfo.hWnd=0;
1176 }
1177
1178 //以前のコード補完リストを破棄する
1179 if(ComplementWndInfo.hWnd){
1180 DestroyWindow(ComplementWndInfo.hWnd);
1181 ComplementWndInfo.hWnd=0;
1182 }
1183
1184 if(!lParam) return 0;
1185 i=GetWndNum((HWND)lParam);
1186 if(i==-1) return 0; //ウィンドウが初期状態の場合
1187
1188#ifndef THETEXT
1189 //デバッガ メニューの状態を設定
1190 pobj_Debugger->ResetCommandEnabled();
1191#endif
1192
1193 //ドキュメント セレクト コンボボックス
1194 extern HWND hDocCombo;
1195 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LPARAM)MdiInfo[i]->title.c_str());
1196 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1197
1198 //タブコントロール
1199 pobj_MainTab->MdiActiveEvent(MdiInfo[i]->title.c_str());
1200
1201 if( !projectInfo.IsOpened() ){
1202 ResetClassTree((HTREEITEM)-1);
1203 }
1204 return 0;
1205 }
1206 case WM_SETFOCUS:
1207 hEdit=GetWindow(hwnd,GW_CHILD);
1208 SetFocus(hEdit);
1209 SetStatusText(CmdMsg);
1210 ResetState_EditMenu();
1211 ResetState_ViewMenu();
1212 break;
1213 case WM_SIZE:
1214 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1215 break;
1216 case WM_CLOSE:
1217 if(!DocumentModifyCheck(hwnd)) return 0;
1218 CloseDocWindow(GetWndNum(hwnd));
1219 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1220 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1221
1222 //メニュー状態を設定
1223 ResetState_DocMenu();
1224
1225 return i;
1226 }
1227 return DefMDIChildProc(hwnd,message,wParam,lParam);
1228}
1229
1230WNDPROC oldMainFrameWndProc;
1231LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1232 char str[MAX_PATH];
1233 RECT rect;
1234 POINT pos;
1235
1236 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1237 //「最近使ったファイル」メニューコマンド
1238 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1239 OpenFileWithExtension(str);
1240 return 0;
1241 }
1242
1243 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1244 //「最近使ったプロジェクト」メニューコマンド
1245 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1246 OpenFileWithExtension(str);
1247 return 0;
1248 }
1249
1250 switch(message)
1251 {
1252#ifndef THETEXT
1253 case WM_SETCOMPILEVIEW:
1254 //コンパイラウィンドウ(埋め込み型)が表示されたとき
1255 hCompileView=(HWND)lParam;
1256 ActiveBasic::IDE::Program::mainFrame.Resized();
1257 return 0;
1258 case WM_DESTROYCOMPILEVIEW:
1259 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
1260 if((LONG_PTR)hCompileView==-1){
1261 //すぐに次のコンパイラウィンドウが起動するとき
1262 hCompileView=0;
1263 }
1264 else{
1265 //完全にコンパイラウィンドウを閉じたときはリサイズ
1266 hCompileView=0;
1267
1268 ActiveBasic::IDE::Program::mainFrame.Resized();
1269 }
1270 return 0;
1271
1272 case WM_SETDEBUGGERBASE:
1273 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
1274 pobj_Debugger->begin();
1275
1276 //BasicCompiler.exeの強制終了を考慮
1277 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
1278
1279 return 0;
1280 case WM_DESTROYDEBUGGERBASE:
1281 //BasicCompiler.exeの強制終了を考慮
1282 KillTimer(hOwner,ID_DEBUGSAFTY);
1283
1284 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
1285 pobj_Debugger->end();
1286
1287 return 0;
1288
1289 case WM_SETDEBUGGERVIEW:
1290 //デバッガウィンドウ(埋め込み型)が表示されたとき
1291 pobj_Debugger->watch_start((HWND)lParam);
1292 ActiveBasic::IDE::Program::mainFrame.Resized();
1293 return 0;
1294 case WM_DESTROYDEBUGGERVIEW:
1295 //デバッガウィンドウ(埋め込み型)が破棄されたとき
1296 pobj_Debugger->watch_quit();
1297 ActiveBasic::IDE::Program::mainFrame.Resized();
1298 return 0;
1299#endif
1300
1301
1302 case WM_MOUSEMOVE:
1303 static DWORD dwDragLever;
1304 static POINT PrevMousePos;
1305 static int start;
1306
1307 pos.x=GET_X_LPARAM(lParam);
1308 pos.y=GET_Y_LPARAM(lParam);
1309 ClientToScreen(hwnd,&pos);
1310
1311 if(dwDragLever){
1312 GetClientRect(hwnd,&rect);
1313
1314 if(dwDragLever==1){
1315 //プロジェクトビューをリサイズ中
1316 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
1317 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
1318 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
1319 }
1320 else if(dwDragLever==2){
1321 //デバッガビューをリサイズ中
1322 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
1323 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
1324 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
1325 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
1326 }
1327 else if(dwDragLever==3){
1328 //コンパイラビューをリサイズ中
1329 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
1330 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
1331 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
1332 pobj_nv->height_ClipCompileView=rect.bottom-100;
1333 }
1334 else if(dwDragLever==4){
1335 //SideWebをリサイズ中
1336 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
1337 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
1338 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
1339 }
1340
1341 ActiveBasic::IDE::Program::mainFrame.Resized();
1342 UpdateWindow(hwnd);
1343 }
1344 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1345 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1346 GetWindowRect(hProjectView,&rect);
1347 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1348 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1349 SetCursor(LoadCursor(0,IDC_SIZEWE));
1350 }
1351 }
1352#ifndef THETEXT
1353 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1354 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1355 GetWindowRect(pobj_Debugger->hwnd,&rect);
1356 if(rect.left<=pos.x&&pos.x<=rect.right&&
1357 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1358 SetCursor(LoadCursor(0,IDC_SIZENS));
1359 }
1360 }
1361 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1362 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1363 GetWindowRect(hCompileView,&rect);
1364 if(rect.left<=pos.x&&pos.x<=rect.right&&
1365 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1366 SetCursor(LoadCursor(0,IDC_SIZENS));
1367 }
1368 }
1369#endif
1370 if( pobj_SideWeb )
1371 {
1372 if(pobj_SideWeb->bShow){
1373 //SideWebとMDIクライアントの境目のサイズ変更ライン
1374 pobj_SideWeb->GetRect(&rect);
1375 ClientToScreen(hwnd,&rect);
1376 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1377 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1378 SetCursor(LoadCursor(0,IDC_SIZEWE));
1379 }
1380 }
1381 }
1382 return 0;
1383 case WM_LBUTTONDOWN:
1384 pos.x=GET_X_LPARAM(lParam);
1385 pos.y=GET_Y_LPARAM(lParam);
1386 ClientToScreen(hwnd,&pos);
1387
1388 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1389 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1390 GetWindowRect(hProjectView,&rect);
1391 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1392 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1393 SetCursor(LoadCursor(0,IDC_SIZEWE));
1394
1395 dwDragLever=1;
1396 SetCapture(hwnd);
1397
1398 PrevMousePos=pos;
1399 start=pobj_nv->width_ClipProjectView;
1400 }
1401 }
1402#ifndef THETEXT
1403 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1404 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1405 GetWindowRect(pobj_Debugger->hwnd,&rect);
1406 if(rect.left<=pos.x&&pos.x<=rect.right&&
1407 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1408 SetCursor(LoadCursor(0,IDC_SIZENS));
1409
1410 dwDragLever=2;
1411 SetCapture(hwnd);
1412
1413 PrevMousePos=pos;
1414 start=pobj_nv->height_ClipDebuggerView;
1415 }
1416 }
1417 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1418 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1419 GetWindowRect(hCompileView,&rect);
1420 if(rect.left<=pos.x&&pos.x<=rect.right&&
1421 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1422 SetCursor(LoadCursor(0,IDC_SIZENS));
1423
1424 dwDragLever=3;
1425 SetCapture(hwnd);
1426
1427 PrevMousePos=pos;
1428 start=pobj_nv->height_ClipCompileView;
1429 }
1430 }
1431#endif
1432 if( pobj_SideWeb && pobj_SideWeb->bShow){
1433 //SideWebとMDIクライアントの境目のサイズ変更ライン
1434 pobj_SideWeb->GetRect(&rect);
1435 ClientToScreen(hwnd,&rect);
1436 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1437 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1438 SetCursor(LoadCursor(0,IDC_SIZENS));
1439
1440 dwDragLever=4;
1441 SetCapture(hwnd);
1442
1443 PrevMousePos=pos;
1444 start=pobj_nv->width_WebSearchView;
1445 }
1446 }
1447 return 0;
1448 case WM_LBUTTONUP:
1449 if(dwDragLever){
1450 dwDragLever=0;
1451 ReleaseCapture();
1452 }
1453 return 0;
1454
1455
1456 case WM_SYSCOMMAND:
1457 //ウィンドウの最小化前にウィンドウ位置を保存
1458 if(wParam==SC_MINIMIZE){
1459 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
1460 else if(!IsIconic(hwnd)){
1461 pobj_nv->bWindowMax=0;
1462 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
1463 }
1464 }
1465 break; //処理をDefFrameProcへ
1466 }
1467
1468 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
1469}
1470
1471int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
1472 WNDCLASSEX wcl;
1473
1474 wcl.cbSize=sizeof(WNDCLASSEX);
1475 wcl.hInstance=hInst;
1476 wcl.lpszClassName=lpClassName;
1477 wcl.lpfnWndProc=WndProc;
1478
1479 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
1480 else wcl.style=0;
1481
1482 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
1483 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
1484
1485 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
1486 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
1487
1488 wcl.lpszMenuName=NULL;
1489 wcl.cbClsExtra=0;
1490 wcl.cbWndExtra=0;
1491 wcl.hbrBackground=hBackBrush;
1492
1493 return RegisterClassEx(&wcl);
1494}
1495
1496#ifndef AB_TEST
1497
1498int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE,LPSTR lpCmdLine,int ShowCmd){
1499#ifdef _DEBUG
1500 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
1501#endif
1502 int i,i2,IsStr;
1503 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
1504 MSG msg;
1505 HACCEL hAccel;
1506
1507 ActiveBasic::Common::EnableNX();
1508 ActiveBasic::Common::SetHeapOptions();
1509
1510 hInst=hThisInst;
1511 if(!SetupProjectEditor()) return 0;
1512
1513 HBRUSH hGrayBrush_LineNumber;
1514 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
1515
1516 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1517 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1518 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1519 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1520 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1521 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1522 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
1523 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1524 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1525 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1526 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1527 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
1528 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1529 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1530 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
1531 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
1532 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
1533
1534 //Web検索用のウィンドウクラス
1535 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1536 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1537 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1538
1539 //ルーラーのウィンドウクラス
1540 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1541
1542 //SideWebのウィンドウクラス
1543 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1544
1545 ActiveBasic::IDE::Program::Main(hThisInst);
1546
1547 //return 0;
1548
1549
1550 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
1551
1552 //メインウィンドウ
1553 RECT *prc;
1554 prc=&pobj_nv->StartupWindowRect;
1555 /*
1556 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
1557 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
1558 prc->left, prc->top,
1559 prc->right-prc->left, prc->bottom-prc->top,
1560 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
1561 */
1562
1563 //バックアップ用タイマーを設定(10秒に一回)
1564 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
1565
1566 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(LPARAM)hOwnerIcon);
1567 SetClipboardViewer(hOwner);
1568
1569 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
1570 else ShowWindow(hOwner,ShowCmd);
1571 UpdateWindow(hOwner);
1572
1573 int open_sw=0;
1574 if(lstrlen(lpCmdLine)>0){
1575 lstrcpy(dummy,lpCmdLine);
1576 for(i=0,i2=0,IsStr=0;;i++,i2++){
1577 if(dummy[i]=='\"'){
1578 if(IsStr==0) IsStr=1;
1579 else IsStr=0;
1580 i++;
1581 }
1582 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
1583 str[i2]=0;
1584 if(!(strstr(str,":")||strstr(str,"\\\\"))){
1585 lstrcpy(str2,str);
1586 GetCurrentDirectory(MAX_PATH,str);
1587 lstrcat(str,"\\");
1588 lstrcat(str,str2);
1589 }
1590 ShortPathToLongPath(str,str2);
1591 OpenFileWithExtension(str2);
1592 open_sw=1;
1593 if(dummy[i]=='\0') break;
1594 i2=-1;
1595 continue;
1596 }
1597 str[i2]=dummy[i];
1598 }
1599 }
1600
1601 BOOL bRestore=0;
1602
1603
1604 {
1605 //自動バックアップ及び復元機能
1606
1607 //必要であれば復元
1608 bRestore=restore();
1609 }
1610
1611
1612#ifdef THETEXT
1613 if(open_sw==0&&bRestore==0){
1614 //ファイルが開かれなかったとき
1615 NewTextEditWindow(NULL,WNDTYPE_TEXT);
1616 }
1617#endif
1618
1619
1620 while(GetMessage(&msg,NULL,0,0)){
1621
1622 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
1623 if( projectInfo.IsOpened() ){
1624 for(i=0,i2=0;i<MdiInfo.size();i++){
1625 if(MdiInfo[i]->hwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){
1626 if(IsDialogMessage(MdiInfo[i]->MdiRadInfo->hProp_Dlg,&msg)) i2=1;
1627 }
1628 }
1629 if(i2==0){
1630 if(!TranslateMDISysAccel(hClient,&msg)){
1631 TranslateMessage(&msg);
1632 DispatchMessage(&msg);
1633 }
1634 }
1635 }
1636 else{
1637 if(!TranslateMDISysAccel(hClient,&msg)){
1638 TranslateMessage(&msg);
1639 DispatchMessage(&msg);
1640 }
1641 }
1642 }
1643 }
1644
1645 DeleteObject(hGrayBrush_LineNumber);
1646
1647#if defined HeapAlloc
1648 CheckHeapCheck();
1649#endif
1650
1651 return static_cast<int>(msg.wParam);
1652}
1653
1654#endif
Note: See TracBrowser for help on using the repository browser.