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

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

MDIINFO構造体をリファクタリング。

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