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

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

いくつかのメニューをMainFrameに実装しなおした

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