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

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

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

File size: 55.5 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 int i,i2,WndNum;
1327 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],*pTemp;
1328 HWND hChild;
1329 RECT rect;
1330 POINT pos;
1331 HDROP hDrop;
1332
1333 static COLORREF colorUser=RGB(255,255,255);
1334
1335 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1336 //「最近使ったファイル」メニューコマンド
1337 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1338 OpenFileWithExtension(str);
1339 return 0;
1340 }
1341
1342 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1343 //「最近使ったプロジェクト」メニューコマンド
1344 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1345 OpenFileWithExtension(str);
1346 return 0;
1347 }
1348
1349 switch(message)
1350 {
1351 case WM_COMMAND:
1352 switch(LOWORD(wParam)){
1353
1354
1355 ////////////////////////////////////////////////////
1356 // メイン タブ コントロールのサブメニューコマンド
1357 ////////////////////////////////////////////////////
1358
1359
1360 case IDM_USER_COLOR:
1361 {
1362 CHOOSECOLOR cc;
1363 COLORREF CusColors[16]={
1364 RGB(255,255,255),
1365 RGB(0,0,0),
1366 RGB(128,128,128),
1367 RGB(192,192,192),
1368 RGB(128,0,0),
1369 RGB(255,0,0),
1370 RGB(128,128,0),
1371 RGB(255,255,0),
1372 RGB(0,128,0),
1373 RGB(0,255,0),
1374 RGB(0,128,128),
1375 RGB(0,255,255),
1376 RGB(0,0,128),
1377 RGB(0,0,255),
1378 RGB(128,0,128),
1379 RGB(255,0,255)};
1380 cc.lStructSize=sizeof(CHOOSECOLOR);
1381 cc.hwndOwner=hwnd;
1382 cc.rgbResult=colorUser;
1383 cc.lpCustColors=CusColors;
1384 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1385 if(!ChooseColor(&cc)){
1386 return 0;
1387 }
1388 colorUser=cc.rgbResult;
1389 }
1390 case IDM_GRAY:
1391 case IDM_WHITE:
1392 case IDM_RED:
1393 case IDM_GREEN:
1394 case IDM_BLUE:
1395 case IDM_YELLOW:
1396 hChild=GetWindow(hClient,GW_CHILD);
1397 WndNum=GetWndNum(hChild);
1398
1399 TC_ITEM tcItem;
1400 tcItem.mask=TCIF_PARAM;
1401 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1402 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1403 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1404 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1405 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1406 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1407 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
1408 TabCtrl_SetItem(pobj_MainTab->hTab,
1409 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1410 &tcItem);
1411 InvalidateRect(pobj_MainTab->hTab,NULL,0);
1412 return 0;
1413
1414
1415
1416 //////////////////////////////////
1417 // SideWeb
1418 //////////////////////////////////
1419
1420 case IDC_CLIP:
1421 pobj_SideWeb->bShow=0;
1422 ResizeOwnerWnd();
1423 return 0;
1424 }
1425 break;
1426 case WM_DROPFILES:
1427 hDrop=(HDROP)wParam;
1428
1429 i2=DragQueryFile(hDrop,-1,0,0);
1430 for(i=0;i<i2;i++){
1431 DragQueryFile(hDrop,i,str,MAX_PATH);
1432 OpenFileWithExtension(str);
1433 }
1434 DragFinish(hDrop);
1435 return 0;
1436 case WM_SHOWERROR:
1437 //エラー部分を反転表示
1438 DWORD AccBytes;
1439 HANDLE fh;
1440 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
1441 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
1442 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
1443 CloseHandle(fh);
1444 temporary[AccBytes]=0;
1445 hChild=GetWindow(hClient,GW_CHILD);
1446 while(hChild){
1447 WndNum=GetWndNum(hChild);
1448 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1449 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
1450 }
1451 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
1452 }
1453 if(!hChild){
1454 hChild=OpenFileWithExtension(temporary);
1455 WndNum=GetWndNum(hChild);
1456 }
1457
1458 if(WndNum==-1) return 0;
1459
1460 //ウィンドウを最前面に表示
1461 BringWindowToTop(hChild);
1462 UpdateWindow(hChild);
1463
1464 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
1465
1466 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
1467 for(i=0,i2=0;;i++){
1468 if(i2>=(int)wParam) break;
1469 if(pTemp[i]=='\0') break;
1470 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
1471 i++;
1472 i2++;
1473 }
1474 }
1475 pos.x=i;
1476
1477 //行の終端インデックスを取得
1478 for(;;i++){
1479 if(pTemp[i]=='\0') break;
1480 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
1481 }
1482 pos.y=i;
1483
1484 //行を選択する
1485 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
1486
1487 return 0;
1488
1489#ifndef THETEXT
1490 case WM_SETCOMPILEVIEW:
1491 //コンパイラウィンドウ(埋め込み型)が表示されたとき
1492 hCompileView=(HWND)lParam;
1493 ResizeOwnerWnd();
1494 return 0;
1495 case WM_DESTROYCOMPILEVIEW:
1496 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
1497 if((int)hCompileView==-1){
1498 //すぐに次のコンパイラウィンドウが起動するとき
1499 hCompileView=0;
1500 }
1501 else{
1502 //完全にコンパイラウィンドウを閉じたときはリサイズ
1503 hCompileView=0;
1504
1505 ResizeOwnerWnd();
1506 }
1507 return 0;
1508
1509 case WM_SETDEBUGGERBASE:
1510 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
1511 pobj_Debugger->begin();
1512
1513 //BasicCompiler.exeの強制終了を考慮
1514 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
1515
1516 return 0;
1517 case WM_DESTROYDEBUGGERBASE:
1518 //BasicCompiler.exeの強制終了を考慮
1519 KillTimer(hOwner,ID_DEBUGSAFTY);
1520
1521 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
1522 pobj_Debugger->end();
1523
1524 return 0;
1525
1526 case WM_SETDEBUGGERVIEW:
1527 //デバッガウィンドウ(埋め込み型)が表示されたとき
1528 pobj_Debugger->watch_start((HWND)lParam);
1529 ResizeOwnerWnd();
1530 return 0;
1531 case WM_DESTROYDEBUGGERVIEW:
1532 //デバッガウィンドウ(埋め込み型)が破棄されたとき
1533 pobj_Debugger->watch_quit();
1534 ResizeOwnerWnd();
1535 return 0;
1536#endif
1537
1538 case WM_SIZE:
1539 ResizeOwnerWnd();
1540 return 0;
1541
1542
1543 case WM_MOUSEMOVE:
1544 static DWORD dwDragLever;
1545 static POINT PrevMousePos;
1546 static int start;
1547
1548 pos.x=(long)(short)LOWORD(lParam);
1549 pos.y=(long)(short)HIWORD(lParam);
1550 ClientToScreen(hwnd,&pos);
1551
1552 if(dwDragLever){
1553 GetClientRect(hwnd,&rect);
1554
1555 if(dwDragLever==1){
1556 //プロジェクトビューをリサイズ中
1557 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
1558 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
1559 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
1560 }
1561 else if(dwDragLever==2){
1562 //デバッガビューをリサイズ中
1563 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
1564 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
1565 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
1566 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
1567 }
1568 else if(dwDragLever==3){
1569 //コンパイラビューをリサイズ中
1570 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
1571 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
1572 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
1573 pobj_nv->height_ClipCompileView=rect.bottom-100;
1574 }
1575 else if(dwDragLever==4){
1576 //SideWebをリサイズ中
1577 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
1578 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
1579 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
1580 }
1581
1582 ResizeOwnerWnd();
1583 UpdateWindow(hwnd);
1584 }
1585 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1586 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1587 GetWindowRect(hProjectView,&rect);
1588 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1589 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1590 SetCursor(LoadCursor(0,IDC_SIZEWE));
1591 }
1592 }
1593#ifndef THETEXT
1594 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1595 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1596 GetWindowRect(pobj_Debugger->hwnd,&rect);
1597 if(rect.left<=pos.x&&pos.x<=rect.right&&
1598 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1599 SetCursor(LoadCursor(0,IDC_SIZENS));
1600 }
1601 }
1602 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1603 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1604 GetWindowRect(hCompileView,&rect);
1605 if(rect.left<=pos.x&&pos.x<=rect.right&&
1606 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1607 SetCursor(LoadCursor(0,IDC_SIZENS));
1608 }
1609 }
1610#endif
1611 if( pobj_SideWeb )
1612 {
1613 if(pobj_SideWeb->bShow){
1614 //SideWebとMDIクライアントの境目のサイズ変更ライン
1615 pobj_SideWeb->GetRect(&rect);
1616 ClientToScreen(hwnd,&rect);
1617 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1618 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1619 SetCursor(LoadCursor(0,IDC_SIZEWE));
1620 }
1621 }
1622 }
1623 return 0;
1624 case WM_LBUTTONDOWN:
1625 pos.x=LOWORD(lParam);
1626 pos.y=HIWORD(lParam);
1627 ClientToScreen(hwnd,&pos);
1628
1629 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
1630 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
1631 GetWindowRect(hProjectView,&rect);
1632 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1633 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
1634 SetCursor(LoadCursor(0,IDC_SIZEWE));
1635
1636 dwDragLever=1;
1637 SetCapture(hwnd);
1638
1639 PrevMousePos=pos;
1640 start=pobj_nv->width_ClipProjectView;
1641 }
1642 }
1643#ifndef THETEXT
1644 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
1645 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
1646 GetWindowRect(pobj_Debugger->hwnd,&rect);
1647 if(rect.left<=pos.x&&pos.x<=rect.right&&
1648 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1649 SetCursor(LoadCursor(0,IDC_SIZENS));
1650
1651 dwDragLever=2;
1652 SetCapture(hwnd);
1653
1654 PrevMousePos=pos;
1655 start=pobj_nv->height_ClipDebuggerView;
1656 }
1657 }
1658 if(bClipCompileView&&IsWindowVisible(hCompileView)){
1659 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
1660 GetWindowRect(hCompileView,&rect);
1661 if(rect.left<=pos.x&&pos.x<=rect.right&&
1662 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
1663 SetCursor(LoadCursor(0,IDC_SIZENS));
1664
1665 dwDragLever=3;
1666 SetCapture(hwnd);
1667
1668 PrevMousePos=pos;
1669 start=pobj_nv->height_ClipCompileView;
1670 }
1671 }
1672#endif
1673 if( pobj_SideWeb && pobj_SideWeb->bShow){
1674 //SideWebとMDIクライアントの境目のサイズ変更ライン
1675 pobj_SideWeb->GetRect(&rect);
1676 ClientToScreen(hwnd,&rect);
1677 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
1678 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
1679 SetCursor(LoadCursor(0,IDC_SIZENS));
1680
1681 dwDragLever=4;
1682 SetCapture(hwnd);
1683
1684 PrevMousePos=pos;
1685 start=pobj_nv->width_WebSearchView;
1686 }
1687 }
1688 return 0;
1689 case WM_LBUTTONUP:
1690 if(dwDragLever){
1691 dwDragLever=0;
1692 ReleaseCapture();
1693 }
1694 return 0;
1695
1696
1697 case WM_SYSCOMMAND:
1698 //ウィンドウの最小化前にウィンドウ位置を保存
1699 if(wParam==SC_MINIMIZE){
1700 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
1701 else if(!IsIconic(hwnd)){
1702 pobj_nv->bWindowMax=0;
1703 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
1704 }
1705 }
1706 break; //処理をDefFrameProcへ
1707 }
1708
1709 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
1710}
1711
1712int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
1713 WNDCLASSEX wcl;
1714
1715 wcl.cbSize=sizeof(WNDCLASSEX);
1716 wcl.hInstance=hInst;
1717 wcl.lpszClassName=lpClassName;
1718 wcl.lpfnWndProc=WndProc;
1719
1720 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
1721 else wcl.style=0;
1722
1723 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
1724 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
1725
1726 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
1727 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
1728
1729 wcl.lpszMenuName=NULL;
1730 wcl.cbClsExtra=0;
1731 wcl.cbWndExtra=0;
1732 wcl.hbrBackground=hBackBrush;
1733
1734 return RegisterClassEx(&wcl);
1735}
1736int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
1737 int i,i2,IsStr;
1738 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
1739 MSG msg;
1740 HACCEL hAccel;
1741
1742 hInst=hThisInst;
1743 if(!SetupProjectEditor()) return 0;
1744
1745 HBRUSH hGrayBrush_LineNumber;
1746 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
1747
1748 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1749 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1750 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1751 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1752 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1753 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1754 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
1755 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1756 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
1757 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1758 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1759 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
1760 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1761 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
1762 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
1763 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
1764 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
1765
1766 //Web検索用のウィンドウクラス
1767 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1768 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1769 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1770
1771 //ルーラーのウィンドウクラス
1772 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1773
1774 //SideWebのウィンドウクラス
1775 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
1776
1777 ActiveBasic::IDE::Program::Main();
1778
1779 //return 0;
1780
1781
1782 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
1783
1784 //メインウィンドウ
1785 RECT *prc;
1786 prc=&pobj_nv->StartupWindowRect;
1787 /*
1788 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
1789 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
1790 prc->left, prc->top,
1791 prc->right-prc->left, prc->bottom-prc->top,
1792 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
1793 */
1794
1795 //バックアップ用タイマーを設定(10秒に一回)
1796 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
1797
1798 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
1799 SetClipboardViewer(hOwner);
1800
1801 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
1802 else ShowWindow(hOwner,ShowCmd);
1803 UpdateWindow(hOwner);
1804
1805 int open_sw=0;
1806 if(lstrlen(lpCmdLine)>0){
1807 lstrcpy(dummy,lpCmdLine);
1808 for(i=0,i2=0,IsStr=0;;i++,i2++){
1809 if(dummy[i]=='\"'){
1810 if(IsStr==0) IsStr=1;
1811 else IsStr=0;
1812 i++;
1813 }
1814 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
1815 str[i2]=0;
1816 if(!(strstr(str,":")||strstr(str,"\\\\"))){
1817 lstrcpy(str2,str);
1818 GetCurrentDirectory(MAX_PATH,str);
1819 lstrcat(str,"\\");
1820 lstrcat(str,str2);
1821 }
1822 ShortPathToLongPath(str,str2);
1823 OpenFileWithExtension(str2);
1824 open_sw=1;
1825 if(dummy[i]=='\0') break;
1826 i2=-1;
1827 continue;
1828 }
1829 str[i2]=dummy[i];
1830 }
1831 }
1832
1833 BOOL bRestore=0;
1834
1835
1836 {
1837 //自動バックアップ及び復元機能
1838
1839 //必要であれば復元
1840 bRestore=restore();
1841 }
1842
1843
1844#ifdef THETEXT
1845 if(open_sw==0&&bRestore==0){
1846 //ファイルが開かれなかったとき
1847 NewTextEditWindow(NULL,WNDTYPE_TEXT);
1848 }
1849#endif
1850
1851
1852 while(GetMessage(&msg,NULL,0,0)){
1853
1854 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
1855 if(ProjectInfo.name[0]){
1856 for(i=0,i2=0;i<MAX_WNDNUM;i++){
1857 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
1858 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
1859 }
1860 }
1861 if(i2==0){
1862 if(!TranslateMDISysAccel(hClient,&msg)){
1863 TranslateMessage(&msg);
1864 DispatchMessage(&msg);
1865 }
1866 }
1867 }
1868 else{
1869 if(!TranslateMDISysAccel(hClient,&msg)){
1870 TranslateMessage(&msg);
1871 DispatchMessage(&msg);
1872 }
1873 }
1874 }
1875 }
1876
1877 DeleteObject(hGrayBrush_LineNumber);
1878
1879#if defined HeapAlloc
1880 CheckHeapCheck();
1881#endif
1882
1883 return msg.wParam;
1884}
Note: See TracBrowser for help on using the repository browser.