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

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

・WindowInfoクラスをリファクタリング
・MdiInfoを単純配列からvectorに変更した。

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