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

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

MdiInfoをリファクタリング

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