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

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

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

File size: 77.1 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 CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)
92{
93 std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;
94 STARTUPINFO si;
95 PROCESS_INFORMATION pi;
96 memset(&si,0,sizeof(STARTUPINFO));
97 si.cb=sizeof(STARTUPINFO);
98 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
99 si.wShowWindow = SW_HIDE;
100 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
101 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
102 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
103
104 char args[8192];
105 lstrcpy( args, argsStr.c_str() );
106
107 CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
108}
109
110void ToBigChar(char str[]){
111 int i;
112 for(i=0;TRUE;i++){
113 str[i]=(char)toupper((int)str[i]);
114 if(str[i]=='\0') break;
115 }
116}
117int GetWndNum(HWND hChild){
118 int i;
119 if(!IsWindow(hChild)) return -1;
120 for(i=0;i<MAX_WNDNUM;i++){
121 if(hChild==MdiInfo[i].hwnd) break;
122 }
123 if(i==MAX_WNDNUM) i=-1;
124 return i;
125}
126int GetNowWndNum(void){
127 return GetWndNum(GetWindow(hClient,GW_CHILD));
128}
129int GetFileNum(int WndNum){
130 if( !ProjectInfo.name[0] ){
131 return -1;
132 }
133
134 int i;
135 char temporary[MAX_PATH];
136 for(i=0;i<ProjectInfo.pobj_DBFileInfo->iNum;i++){
137
138 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
139
140 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) return i;
141 }
142 return -1;
143}
144
145void SendTextEditResizeEvent(HWND hwnd){
146 RECT rect;
147 GetClientRect(hwnd,&rect);
148 ResizeTextEditWnd(hwnd,rect.right,rect.bottom);
149}
150
151void RedrawAllWindow(void){
152 HWND hChild;
153 hChild=GetWindow(hClient,GW_CHILD);
154 if(hChild) ResetTextEditFont(GetWindow(hChild,GW_CHILD));
155 while(hChild){
156 int WndNum;
157 WndNum=GetWndNum(hChild);
158 if(WndNum==-1) break;
159
160 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
161 //コントロールタブスペースの幅と行番号の文字数を更新
162 MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace=
163 GetControlTabSpace(WndNum,&MdiInfo[WndNum].pMdiTextEdit->iLineNumberTextCount);
164
165 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
166 InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
167
168 SendTextEditResizeEvent(MdiInfo[WndNum].hwnd);
169 }
170 else{
171 HWND hEdit;
172 hEdit=GetWindow(hChild,GW_CHILD);
173 InvalidateRect(hEdit,NULL,0);
174 }
175
176 hChild=GetWindow(hChild,GW_HWNDNEXT);
177 }
178}
179
180int DocumentModifyCheck(HWND hChild){ //終了保存確認
181 int BoxID,WndNum,sw;
182 char str[MAX_PATH],temporary[MAX_PATH];
183
184 WndNum=GetWndNum(hChild);
185 sw=0;
186 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
187 if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ) sw=1;
188 }
189 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
190 if(MdiInfo[WndNum].MdiIconEditInfo->bModify) sw=1;
191 }
192
193 if(sw){
194 GetWindowText(hChild,temporary,MAX_PATH);
195
196 //"\"%s\" ファイルは変更されています。保存しますか?"
197 sprintf(str,STRING_MODIFYCHECK_FILE,temporary);
198 BoxID=MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNOCANCEL|MB_ICONINFORMATION);
199
200 if(BoxID==IDYES){
201 if(!SaveDocument(hChild,NULL)) return 0;
202 }
203 else if(BoxID==IDCANCEL) return 0;
204 }
205 return 1;
206}
207void SetStatusText(char *MenuText){
208 //////////////////////////
209 // ステータスバーの更新
210 //////////////////////////
211
212 int WndNum;
213 double BufSize;
214 char temporary[255];
215 HWND hChild;
216
217 if(MenuText){
218 SendMessage(hStatusBar,SB_SETTEXT,0,(long)MenuText);
219 if((char *)MenuText!=(char *)CmdMsg) CmdMsg[0]=0;
220 }
221
222 hChild=GetWindow(hClient,GW_CHILD);
223 WndNum=GetWndNum(hChild);
224 if(WndNum==-1) return;
225 hChild=GetWindow(hChild,GW_CHILD);
226 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
227 //////////////////////
228 // テキストエディタ
229 //////////////////////
230
231 //サイズ
232 BufSize=(double)lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer);
233 if(IsWindow(hChild)){
234 if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
235 else if(BufSize<1024*1024){
236 BufSize/=1024;
237 sprintf(temporary,"%s: %.2fKB",STRING_SIZE,BufSize);
238 }
239 else{
240 BufSize/=1024*1024;
241 sprintf(temporary,"%s: %.2fMB",STRING_SIZE,BufSize);
242 }
243 }
244 else temporary[0]=0;
245 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
246
247 //行と桁
248 if(IsWindow(hChild)){
249#if defined(JPN)
250 //日本語
251 sprintf(temporary,"%d 行、%d 列",
252 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
253 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
254#else
255 //英語
256 sprintf(temporary,"%d : %d",
257 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
258 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
259#endif
260 }
261 else temporary[0]=0;
262 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
263
264 //文字コード
265 nkf.GetCharCodeName(MdiInfo[WndNum].pMdiTextEdit->iCharCode,temporary);
266 SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
267
268 //文字コード
269 nkf.GetLfCodeName(MdiInfo[WndNum].pMdiTextEdit->iLfCode,temporary);
270 SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
271 }
272 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
273 ////////////////
274 // RADツール
275 ////////////////
276
277 int WndInfoNum;
278 WndInfoNum=GetWndInfoNum(MdiInfo[WndNum].path);
279 if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
280 sprintf(temporary,"pos %d, %d",
281 RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
282 RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
283 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
284 sprintf(temporary,"size %d * %d",
285 RadInfo.DraggingRect[0].right-RadInfo.DraggingRect[0].left,
286 RadInfo.DraggingRect[0].bottom-RadInfo.DraggingRect[0].top);
287 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
288 }
289 else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
290 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
291 sprintf(temporary,"size %d * %d",ProjectInfo.pWindowInfo[WndInfoNum].size.cx,ProjectInfo.pWindowInfo[WndInfoNum].size.cy);
292 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
293 }
294 else{
295 sprintf(temporary,"pos %d, %d",
296 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x,
297 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y);
298 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
299 sprintf(temporary,"size %d * %d",
300 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cx,
301 ProjectInfo.pWindowInfo[WndInfoNum].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].size.cy);
302 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
303 }
304 }
305 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
306 //////////////////
307 // MENU エディタ
308 //////////////////
309
310 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
311 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
312 }
313 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
314 //////////////////
315 // ICON エディタ
316 //////////////////
317
318 SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"");
319 SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
320 }
321}
322void ResetState_UndoMenu(void){ //「元に戻す、やり直し」のメニュー表示制御
323 int i,i2;
324 HWND hChild;
325
326 hChild=GetWindow(hClient,GW_CHILD);
327 i=GetWndNum(hChild);
328 if(i==-1){
329 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
330 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
331 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
332 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
333 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
334 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
335 }
336 else if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
337 i2=MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos-1;
338 if(i2==-1) i2=MAX_UNDONUM-1;
339 if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[i2]){
340 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
341 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
342 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
343 }
344 else{
345 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
346 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
347 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
348 }
349 if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos]){
350 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
351 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
352 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
353 }
354 else{
355 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
356 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
357 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
358 }
359 }
360 else if(MdiInfo[i].DocType==WNDTYPE_RAD){
361 i2=MdiInfo[i].MdiRadInfo->undo.NowPos-1;
362 if(i2==-1) i2=MAX_UNDONUM-1;
363 if(!MdiInfo[i].MdiRadInfo->undo.Command[i2]){
364 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
365 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
366 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
367 }
368 else{
369 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
370 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
371 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
372 }
373 if(!MdiInfo[i].MdiRadInfo->undo.Command[MdiInfo[i].MdiRadInfo->undo.NowPos]){
374 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
375 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
376 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
377 }
378 else{
379 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
380 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
381 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
382 }
383 }
384 else if(MdiInfo[i].DocType==WNDTYPE_MENU){
385 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
386 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
387 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
388
389 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
390 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
391 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
392 }
393 else if(MdiInfo[i].DocType==WNDTYPE_ICONEDIT){
394 i2=MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos-1;
395 if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
396 if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[i2]){
397 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
398 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
399 pobj_StandardToolbar->EnableItem(IDM_UNDO,0);
400 }
401 else{
402 pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
403 EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_ENABLED);
404 pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
405 }
406 if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos]){
407 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
408 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
409 pobj_StandardToolbar->EnableItem(IDM_REDO,0);
410 }
411 else{
412 pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
413 EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_ENABLED);
414 pobj_StandardToolbar->EnableItem(IDM_REDO,1);
415 }
416 }
417}
418void ResetState_ConvMenu(BOOL bEnable){
419 int MenuMsg;
420 if(bEnable)
421 MenuMsg=MF_BYCOMMAND|MF_ENABLED;
422 else MenuMsg=MF_BYCOMMAND|MF_GRAYED;
423
424 pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_SMALL,MenuMsg);
425 pobj_MainMenu->EnableItem(IDM_CONV_ALPHA_BIG,MenuMsg);
426 pobj_MainMenu->EnableItem(IDM_CONV_HALF,MenuMsg);
427 pobj_MainMenu->EnableItem(IDM_CONV_MULTI,MenuMsg);
428 pobj_MainMenu->EnableItem(IDM_CONV_KATAKANA,MenuMsg);
429 pobj_MainMenu->EnableItem(IDM_CONV_HIRAGANA,MenuMsg);
430 pobj_MainMenu->EnableItem(IDM_CONV_SPACE,MenuMsg);
431 pobj_MainMenu->EnableItem(IDM_CONV_TAB,MenuMsg);
432#ifdef THETEXT
433 pobj_MainMenu->EnableItem(IDM_CONV_HASRETURN,MenuMsg);
434 pobj_MainMenu->EnableItem(IDM_CONV_QUOTE,MenuMsg);
435#else
436 pobj_MainMenu->EnableItem(IDM_CODEFORMAT,MenuMsg);
437#endif
438}
439void ResetState_PrintMenu(void);
440void ResetState_EditMenu(void){ //編集メニューの表示制御
441 HWND hChild;
442 int WndNum;
443 long MenuMsg,ToolbarMsg;
444
445 //印刷メニューの状態を設定
446 ResetState_PrintMenu();
447
448 hChild=GetWindow(hClient,GW_CHILD);
449 if(!IsWindow(hChild)){
450 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
451 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
452#ifdef THETEXT
453 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
454#endif
455 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
456
457 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
458 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
459 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
460 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
461 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
462 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
463 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
464 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
465 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
466 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
467 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
468
469 ResetState_ConvMenu(0);
470
471 ResetState_UndoMenu();
472 return;
473 }
474 WndNum=GetWndNum(hChild);
475 if(WndNum==-1) return;
476 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
477 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
478 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
479 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_ENABLED);
480#ifdef THETEXT
481 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_ENABLED);
482#endif
483 pobj_StandardToolbar->EnableItem(IDM_FIND,1);
484
485 BOOL bConvEnable;
486 hChild=GetWindow(hChild,GW_CHILD);
487 if(!(
488 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.x&&
489 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.y
490 )){
491 MenuMsg=MF_BYCOMMAND|MF_ENABLED;
492 ToolbarMsg=1;
493
494 bConvEnable=1;
495 }
496 else{
497 MenuMsg=MF_BYCOMMAND|MF_GRAYED;
498 ToolbarMsg=0;
499
500 bConvEnable=0;
501 }
502 pobj_MainMenu->EnableItem(IDM_CUT,MenuMsg);
503 pobj_MainMenu->EnableItem(IDM_COPY,MenuMsg);
504 pobj_MainMenu->EnableItem(IDM_DELETE,MenuMsg);
505 EnableMenuItem(hEditMenu,IDM_CUT,MenuMsg);
506 EnableMenuItem(hEditMenu,IDM_COPY,MenuMsg);
507 EnableMenuItem(hEditMenu,IDM_DELETE,MenuMsg);
508 pobj_StandardToolbar->EnableItem(IDM_CUT,ToolbarMsg);
509 pobj_StandardToolbar->EnableItem(IDM_COPY,ToolbarMsg);
510
511 if(IsClipboardFormatAvailable(CF_TEXT)){
512 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
513 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
514 }
515 else{
516 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
517 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
518 }
519
520
521 //変換コマンド
522 ResetState_ConvMenu(bConvEnable);
523 }
524 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
525 //検索、置換、文字カウントを無効化
526 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
527 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
528#ifdef THETEXT
529 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
530#endif
531 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
532
533 if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
534 //切り取り、コピー、削除を有効化
535 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
536 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
537 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
538 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
539 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
540 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
541 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
542 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
543 }
544 else{
545 //切り取り、コピー、削除を無効化
546 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
547 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
548 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
549 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
550 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
551 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
552 pobj_StandardToolbar->EnableItem(IDM_CUT,1);
553 pobj_StandardToolbar->EnableItem(IDM_COPY,1);
554 }
555
556 //すべて選択を有効化
557 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
558
559 if(IsClipboardFormatAvailable(dwRadClipboardID)){
560 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
561 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
562 }
563 else{
564 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
565 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
566 }
567
568 ResetState_ConvMenu(0);
569 }
570 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
571 //検索、置換、文字カウントを無効化
572 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
573 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
574#ifdef THETEXT
575 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
576#endif
577 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
578
579 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
580 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
581 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
582 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
583 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
584 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
585 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
586 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_GRAYED);
587 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
588 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
589 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
590
591 ResetState_ConvMenu(0);
592 }
593 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
594 //検索、置換、文字カウントを無効化
595 pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
596 pobj_MainMenu->EnableItem(IDM_PERMUTATION,MF_BYCOMMAND|MF_GRAYED);
597#ifdef THETEXT
598 pobj_MainMenu->EnableItem(IDM_STRING_COUNT,MF_BYCOMMAND|MF_GRAYED);
599#endif
600 pobj_StandardToolbar->EnableItem(IDM_FIND,0);
601
602 if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==0){
603 //切り取り、コピー、削除を無効化
604 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
605 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
606 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
607 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
608 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_GRAYED);
609 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_GRAYED);
610 pobj_StandardToolbar->EnableItem(IDM_CUT,0);
611 pobj_StandardToolbar->EnableItem(IDM_COPY,0);
612 }
613 else{
614 //切り取り、コピー、削除を有効化
615 pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
616 pobj_MainMenu->EnableItem(IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
617 pobj_MainMenu->EnableItem(IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
618 EnableMenuItem(hEditMenu,IDM_CUT,MF_BYCOMMAND|MF_ENABLED);
619 EnableMenuItem(hEditMenu,IDM_COPY,MF_BYCOMMAND|MF_ENABLED);
620 EnableMenuItem(hEditMenu,IDM_DELETE,MF_BYCOMMAND|MF_ENABLED);
621 pobj_StandardToolbar->EnableItem(IDM_CUT,1);
622 pobj_StandardToolbar->EnableItem(IDM_COPY,1);
623 }
624
625 //すべて選択を有効化
626 pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
627
628 if(IsClipboardFormatAvailable(CF_BITMAP)){
629 //貼り付けを有効化
630 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_ENABLED);
631 pobj_StandardToolbar->EnableItem(IDM_PASTE,1);
632 }
633 else{
634 //貼り付けを無効化
635 pobj_MainMenu->EnableItem(IDM_PASTE,MF_BYCOMMAND|MF_GRAYED);
636 pobj_StandardToolbar->EnableItem(IDM_PASTE,0);
637 }
638
639 ResetState_ConvMenu(0);
640 }
641
642 ResetState_UndoMenu();
643}
644void ResetState_ViewMenu(void){
645 // 表示 メニューの状態を設定
646
647
648#ifdef THETEXT
649 pobj_MainMenu->CheckMenu(IDM_RIGHT_TURN,pobj_nv->bRightTurn);
650#endif
651}
652void ResetState_PrintMenu(void){ //編集メニューの表示制御
653 HWND hChild;
654 int WndNum;
655 hChild=GetWindow(hClient,GW_CHILD);
656 if(!IsWindow(hChild)){
657 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
658
659 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
660
661 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
662 return;
663 }
664 WndNum=GetWndNum(hChild);
665 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
666 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
667
668 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_ENABLED);
669
670 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_ENABLED);
671 }
672 else{
673 pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_GRAYED);
674
675 pobj_MainMenu->EnableItem(IDM_PREVIEW,MF_BYCOMMAND|MF_GRAYED);
676
677 pobj_MainMenu->EnableItem(IDM_PRINTOUT,MF_BYCOMMAND|MF_GRAYED);
678 }
679}
680void ResetState_DocMenu(void){
681 long MenuMsg,ToolbarMsg;
682 HWND hChild;
683
684 hChild=GetWindow(hClient,GW_CHILD);
685
686
687 /////////////////////////////////////////
688 // 共通ドキュメント メニューの状態を設定
689 /////////////////////////////////////////
690
691 if(!IsWindow(hChild)){
692 MenuMsg=MF_GRAYED;
693 ToolbarMsg=0;
694 }
695 else{
696 MenuMsg=MF_ENABLED;
697 ToolbarMsg=1;
698 }
699 pobj_MainMenu->EnableItem(IDM_CLOSE,MenuMsg);
700 pobj_MainMenu->EnableItem(IDM_SAVE,MenuMsg);
701 pobj_MainMenu->EnableItem(IDM_NEWSAVE,MenuMsg);
702 pobj_MainMenu->EnableItem(IDM_CODE_SAVE,MenuMsg);
703 pobj_MainMenu->EnableItem(IDM_ALLSAVE,MenuMsg);
704
705 pobj_StandardToolbar->EnableItem(IDM_CLOSE,ToolbarMsg);
706 pobj_StandardToolbar->EnableItem(IDM_SAVE,ToolbarMsg);
707 pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,ToolbarMsg);
708
709
710#ifndef THETEXT
711 /////////////////////////////////////////////////
712 // プロジェクトドキュメント メニューの状態を設定
713 /////////////////////////////////////////////////
714
715 if(ProjectInfo.name[0]){
716 pobj_MainMenu->EnableItem(IDM_ALLSAVE,MF_ENABLED);
717 pobj_StandardToolbar->EnableItem(IDM_ALLSAVE,1);
718
719 MenuMsg=MF_ENABLED;
720 ToolbarMsg=TBSTATE_ENABLED;
721 }
722 else{
723 MenuMsg=MF_GRAYED;
724 ToolbarMsg=TBSTATE_INDETERMINATE;
725 }
726 pobj_MainMenu->EnableItem(IDM_PROJECT_SAVE,MenuMsg);
727 pobj_MainMenu->EnableItem(IDM_PROJECT_CLOSE,MenuMsg);
728 pobj_MainMenu->EnableItem(IDM_PROJECT_FOLDER_OPEN,MenuMsg);
729 pobj_MainMenu->EnableItem(IDM_PROJECT_OPTION,MenuMsg);
730
731 //デバッガ メニューの状態を設定
732 pobj_Debugger->ResetCommandEnabled();
733#endif
734
735
736 //編集メニューの状態を設定
737 ResetState_EditMenu();
738
739 //表示メニューの状態を設定
740 ResetState_ViewMenu();
741}
742void DuplicateTitleCheck(char *lpszTitle){
743 int i;
744 for(i=0;i<MAX_WNDNUM;i++){
745 if(MdiInfo[i].hwnd){
746 if(lstrcmpi(MdiInfo[i].title,lpszTitle)==0){
747 lstrcat(lpszTitle,"_");
748 DuplicateTitleCheck(lpszTitle);
749 return;
750 }
751 }
752 }
753}
754HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor){
755 int i;
756 char str[MAX_PATH],str2[32],*buffer;
757 HWND hChild,hEdit;
758 RECT rect;
759 int iCharCode=NKF_SHIFT_JIS;
760 int iLfCode=LFCODE_CRLF;
761
762 if(filepath){
763
764 //すでに指定されたファイルが開かれている場合
765 hChild=GetWindow(hClient,GW_CHILD);
766 while(hChild){
767 i=GetWndNum(hChild);
768 if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
769 if(lstrcmpi(MdiInfo[i].path,filepath)==0) break;
770 }
771 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
772 }
773 if(hChild){
774 //前面に表示して終了
775 BringWindowToTop(hChild);
776 return hChild;
777 }
778
779
780 //////////////////////////////////////////////////////
781 //ファイル読み込み(正常に読み込めるかの確認も含む)
782 //////////////////////////////////////////////////////
783
784 HANDLE hFile;
785 hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
786 if(hFile==INVALID_HANDLE_VALUE){
787 sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
788 MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
789 return 0;
790 }
791 int length;
792 length=GetFileSize(hFile,NULL);
793
794 char *temp;
795 temp=(char *)HeapAlloc(hHeap,0,length+1);
796 DWORD dw;
797 ReadFile(hFile,temp,length,&dw,NULL);
798 CloseHandle(hFile);
799 for(i=0;i<length;i++){
800 if(temp[i]=='\0') temp[i]=' ';
801 }
802 temp[length]=0;
803
804
805 ///////////////////////
806 // 改行コードを判別
807 ///////////////////////
808
809 char *temp2;
810 for(i=0;i<length;i++){
811 if(temp[i]=='\r'){
812 if(temp[i+1]=='\n')
813 iLfCode=LFCODE_CRLF;
814 else
815 iLfCode=LFCODE_CR;
816 break;
817 }
818 if(temp[i]=='\n'){
819 iLfCode=LFCODE_LF;
820 break;
821 }
822 }
823
824 //改行コードを変換
825 if(iLfCode==LFCODE_CR||iLfCode==LFCODE_LF){
826 temp2=nkf.ToCRLF(iLfCode,temp);
827 HeapDefaultFree(temp);
828 temp=temp2;
829
830 length=lstrlen(temp);
831 }
832
833
834 /////////////////////
835 // Shift-JISに変換
836 /////////////////////
837
838 buffer=(char *)HeapAlloc(hHeap,0,length*2+1);
839 nkf.pSetNkfOption("-sx"); //Shift-JISに変換(xは半角カタカナを全角に変換しないオプション)
840 nkf.pNkfConvert(buffer,temp);
841 buffer=(char *)HeapReAlloc(hHeap,0,buffer,lstrlen(buffer)+1);
842 HeapDefaultFree(temp);
843
844 //変換前の文字コードを判別
845 iCharCode=nkf.pNkfGetKanjiCode();
846 if(iCharCode<NKF_CODE_MIN||NKF_CODE_MAX<iCharCode){
847 //判別不能な場合は、Shift-JISにする
848 iCharCode=NKF_SHIFT_JIS;
849 }
850 else if(iCharCode==NKF_EUC||iCharCode==NKF_ISO_2022_JP){
851 //EUC、JISの場合で、判別不能な場合は、Shift-JISを優先
852 for(i=0;;i++){
853 if(buffer[i]=='\0'){
854 //半角コードのみ
855 iCharCode=NKF_SHIFT_JIS;
856 break;
857 }
858 if(IsDBCSLeadByte(buffer[i])) break;
859 }
860 }
861
862
863 //////////////////////////
864 // ファイルパスをセット
865 //////////////////////////
866
867 _splitpath(filepath,NULL,NULL,str,str2);
868 lstrcat(str,str2);
869 }
870 else{
871 buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
872 DocumentCounter++;
873 sprintf(str,"Document[%d]",DocumentCounter);
874 }
875
876 MDICREATESTRUCT mdic;
877 mdic.szClass="MDIClientWindow_TextEdit";
878 mdic.hOwner=hInst;
879 mdic.x=CW_USEDEFAULT;
880 mdic.y=CW_USEDEFAULT;
881 mdic.cx=CW_USEDEFAULT;
882 mdic.cy=CW_USEDEFAULT;
883 mdic.szTitle=str;
884
885 hChild=GetWindow(hClient,GW_CHILD);
886 if(IsWindow(hChild)){
887 if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
888 else mdic.style=0;
889 }
890 else{
891 if(pobj_nv->bMDIZoomed) mdic.style=WS_MAXIMIZE;
892 else mdic.style=0;
893 }
894
895 //ファイルアイコンをセット
896 SHFILEINFO shfi;
897 if(filepath)
898 SHGetFileInfo(filepath, FILE_ATTRIBUTE_ARCHIVE, &shfi, sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON );
899 else shfi.hIcon=(HICON)LoadImage(hResInst,MAKEINTRESOURCE(IDI_TEXTDOCUMENT),IMAGE_ICON,16,16,LR_DEFAULTCOLOR);;
900 mdic.lParam=(LPARAM)shfi.hIcon;
901
902 mdic.style|=WS_CLIPCHILDREN;
903 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic); //ウィンドウ作成
904
905 //TextEditorコントロールを設置
906 GetClientRect(hChild,&rect);
907 hEdit=CreateWindow("TextEditor",NULL,
908 WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
909 0,0,0,0,
910 hChild,NULL,hInst,NULL);
911
912 //ウィンドウのID登録
913 for(i=0;i<MAX_WNDNUM;i++){
914 if(MdiInfo[i].hwnd==0){
915 MdiInfo[i].hwnd=hChild;
916 MdiInfo[i].DocType=DocumentType;
917 DuplicateTitleCheck(str);
918 MdiInfo[i].title=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(str)+1);
919 lstrcpy(MdiInfo[i].title,str);
920 if(filepath){
921 MdiInfo[i].path=(char *)GlobalAlloc(GMEM_FIXED,lstrlen(filepath)+1);
922 lstrcpy(MdiInfo[i].path,filepath);
923 }
924 else{
925 MdiInfo[i].path=(char *)GlobalAlloc(GPTR,1);
926 }
927
928 MdiInfo[i].pMdiTextEdit = new CMdiTextEdit( &MdiInfo[i] );
929
930 MdiInfo[i].pMdiTextEdit->hEdit=hEdit;
931 MdiInfo[i].pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
932 MdiInfo[i].pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
933 MdiInfo[i].pMdiTextEdit->hIcon=shfi.hIcon;
934 MdiInfo[i].pMdiTextEdit->buffer=buffer;
935 MdiInfo[i].pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
936 MdiInfo[i].pMdiTextEdit->iUnderStart=-1;
937 MdiInfo[i].pMdiTextEdit->iUnderEnd=-1;
938 MdiInfo[i].pMdiTextEdit->StartCaretPos.x=0;
939 MdiInfo[i].pMdiTextEdit->StartCaretPos.y=0;
940 MdiInfo[i].pMdiTextEdit->EndCaretPos.x=0;
941 MdiInfo[i].pMdiTextEdit->EndCaretPos.y=0;
942 MdiInfo[i].pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
943 MdiInfo[i].pMdiTextEdit->bAutoScroll=0;
944 MdiInfo[i].pMdiTextEdit->iWidth_ControlTabSpace=
945 GetControlTabSpace(i,&MdiInfo[i].pMdiTextEdit->iLineNumberTextCount);
946 MdiInfo[i].pMdiTextEdit->iCharCode=iCharCode;
947 MdiInfo[i].pMdiTextEdit->iLfCode=iLfCode;
948
949 MdiInfo[i].IndentStr=0;
950
951 int flag;
952 if(mdic.style&WS_MAXIMIZE) flag=SIZE_MAXIMIZED;
953 else flag=0;
954 SendTextEditResizeEvent(hChild);
955 break;
956 }
957 }
958
959 //ワードカラーをセット
960 if(IS_DOCUMENT_TEXT(DocumentType)) SetTextEditWordColor(i);
961
962 //Docコンボボックスに追加
963 extern HWND hDocCombo;
964 i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
965 SendMessage(hDocCombo,CB_SETCURSEL,i,0);
966
967 //タブに追加
968 pobj_MainTab->InsertItem( str, true, TabColor );
969
970 SetFocus(hEdit);
971 SetStatusText(NULL);
972
973 //メニュー状態を設定
974 ResetState_DocMenu();
975
976 if( DocumentType == WNDTYPE_BASIC && ProjectInfo.name[0] == '\0' ){
977 // 単体ソースコードを開いたとき
978 if( !IsWindowVisible( hProjectView ) ){
979 // クラスビューを表示する
980 SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
981 ShowClassView();
982
983 // クラスビューを更新
984 ResetClassTree(-1);
985 }
986 }
987
988 return hChild;
989}
990void CloseDocWindow(int WndNum){
991 int i2,i3;
992
993 MdiInfo[WndNum].hwnd=0;
994
995 //ドキュメントコンボボックスから文字列を消去
996 extern HWND hDocCombo;
997 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title);
998 SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
999
1000 //タブコントロールからアイテムを消去
1001 if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title, true );
1002
1003
1004 GlobalFree(MdiInfo[WndNum].title);
1005 GlobalFree(MdiInfo[WndNum].path);
1006
1007 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1008 ////////////////////////////
1009 // テキストエディタを閉じる
1010 ////////////////////////////
1011
1012 extern COMPLEMENT_WINDOW_INFO ComplementWndInfo;
1013 if(ComplementWndInfo.hWnd){
1014 //コード補完リストを破棄する
1015 DestroyWindow(ComplementWndInfo.hWnd);
1016 ComplementWndInfo.hWnd=0;
1017 }
1018
1019 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
1020 HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
1021
1022 if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
1023
1024 //エディットコントロールを破棄
1025 DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
1026
1027 //Web検索ウィンドウを破棄
1028 delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
1029 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
1030
1031 //ルーラーウィンドウを破棄
1032 delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
1033 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
1034
1035 //アイコンを破棄
1036 if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
1037
1038 delete MdiInfo[WndNum].pMdiTextEdit;
1039 MdiInfo[WndNum].pMdiTextEdit=0;
1040 }
1041 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1042 /////////////////////
1043 // RADツールを閉じる
1044 /////////////////////
1045
1046 for(i2=0;i2<MAX_UNDONUM;i2++){
1047 if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
1048 Rad_DeleteUndoData(WndNum,i2);
1049 }
1050 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
1051 DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
1052 SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
1053 DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
1054 DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
1055 GlobalFree(MdiInfo[WndNum].MdiRadInfo);
1056 }
1057 else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
1058 ////////////////////////////
1059 // メニューエディタを閉じる
1060 ////////////////////////////
1061
1062 DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
1063 GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
1064 }
1065 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
1066 ////////////////////////////
1067 // アイコンエディタを閉じる
1068 ////////////////////////////
1069
1070 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1071 for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
1072 if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
1073 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
1074 }
1075 }
1076
1077 DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
1078 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
1079 DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
1080 for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
1081 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
1082 }
1083 HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
1084 }
1085}
1086void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
1087 int WndNum;
1088 WndNum=GetWndNum(hwnd);
1089 if(WndNum==-1) return;
1090
1091 int WebResultWndHeight;
1092 WebResultWndHeight=LINK_ITEM_HEIGHT;
1093 //未完成
1094 WebResultWndHeight=0;
1095
1096 int iHeightRuler;
1097 if(pobj_nv->bEditor_Ruler){
1098 //ルーラー
1099 MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
1100 0,
1101 0,
1102 cx,
1103 HEIGHT_RULER);
1104
1105 iHeightRuler=HEIGHT_RULER;
1106
1107 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
1108 }
1109 else{
1110 iHeightRuler=0;
1111
1112 ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
1113 }
1114
1115 //エディットウィンドウ
1116 MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
1117 0,
1118 iHeightRuler,
1119 cx,
1120 cy-WebResultWndHeight-iHeightRuler,
1121 1);
1122
1123 //Web検索ウィンドウ
1124 MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
1125 0,
1126 cy-WebResultWndHeight,
1127 cx,
1128 WebResultWndHeight);
1129}
1130LRESULT CALLBACK MDIClientWindow_TextEdit(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1131 int i,i2;
1132 HWND hEdit;
1133
1134 switch(message){
1135 case WM_CREATE:
1136 CREATESTRUCT *lpcs;
1137 lpcs=(CREATESTRUCT *)lParam;
1138 MDICREATESTRUCT *lpmcs;
1139 lpmcs=(MDICREATESTRUCT *)lpcs->lpCreateParams;
1140 SendMessage(hwnd,WM_SETICON,ICON_SMALL,(LPARAM)lpmcs->lParam);
1141 break;
1142 case WM_MDIACTIVATE:
1143 //以前のMDIウィンドウのパラメータ ヒントを破棄する
1144 if(MethodCheckInfo.hWnd){
1145 DestroyWindow(MethodCheckInfo.hWnd);
1146 MethodCheckInfo.hWnd=0;
1147 }
1148
1149 //以前のコード補完リストを破棄する
1150 if(ComplementWndInfo.hWnd){
1151 DestroyWindow(ComplementWndInfo.hWnd);
1152 ComplementWndInfo.hWnd=0;
1153 }
1154
1155 if(!lParam) return 0;
1156 i=GetWndNum((HWND)lParam);
1157 if(i==-1) return 0; //ウィンドウが初期状態の場合
1158
1159#ifndef THETEXT
1160 //デバッガ メニューの状態を設定
1161 pobj_Debugger->ResetCommandEnabled();
1162#endif
1163
1164 //ドキュメント セレクト コンボボックス
1165 extern HWND hDocCombo;
1166 i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title);
1167 SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
1168
1169 //タブコントロール
1170 pobj_MainTab->MdiActiveEvent(MdiInfo[i].title);
1171
1172 if( !ProjectInfo.name[0] ){
1173 ResetClassTree(-1);
1174 }
1175
1176 return 0;
1177 case WM_SETFOCUS:
1178 hEdit=GetWindow(hwnd,GW_CHILD);
1179 SetFocus(hEdit);
1180 SetStatusText(CmdMsg);
1181 ResetState_EditMenu();
1182 ResetState_ViewMenu();
1183 break;
1184 case WM_SIZE:
1185 ResizeTextEditWnd(hwnd,LOWORD(lParam),HIWORD(lParam));
1186 break;
1187 case WM_CLOSE:
1188 if(!DocumentModifyCheck(hwnd)) return 0;
1189 CloseDocWindow(GetWndNum(hwnd));
1190 pobj_nv->bMDIZoomed=IsZoomed(hwnd);
1191 i=DefMDIChildProc(hwnd,message,wParam,lParam);
1192
1193 //メニュー状態を設定
1194 ResetState_DocMenu();
1195
1196 return i;
1197 }
1198 return DefMDIChildProc(hwnd,message,wParam,lParam);
1199}
1200void ResizeOwnerWnd(void){
1201 int width_owner,height_owner;
1202 int height_Rebar;
1203 int height_MdiClient;
1204 RECT rect,StatusRect,RebarRect;
1205
1206 GetClientRect(hOwner,&rect);
1207 width_owner=rect.right;
1208 height_owner=rect.bottom;
1209
1210 //Rebar
1211 SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1212 UpdateWindow(pobj_Rebar->hRebar);
1213
1214 //Status bar
1215#define STATUSBAR_PARTS_NUM 5
1216 int sb_size[STATUSBAR_PARTS_NUM];
1217 sb_size[0]=width_owner-340;
1218 sb_size[1]=width_owner-220;
1219 sb_size[2]=width_owner-120;
1220 sb_size[3]=width_owner-50;
1221 sb_size[4]=width_owner;
1222 SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
1223 SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
1224 UpdateWindow(hStatusBar);
1225
1226 //Status bar
1227 int height_Statusbar;
1228 SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
1229 height_Statusbar=StatusRect.bottom;
1230
1231 GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
1232 height_Rebar=RebarRect.bottom-RebarRect.top+2;
1233
1234 int height_dv; //Width of Debugger View
1235 int height_cv; //Width of Compiler View
1236 height_dv=0;
1237 height_cv=0;
1238#ifndef THETEXT
1239 if(bClipCompileView){
1240 if(pobj_Debugger->IsDebuggerView()){
1241 //デバッガビューが表示されているとき
1242 height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
1243 }
1244 if(hCompileView){
1245 //コンパイラビューが表示されているとき
1246 height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
1247 }
1248 }
1249#endif
1250
1251 int width_pjv=0; //Width of Project View
1252 if(pobj_nv->bClipProjectView){
1253 if(IsWindowVisible(hProjectView)){
1254 //プロジェクトビューが表示されているとき
1255 width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
1256 }
1257 }
1258
1259 int width_SideWeb=0;
1260 if( pobj_SideWeb )
1261 {
1262 if(pobj_SideWeb->bShow){
1263 width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
1264 }
1265 }
1266
1267 //MDIクライアントの高さ
1268 height_MdiClient=height_owner-(
1269 height_Rebar+
1270 height_dv+
1271 height_cv+
1272 height_Statusbar
1273 );
1274
1275 //タブコントロール
1276 int tab_height;
1277 if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
1278 else{
1279 RECT rc;
1280 TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
1281 tab_height=rc.bottom-rc.top;
1282 }
1283 MoveWindow(pobj_MainTab->hTab,
1284 width_pjv,
1285 height_Rebar,
1286 width_owner-width_pjv-width_SideWeb,
1287 tab_height,
1288 1);
1289
1290 //MDIクライアント
1291 MoveWindow(hClient,
1292 width_pjv,
1293 height_Rebar+tab_height,
1294 width_owner-width_pjv-width_SideWeb,
1295 height_MdiClient-tab_height,
1296 1);
1297
1298 if( pobj_SideWeb )
1299 {
1300 if(pobj_SideWeb->bShow){
1301 //SideWeb
1302 pobj_SideWeb->resize(
1303 width_owner - pobj_nv->width_WebSearchView,
1304 height_Rebar,
1305 pobj_nv->width_WebSearchView,
1306 height_MdiClient);
1307 }
1308 else pobj_SideWeb->resize(0,0,0,0);
1309 }
1310
1311 if(width_pjv){
1312 //プロジェクトビュー
1313 MoveWindow(hProjectView,
1314 0,
1315 height_Rebar,
1316 pobj_nv->width_ClipProjectView,
1317 height_MdiClient,
1318 1);
1319 InvalidateRect(hProjectView,NULL,0);
1320 }
1321
1322 if(height_dv){
1323#ifndef THETEXT
1324 //デバッガビュー
1325 pobj_Debugger->resize(
1326 0,
1327 height_Rebar+height_MdiClient+LEVER_THICK,
1328 width_owner,
1329 pobj_nv->height_ClipDebuggerView);
1330#endif
1331 }
1332 if(height_cv){
1333 //コンパイラビュー
1334 MoveWindow(hCompileView,
1335 0,
1336 height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
1337 width_owner,
1338 pobj_nv->height_ClipCompileView,
1339 1);
1340 }
1341}
1342
1343WNDPROC oldMainFrameWndProc;
1344LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam){
1345 int i,i2,i3,WndNum;
1346 char str[MAX_PATH],temporary[1024],temp2[MAX_PATH],temp3[MAX_PATH],*pTemp;
1347 HWND hChild,hEdit;
1348 RECT rect;
1349 POINT pos;
1350 HDROP hDrop;
1351 HGLOBAL hGlobal;
1352 CHARRANGE CharRange;
1353 HANDLE hFile;
1354 BOOL bChecked;
1355
1356 static COLORREF colorUser=RGB(255,255,255);
1357
1358 if(message==WM_COMMAND&&IS_FILEHISTORY_COMMAND(LOWORD(wParam))){
1359 //「最近使ったファイル」メニューコマンド
1360 lstrcpy(str,pobj_nv->pobj_History->lpszPath[LOWORD(wParam)-100]);
1361 OpenFileWithExtension(str);
1362 return 0;
1363 }
1364
1365 if(message==WM_COMMAND&&200<=LOWORD(wParam)&&LOWORD(wParam)<=299){
1366 //「最近使ったプロジェクト」メニューコマンド
1367 lstrcpy(str,pobj_nv->pobj_ProjectHistory->lpszPath[LOWORD(wParam)-200]);
1368 OpenFileWithExtension(str);
1369 return 0;
1370 }
1371
1372 switch(message)
1373 {
1374 case WM_COMMAND:
1375 switch(LOWORD(wParam)){
1376 case IDM_DELETE:
1377 hChild=GetWindow(hClient,GW_CHILD);
1378 WndNum=GetWndNum(hChild);
1379 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1380 hEdit=GetWindow(hChild,GW_CHILD);
1381 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
1382 }
1383 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
1384 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
1385 return 0;
1386 case IDM_ALLSELECT:
1387 hChild=GetWindow(hClient,GW_CHILD);
1388 WndNum=GetWndNum(hChild);
1389 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1390 hEdit=GetWindow(hChild,GW_CHILD);
1391
1392 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
1393 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
1394
1395 GetCaretPosFromBufferIndex(
1396 MdiInfo[WndNum].pMdiTextEdit->buffer,
1397 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
1398 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
1399
1400 InvalidateRect(hEdit,NULL,0);
1401
1402 ResetState_EditMenu();
1403 }
1404 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
1405 i2=GetWndInfoNum(MdiInfo[WndNum].path);
1406 for(i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
1407 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
1408 }
1409 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
1410 }
1411 return 0;
1412 case IDM_FIND:
1413 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),hOwner,(DLGPROC)DlgFind);
1414 return 0;
1415 case IDM_PERMUTATION:
1416 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),hOwner,(DLGPROC)DlgPermutation);
1417 return 0;
1418
1419
1420 ///////////////////////
1421 // 変換メニュー
1422 ///////////////////////
1423 case IDM_CONV_ALPHA_SMALL:
1424 case IDM_CONV_ALPHA_BIG:
1425 case IDM_CONV_HALF:
1426 case IDM_CONV_MULTI:
1427 case IDM_CONV_KATAKANA:
1428 case IDM_CONV_HIRAGANA:
1429 case IDM_CONV_SPACE:
1430 case IDM_CONV_TAB:
1431#ifdef THETEXT
1432 case IDM_CONV_HASRETURN:
1433 case IDM_CONV_QUOTE:
1434#else
1435 case IDM_CODEFORMAT:
1436#endif
1437 TextEdit_Convert(LOWORD(wParam));
1438 return 0;
1439
1440#ifdef THETEXT
1441 ///////////////////////
1442 // ツールメニュー
1443 ///////////////////////
1444 case IDM_STRING_COUNT:
1445 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,0);
1446 return 0;
1447 case IDM_SEL_STRING_COUNT:
1448 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),hOwner,(DLGPROC)DlgStringCount,1);
1449 return 0;
1450#endif //THETEXT
1451
1452 case IDM_PROJECTVIEW:
1453 if(pobj_nv->bClipProjectView){
1454 if(IsWindowVisible(hProjectView)){
1455 ShowWindow(hProjectView,SW_HIDE);
1456 bChecked=0;
1457 }
1458 else{
1459 ShowWindow(hProjectView,SW_SHOW);
1460 bChecked=1;
1461 }
1462 }
1463 else{
1464 if(IsWindowVisible(hProjectView_ToolWindow)){
1465 ShowWindow(hProjectView_ToolWindow,SW_HIDE);
1466 bChecked=0;
1467 }
1468 else{
1469 ShowWindow(hProjectView_ToolWindow,SW_SHOW);
1470 ShowWindow(hProjectView,SW_SHOW);
1471 bChecked=1;
1472 }
1473 }
1474 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,bChecked);
1475
1476 //再配置
1477 ResizeOwnerWnd();
1478
1479 ShowWindow(hClient,SW_SHOW);
1480 return 0;
1481 case IDM_PROJECT_OPTION:
1482 DlgProjectOptionSetting(hwnd);
1483 return 0;
1484 case IDM_TOPMOST:
1485 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
1486 SetWindowPos(hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1487 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
1488 }
1489 else{
1490 SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
1491 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
1492 }
1493 return 0;
1494
1495#ifdef THETEXT
1496 case IDM_RIGHT_TURN:
1497 pobj_nv->bRightTurn^=1;
1498 ResetState_ViewMenu();
1499
1500 //トップのウィンドウを再描画
1501 RedrawAllWindow();
1502
1503 return 0;
1504#endif
1505
1506 case IDM_SET:
1507 DlgOptionSetting(hwnd);
1508 return 0;
1509
1510#ifndef THETEXT
1511 case IDM_DEBUG:
1512 if(pobj_Debugger->IsDebugging()){
1513 pobj_Debugger->DebugContinue();
1514 return 0;
1515 }
1516
1517 hChild=GetWindow(hClient,GW_CHILD);
1518 if(ProjectInfo.name[0]){
1519 //プロジェクトが開かれている場合
1520 if(!SetProjectToRun()) return 0;
1521
1522 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
1523 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
1524 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
1525 hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
1526 DWORD dwAccessBytes;
1527 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
1528 CloseHandle(hFile);
1529
1530 //ソースファイル名をtemp2へ
1531 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1532
1533 //出力ファイル名をtemp3へ
1534 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1535 GetFullPath(temp3,ProjectInfo.dir);
1536
1537 if(IsNeedCompileForProject(1))
1538 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,hwnd);
1539 else
1540 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,hwnd);
1541
1542 //DLLオプション
1543 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1544
1545 //Unicodeオプション
1546 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1547
1548 //ブレークポイントをセーブ
1549 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
1550 }
1551 else{
1552 //単独ソースコード
1553 if(!SetRunning(hChild)) return 0;
1554 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
1555 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1556 else
1557 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1558
1559 //ブレークポイントをセーブ
1560 pobj_DBBreakPoint->SaveToTempFile();
1561 }
1562
1563 //コンパイルビューをクリップするかどうか
1564 if(bClipCompileView){
1565 lstrcat(temporary," /clip_compile_view");
1566
1567 //コンパイラビューを閉じる
1568 if(hCompileView==(HWND)-1) return 0;
1569 if(hCompileView){
1570 hChild=hCompileView;
1571 hCompileView=(HWND)-1;
1572 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1573 }
1574
1575 //重複起動防止のため
1576 hCompileView=(HWND)-1;
1577 }
1578
1579 //インクルードディレクトリ
1580 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1581 lstrcat(temporary,temp2);
1582
1583 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1584
1585 return 0;
1586 case IDM_DEBUGCOMPILE:
1587 hChild=GetWindow(hClient,GW_CHILD);
1588 if(ProjectInfo.name[0]){
1589 //プロジェクトが開かれている場合
1590 if(!SetProjectToRun()) return 0;
1591
1592 //ソースファイル名をtemp2へ
1593 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1594
1595 //出力ファイル名をtemp3へ
1596 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1597 GetFullPath(temp3,ProjectInfo.dir);
1598
1599 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,hwnd);
1600
1601 //DLLオプション
1602 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1603
1604 //Unicodeオプション
1605 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1606 }
1607 else{
1608 //単独ソースコード
1609 if(!SetRunning(hChild)) return 0;
1610 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1611 }
1612
1613 //コンパイルビューをクリップするかどうか
1614 if(bClipCompileView){
1615 lstrcat(temporary," /clip_compile_view");
1616
1617 //コンパイラビューを閉じる
1618 if(hCompileView==(HWND)-1) return 0;
1619 if(hCompileView){
1620 hChild=hCompileView;
1621 hCompileView=(HWND)-1;
1622 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1623 }
1624
1625 //重複起動防止のため
1626 hCompileView=(HWND)-1;
1627 }
1628
1629 //インクルードディレクトリ
1630 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1631 lstrcat(temporary,temp2);
1632
1633 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1634
1635 return 0;
1636 case IDM_ATTACH:
1637 int idProcess;
1638 DWORD dwPlatform;
1639 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),hwnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1640 if(idProcess==0) return 0;
1641
1642 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,hwnd);
1643
1644 //コンパイルビューをクリップするかどうか
1645 if(bClipCompileView){
1646 lstrcat(temporary," /clip_compile_view");
1647
1648 //コンパイラビューを閉じる
1649 if(hCompileView==(HWND)-1) return 0;
1650 if(hCompileView){
1651 hChild=hCompileView;
1652 hCompileView=(HWND)-1;
1653 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1654 }
1655
1656 //重複起動防止のため
1657 hCompileView=(HWND)-1;
1658 }
1659
1660 //インクルードディレクトリ
1661 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1662 lstrcat(temporary,temp2);
1663
1664 ActiveBasic::Common::Platform::EnumType platform;
1665 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1666 {
1667 platform = ActiveBasic::Common::Platform::X86;
1668 }
1669 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1670 {
1671 platform = ActiveBasic::Common::Platform::X64;
1672 }
1673 else
1674 {
1675 throw;
1676 }
1677
1678 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1679
1680 return 0;
1681 case IDM_RELEASECOMPILE:
1682 hChild=GetWindow(hClient,GW_CHILD);
1683 if(ProjectInfo.name[0]){
1684 //プロジェクトが開かれている場合
1685 if(!SetProjectToRun()) return 0;
1686
1687 //ソースファイル名をtemp2へ
1688 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1689
1690 //出力ファイル名をtemp3へ
1691 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1692 GetFullPath(temp3,ProjectInfo.dir);
1693
1694 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,hwnd);
1695
1696 //DLLオプション
1697 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1698
1699 //Unicodeオプション
1700 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1701 }
1702 else{
1703 //単独ソースコード
1704 if(!SetRunning(hChild)) return 0;
1705 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,hwnd);
1706 }
1707
1708 //コンパイルビューをクリップするかどうか
1709 if(bClipCompileView){
1710 lstrcat(temporary," /clip_compile_view");
1711
1712 //コンパイラビューを閉じる
1713 if(hCompileView==(HWND)-1) return 0;
1714 if(hCompileView){
1715 hChild=hCompileView;
1716 hCompileView=(HWND)-1;
1717 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1718 }
1719
1720 //重複起動防止のため
1721 hCompileView=(HWND)-1;
1722 }
1723
1724 //インクルードディレクトリ
1725 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1726 lstrcat(temporary,temp2);
1727
1728 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1729
1730 return 0;
1731 case IDM_RELEASERUN:
1732 hChild=GetWindow(hClient,GW_CHILD);
1733 if(ProjectInfo.name[0]){
1734/* //プロジェクトが開かれている場合
1735 if(!SetProjectToRun()) return 0;
1736
1737 //必要であればリリースコンパイル
1738 if(IsNeedCompileForProject(0))
1739 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1740
1741 if(ProjectInfo.dwModuleType==MT_DLL){
1742 lstrcpy(temporary,ProjectInfo.szExePath);
1743 }
1744 else{
1745 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1746 GetFullPath(temporary,ProjectInfo.dir);
1747 }
1748 }
1749 else{
1750/* //必要であればリリースコンパイル
1751 if(!SetRunning(hChild)) return 0;
1752
1753 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1754 SendMessage(hwnd,WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1755
1756 //単独ソースコード
1757 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1758 lstrcat(temporary,temp2);
1759 lstrcat(temporary,temp3);
1760 lstrcat(temporary,".exe");
1761 }
1762
1763 //インクルードディレクトリ
1764 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1765 lstrcat(temporary,temp2);
1766
1767 ShellExecute(hwnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1768 return 0;
1769
1770
1771 ////////////////////////
1772 // デバッグ コマンド
1773 ////////////////////////
1774
1775 case IDM_STEP_IN:
1776 pobj_Debugger->StepIn();
1777 break;
1778 case IDM_STEP_OVER:
1779 pobj_Debugger->StepOver();
1780 break;
1781 case IDM_STEP_CURSOR:
1782 pobj_Debugger->StepToCursor();
1783 break;
1784 case IDM_BREAKPOINT:
1785 if(ProjectInfo.name[0]){
1786 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1787 }
1788 else{
1789 pobj_DBBreakPoint->Event_BreakPoint();
1790 }
1791 break;
1792 case IDM_DEBUG_STOP:
1793 pobj_Debugger->DebugStop();
1794 break;
1795 case IDM_DEBUG_PAUSE:
1796 pobj_Debugger->DebugPause();
1797 break;
1798
1799
1800 case IDM_COMMUNITY:
1801 ShellExecute(hwnd,"open","iexplore.exe",
1802 "http://www.activebasic.com/forum/",
1803 NULL,SW_SHOWNORMAL);
1804 return 0;
1805 case IDM_COMMU_SEARCH:
1806 ShellExecute(hwnd,"open","iexplore.exe",
1807 "http://www.activebasic.com/forum/search.php",
1808 NULL,SW_SHOWNORMAL);
1809 return 0;
1810 case IDM_COMMU_PM:
1811 ShellExecute(hwnd,"open","iexplore.exe",
1812 "http://www.activebasic.com/forum/privmsg.php?folder=inbox",
1813 NULL,SW_SHOWNORMAL);
1814 return 0;
1815 case ID_COMMU_FORUM1:
1816 ShellExecute(hwnd,"open","iexplore.exe",
1817 "http://www.activebasic.com/forum/viewforum.php?f=1",
1818 NULL,SW_SHOWNORMAL);
1819 return 0;
1820 case ID_COMMU_FORUM2:
1821 ShellExecute(hwnd,"open","iexplore.exe",
1822 "http://www.activebasic.com/forum/viewforum.php?f=2",
1823 NULL,SW_SHOWNORMAL);
1824 return 0;
1825 case ID_COMMU_FORUM3:
1826 ShellExecute(hwnd,"open","iexplore.exe",
1827 "http://www.activebasic.com/forum/viewforum.php?f=5",
1828 NULL,SW_SHOWNORMAL);
1829 return 0;
1830 case ID_COMMU_FORUM4:
1831 ShellExecute(hwnd,"open","iexplore.exe",
1832 "http://www.activebasic.com/forum/viewforum.php?f=3",
1833 NULL,SW_SHOWNORMAL);
1834 return 0;
1835 case ID_COMMU_FORUM5:
1836 ShellExecute(hwnd,"open","iexplore.exe",
1837 "http://www.activebasic.com/forum/viewforum.php?f=6",
1838 NULL,SW_SHOWNORMAL);
1839 return 0;
1840 case ID_COMMU_FORUM6:
1841 ShellExecute(hwnd,"open","iexplore.exe",
1842 "http://www.activebasic.com/forum/viewforum.php?f=8",
1843 NULL,SW_SHOWNORMAL);
1844 return 0;
1845 case ID_COMMU_FORUM7:
1846 ShellExecute(hwnd,"open","iexplore.exe",
1847 "http://www.activebasic.com/forum/viewforum.php?f=4",
1848 NULL,SW_SHOWNORMAL);
1849 return 0;
1850 case ID_COMMU_FORUM8:
1851 ShellExecute(hwnd,"open","iexplore.exe",
1852 "http://www.activebasic.com/forum/viewforum.php?f=7",
1853 NULL,SW_SHOWNORMAL);
1854 return 0;
1855#endif //THETEXT
1856
1857
1858 case IDM_TOPIC:
1859#ifdef THETEXT
1860 sprintf(str,"%sTopics\\index.html",pj_editor_Dir);
1861 ShellExecute(hwnd,"open",str,NULL,NULL,SW_SHOWNORMAL);
1862#else
1863 sprintf(str,"%sBasicHelp.chm",pj_editor_Dir);
1864 HtmlHelp(NULL,str,HH_DISPLAY_TOPIC,0);
1865#endif
1866 return 0;
1867
1868#ifdef THETEXT
1869 case IDM_DSHOMEPAGE:
1870 ShellExecute(hwnd,"open","http://www.discoversoft.net/",NULL,NULL,SW_SHOWNORMAL);
1871 return 0;
1872#else
1873 case IDM_AB_WEBSITE:
1874 ShellExecute(hwnd,"open","http://www.activebasic.com/",NULL,NULL,SW_SHOWNORMAL);
1875 return 0;
1876 case IDM_ACTBDL:
1877 ShellExecute(hwnd,"open","http://www.activebasic.com/activebasic5/download.htm",NULL,NULL,SW_SHOWNORMAL);
1878 return 0;
1879#endif
1880
1881 case IDM_ABOUT:
1882 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),hwnd,(DLGPROC)DialogAbout);
1883 return 0;
1884
1885 case IDM_WEB_SEARCH:
1886 hChild=GetWindow(hClient,GW_CHILD);
1887 WndNum=GetWndNum(hChild);
1888 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
1889 extern HWND hWebSearchCombo;
1890 SendMessage(GetWindow(hWebSearchCombo,GW_CHILD),WM_CHAR,VK_RETURN,0);
1891 }
1892 return 0;
1893
1894
1895
1896 //////////////////////////////////////////////////////
1897 // レバーコントロールのサブメニューコマンド(レバー追加)
1898 //////////////////////////////////////////////////////
1899
1900 case IDM_DOCSELECTBAND:
1901 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1902 return 0;
1903 case IDM_STANDARDBAND:
1904 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1905 return 0;
1906#ifndef THETEXT
1907 case IDM_RELEASEBAND:
1908 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1909 return 0;
1910 case IDM_DEBUGBAND:
1911 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1912 return 0;
1913 case IDM_SELECTCOMPILERBAND:
1914 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1915 return 0;
1916#endif
1917 case IDM_BANDMENU_WEB_SEARCH:
1918 pobj_Rebar->ChangeRebarBand(ID_WEB_SEARCH);
1919 return 0;
1920 case IDM_NOGRIPPER:
1921 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1922 else pobj_nv->bNoGripper=1;
1923
1924 //レバーコントロールを再生成
1925 pobj_Rebar->ResetRebar();
1926
1927 //メニュー状態を設定
1928 ResetState_DocMenu();
1929 return 0;
1930 case IDM_RESET_REBAR:
1931 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1932 if(IDCANCEL==MessageBox(hwnd,STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION)) break;
1933
1934 //レバーコントロールを再生成
1935 pobj_Rebar->ResetInitRebar();
1936
1937 //メニュー状態を設定
1938 ResetState_DocMenu();
1939 return 0;
1940
1941
1942
1943 ////////////////////////////////////////////////////
1944 // メイン タブ コントロールのサブメニューコマンド
1945 ////////////////////////////////////////////////////
1946
1947 case IDM_ALLCLOSE_OMIT_MYSELF:
1948 //このウィンドウ以外をすべて閉じる(&A)
1949 hChild=GetWindow(hClient,GW_CHILD);
1950 WndNum=GetWndNum(hChild);
1951 for(i=0;i<MAX_WNDNUM;i++){
1952 if(i==WndNum) continue;
1953 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1954 }
1955 return 0;
1956
1957 case IDM_PATH_COPY:
1958 hChild=GetWindow(hClient,GW_CHILD);
1959 WndNum=GetWndNum(hChild);
1960
1961 //絶対パスをコピー
1962 hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1963 pTemp=(char *)GlobalLock(hGlobal);
1964 lstrcpy(pTemp,MdiInfo[WndNum].path);
1965 GlobalUnlock(hGlobal);
1966
1967 //クリップボードに保存
1968 OpenClipboard(hwnd);
1969 EmptyClipboard();
1970 SetClipboardData(CF_TEXT,hGlobal);
1971 CloseClipboard();
1972 return 0;
1973
1974 case IDM_FOLDER_OPEN:
1975 hChild=GetWindow(hClient,GW_CHILD);
1976 WndNum=GetWndNum(hChild);
1977
1978 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1979 lstrcat(temporary,temp2);
1980
1981 ShellExecute(hwnd,"explore",temporary,NULL,NULL,SW_SHOWNORMAL);
1982 return 0;
1983
1984 case IDM_DELETE_FILE:
1985 hChild=GetWindow(hClient,GW_CHILD);
1986 WndNum=GetWndNum(hChild);
1987
1988 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1989 lstrcat(temporary,temp2);
1990
1991 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1992 if(MessageBox(hwnd,temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return 0;
1993
1994 //ゴミ箱へ
1995 SHFILEOPSTRUCT fo;
1996 fo.hwnd=hwnd;
1997 fo.wFunc=FO_DELETE;
1998 fo.pFrom =MdiInfo[WndNum].path;
1999 fo.pTo="\0";
2000 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
2001 SHFileOperation(&fo);
2002
2003 //閉じる
2004 MdiInfo[WndNum].pMdiTextEdit->UnModify();
2005 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
2006
2007 return 0;
2008
2009 case IDM_USER_COLOR:
2010 {
2011 CHOOSECOLOR cc;
2012 COLORREF CusColors[16]={
2013 RGB(255,255,255),
2014 RGB(0,0,0),
2015 RGB(128,128,128),
2016 RGB(192,192,192),
2017 RGB(128,0,0),
2018 RGB(255,0,0),
2019 RGB(128,128,0),
2020 RGB(255,255,0),
2021 RGB(0,128,0),
2022 RGB(0,255,0),
2023 RGB(0,128,128),
2024 RGB(0,255,255),
2025 RGB(0,0,128),
2026 RGB(0,0,255),
2027 RGB(128,0,128),
2028 RGB(255,0,255)};
2029 cc.lStructSize=sizeof(CHOOSECOLOR);
2030 cc.hwndOwner=hwnd;
2031 cc.rgbResult=colorUser;
2032 cc.lpCustColors=CusColors;
2033 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
2034 if(!ChooseColor(&cc)){
2035 return 0;
2036 }
2037 colorUser=cc.rgbResult;
2038 }
2039 case IDM_GRAY:
2040 case IDM_WHITE:
2041 case IDM_RED:
2042 case IDM_GREEN:
2043 case IDM_BLUE:
2044 case IDM_YELLOW:
2045 hChild=GetWindow(hClient,GW_CHILD);
2046 WndNum=GetWndNum(hChild);
2047
2048 TC_ITEM tcItem;
2049 tcItem.mask=TCIF_PARAM;
2050 if(LOWORD(wParam)==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
2051 if(LOWORD(wParam)==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
2052 if(LOWORD(wParam)==IDM_RED) tcItem.lParam=TABCOLOR_RED;
2053 if(LOWORD(wParam)==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
2054 if(LOWORD(wParam)==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
2055 if(LOWORD(wParam)==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
2056 if(LOWORD(wParam)==IDM_USER_COLOR) tcItem.lParam=colorUser;
2057 TabCtrl_SetItem(pobj_MainTab->hTab,
2058 TabCtrl_GetCurSel(pobj_MainTab->hTab),
2059 &tcItem);
2060 InvalidateRect(pobj_MainTab->hTab,NULL,0);
2061 return 0;
2062
2063
2064
2065 //////////////////////////////////
2066 // SideWeb
2067 //////////////////////////////////
2068
2069 case IDC_CLIP:
2070 pobj_SideWeb->bShow=0;
2071 ResizeOwnerWnd();
2072 return 0;
2073 }
2074 break;
2075 case WM_DROPFILES:
2076 hDrop=(HDROP)wParam;
2077
2078 i2=DragQueryFile(hDrop,-1,0,0);
2079 for(i=0;i<i2;i++){
2080 DragQueryFile(hDrop,i,str,MAX_PATH);
2081 OpenFileWithExtension(str);
2082 }
2083 DragFinish(hDrop);
2084 return 0;
2085 case WM_SHOWERROR:
2086 //エラー部分を反転表示
2087 DWORD AccBytes;
2088 HANDLE fh;
2089 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
2090 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
2091 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
2092 CloseHandle(fh);
2093 temporary[AccBytes]=0;
2094 hChild=GetWindow(hClient,GW_CHILD);
2095 while(hChild){
2096 WndNum=GetWndNum(hChild);
2097 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
2098 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
2099 }
2100 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2101 }
2102 if(!hChild){
2103 hChild=OpenFileWithExtension(temporary);
2104 WndNum=GetWndNum(hChild);
2105 }
2106
2107 if(WndNum==-1) return 0;
2108
2109 //ウィンドウを最前面に表示
2110 BringWindowToTop(hChild);
2111 UpdateWindow(hChild);
2112
2113 pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
2114
2115 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
2116 for(i=0,i2=0;;i++){
2117 if(i2>=(int)wParam) break;
2118 if(pTemp[i]=='\0') break;
2119 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
2120 i++;
2121 i2++;
2122 }
2123 }
2124 pos.x=i;
2125
2126 //行の終端インデックスを取得
2127 for(;;i++){
2128 if(pTemp[i]=='\0') break;
2129 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
2130 }
2131 pos.y=i;
2132
2133 //行を選択する
2134 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
2135
2136 return 0;
2137
2138#ifndef THETEXT
2139 case WM_SETCOMPILEVIEW:
2140 //コンパイラウィンドウ(埋め込み型)が表示されたとき
2141 hCompileView=(HWND)lParam;
2142 ResizeOwnerWnd();
2143 return 0;
2144 case WM_DESTROYCOMPILEVIEW:
2145 //コンパイラウィンドウ(埋め込み型)が破棄されたとき
2146 if((int)hCompileView==-1){
2147 //すぐに次のコンパイラウィンドウが起動するとき
2148 hCompileView=0;
2149 }
2150 else{
2151 //完全にコンパイラウィンドウを閉じたときはリサイズ
2152 hCompileView=0;
2153
2154 ResizeOwnerWnd();
2155 }
2156 return 0;
2157
2158 case WM_SETDEBUGGERBASE:
2159 //デバッガベースウィンドウ(埋め込み型)が表示されたとき
2160 pobj_Debugger->begin();
2161
2162 //BasicCompiler.exeの強制終了を考慮
2163 SetTimer(hOwner,ID_DEBUGSAFTY,1000,NULL);
2164
2165 return 0;
2166 case WM_DESTROYDEBUGGERBASE:
2167 //BasicCompiler.exeの強制終了を考慮
2168 KillTimer(hOwner,ID_DEBUGSAFTY);
2169
2170 //デバッガベースウィンドウ(埋め込み型)が破棄されたとき
2171 pobj_Debugger->end();
2172
2173 return 0;
2174
2175 case WM_SETDEBUGGERVIEW:
2176 //デバッガウィンドウ(埋め込み型)が表示されたとき
2177 pobj_Debugger->watch_start((HWND)lParam);
2178 ResizeOwnerWnd();
2179 return 0;
2180 case WM_DESTROYDEBUGGERVIEW:
2181 //デバッガウィンドウ(埋め込み型)が破棄されたとき
2182 pobj_Debugger->watch_quit();
2183 ResizeOwnerWnd();
2184 return 0;
2185#endif
2186
2187 case WM_SIZE:
2188 ResizeOwnerWnd();
2189 return 0;
2190
2191
2192 case WM_MOUSEMOVE:
2193 static DWORD dwDragLever;
2194 static POINT PrevMousePos;
2195 static int start;
2196
2197 pos.x=(long)(short)LOWORD(lParam);
2198 pos.y=(long)(short)HIWORD(lParam);
2199 ClientToScreen(hwnd,&pos);
2200
2201 if(dwDragLever){
2202 GetClientRect(hwnd,&rect);
2203
2204 if(dwDragLever==1){
2205 //プロジェクトビューをリサイズ中
2206 pobj_nv->width_ClipProjectView=start+pos.x-PrevMousePos.x;
2207 if(pobj_nv->width_ClipProjectView<100) pobj_nv->width_ClipProjectView=100;
2208 if(rect.right-100<pobj_nv->width_ClipProjectView) pobj_nv->width_ClipProjectView=rect.right-100;
2209 }
2210 else if(dwDragLever==2){
2211 //デバッガビューをリサイズ中
2212 pobj_nv->height_ClipDebuggerView=start+PrevMousePos.y-pos.y;
2213 if(pobj_nv->height_ClipDebuggerView<60) pobj_nv->height_ClipDebuggerView=60;
2214 if(rect.bottom-100<pobj_nv->height_ClipCompileView+pobj_nv->height_ClipDebuggerView)
2215 pobj_nv->height_ClipDebuggerView=rect.bottom-100-pobj_nv->height_ClipCompileView;
2216 }
2217 else if(dwDragLever==3){
2218 //コンパイラビューをリサイズ中
2219 pobj_nv->height_ClipCompileView=start+PrevMousePos.y-pos.y;
2220 if(pobj_nv->height_ClipCompileView<60) pobj_nv->height_ClipCompileView=60;
2221 if(rect.bottom-100<pobj_nv->height_ClipCompileView)
2222 pobj_nv->height_ClipCompileView=rect.bottom-100;
2223 }
2224 else if(dwDragLever==4){
2225 //SideWebをリサイズ中
2226 pobj_nv->width_WebSearchView=start+PrevMousePos.x-pos.x;
2227 if(pobj_nv->width_WebSearchView<100) pobj_nv->width_WebSearchView=100;
2228 if(rect.right-100<pobj_nv->width_WebSearchView) pobj_nv->width_WebSearchView=rect.right-100;
2229 }
2230
2231 ResizeOwnerWnd();
2232 UpdateWindow(hwnd);
2233 }
2234 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2235 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2236 GetWindowRect(hProjectView,&rect);
2237 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2238 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2239 SetCursor(LoadCursor(0,IDC_SIZEWE));
2240 }
2241 }
2242#ifndef THETEXT
2243 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2244 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2245 GetWindowRect(pobj_Debugger->hwnd,&rect);
2246 if(rect.left<=pos.x&&pos.x<=rect.right&&
2247 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2248 SetCursor(LoadCursor(0,IDC_SIZENS));
2249 }
2250 }
2251 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2252 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2253 GetWindowRect(hCompileView,&rect);
2254 if(rect.left<=pos.x&&pos.x<=rect.right&&
2255 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2256 SetCursor(LoadCursor(0,IDC_SIZENS));
2257 }
2258 }
2259#endif
2260 if( pobj_SideWeb )
2261 {
2262 if(pobj_SideWeb->bShow){
2263 //SideWebとMDIクライアントの境目のサイズ変更ライン
2264 pobj_SideWeb->GetRect(&rect);
2265 ClientToScreen(hwnd,&rect);
2266 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2267 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2268 SetCursor(LoadCursor(0,IDC_SIZEWE));
2269 }
2270 }
2271 }
2272 return 0;
2273 case WM_LBUTTONDOWN:
2274 pos.x=LOWORD(lParam);
2275 pos.y=HIWORD(lParam);
2276 ClientToScreen(hwnd,&pos);
2277
2278 if(pobj_nv->bClipProjectView&&IsWindowVisible(hProjectView)){
2279 //プロジェクトビューとMDIクライアントの境目のサイズ変更ライン
2280 GetWindowRect(hProjectView,&rect);
2281 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2282 rect.right<=pos.x&&pos.x<=rect.right+LEVER_THICK){
2283 SetCursor(LoadCursor(0,IDC_SIZEWE));
2284
2285 dwDragLever=1;
2286 SetCapture(hwnd);
2287
2288 PrevMousePos=pos;
2289 start=pobj_nv->width_ClipProjectView;
2290 }
2291 }
2292#ifndef THETEXT
2293 if(bClipCompileView&&pobj_Debugger->IsDebuggerView()){
2294 //デバッガビューとMDIクライアントの境目のサイズ変更ライン
2295 GetWindowRect(pobj_Debugger->hwnd,&rect);
2296 if(rect.left<=pos.x&&pos.x<=rect.right&&
2297 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2298 SetCursor(LoadCursor(0,IDC_SIZENS));
2299
2300 dwDragLever=2;
2301 SetCapture(hwnd);
2302
2303 PrevMousePos=pos;
2304 start=pobj_nv->height_ClipDebuggerView;
2305 }
2306 }
2307 if(bClipCompileView&&IsWindowVisible(hCompileView)){
2308 //コンパイラビューとMDIクライアントの境目のサイズ変更ライン
2309 GetWindowRect(hCompileView,&rect);
2310 if(rect.left<=pos.x&&pos.x<=rect.right&&
2311 rect.top-LEVER_THICK<=pos.y&&pos.y<=rect.top){
2312 SetCursor(LoadCursor(0,IDC_SIZENS));
2313
2314 dwDragLever=3;
2315 SetCapture(hwnd);
2316
2317 PrevMousePos=pos;
2318 start=pobj_nv->height_ClipCompileView;
2319 }
2320 }
2321#endif
2322 if( pobj_SideWeb && pobj_SideWeb->bShow){
2323 //SideWebとMDIクライアントの境目のサイズ変更ライン
2324 pobj_SideWeb->GetRect(&rect);
2325 ClientToScreen(hwnd,&rect);
2326 if(rect.top<=pos.y&&pos.y<=rect.bottom&&
2327 rect.left-LEVER_THICK<=pos.x&&pos.x<=rect.left){
2328 SetCursor(LoadCursor(0,IDC_SIZENS));
2329
2330 dwDragLever=4;
2331 SetCapture(hwnd);
2332
2333 PrevMousePos=pos;
2334 start=pobj_nv->width_WebSearchView;
2335 }
2336 }
2337 return 0;
2338 case WM_LBUTTONUP:
2339 if(dwDragLever){
2340 dwDragLever=0;
2341 ReleaseCapture();
2342 }
2343 return 0;
2344
2345
2346 case WM_SYSCOMMAND:
2347 //ウィンドウの最小化前にウィンドウ位置を保存
2348 if(wParam==SC_MINIMIZE){
2349 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2350 else if(!IsIconic(hwnd)){
2351 pobj_nv->bWindowMax=0;
2352 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2353 }
2354 }
2355 break; //処理をDefFrameProcへ
2356 case WM_QUERYENDSESSION:
2357 case WM_CLOSE:
2358 extern BOOL bSearchingClasses;
2359 if(bSearchingClasses){
2360 pobj_ClassTreeView->bCloseSwitch=1;
2361 return 0;
2362 }
2363
2364 //コンパイラビューを閉じる
2365 if(hCompileView)
2366 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
2367
2368 //次回起動時にMDIウィンドウを最大化させるかを判定
2369 hChild=GetWindow(hClient,GW_CHILD);
2370 pobj_nv->bMDIZoomed=IsZoomed(hChild);
2371
2372 //プロジェクトを閉じる
2373 if(ProjectInfo.name[0]){
2374 if(!CloseProject()) return 0;
2375 }
2376
2377 //MDIウィンドウの保存確認
2378 hChild=GetWindow(hClient,GW_CHILD);
2379 while(hChild){
2380 i=GetWndNum(hChild);
2381 if(!DocumentModifyCheck(hChild)) return 0;
2382 hChild=GetNextWindow(hChild,GW_HWNDNEXT);
2383 }
2384
2385
2386 KillTimer(hwnd,ID_TIMER_BACKUP);
2387
2388
2389 //ProjectViewの位置を保存、ProjectViewを破棄
2390 GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
2391 DestroyWindow(hProjectView);
2392 DestroyWindow(hProjectView_ToolWindow);
2393
2394 //Rebarの位置を保存、Rebarを破棄
2395 delete pobj_Rebar;
2396 pobj_Rebar=0;
2397
2398 //タブコントロールを破棄
2399 delete pobj_MainTab;
2400 pobj_MainTab=0;
2401
2402 //SideWebを破棄
2403 delete pobj_SideWeb;
2404 pobj_SideWeb=0;
2405
2406 //メインウィンドウの最大化有無、座標を保存
2407 if(IsZoomed(hwnd)) pobj_nv->bWindowMax=1;
2408 else if(!IsIconic(hwnd)){
2409 pobj_nv->bWindowMax=0;
2410 GetWindowRect(hwnd,&pobj_nv->StartupWindowRect);
2411 }
2412
2413 hChild=GetWindow(hClient,GW_CHILD);
2414 while(hChild){
2415 CloseDocWindow(GetWndNum(hChild));
2416 DestroyWindow(hChild);
2417 hChild=GetWindow(hClient,GW_CHILD);
2418 }
2419
2420 EndProjectEditor(); //ProjectEditorの情報を保存
2421
2422 //エディタ用フォントを破棄
2423 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
2424 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
2425 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
2426
2427 DestroyWindow(hwnd);
2428 return 0;
2429
2430 case WM_DESTROY:
2431 PostQuitMessage(0);
2432 return 0;
2433 }
2434
2435 return CallWindowProc( oldMainFrameWndProc, hwnd, message, wParam, lParam );
2436}
2437
2438int RegWndClass(WNDPROC WndProc,char *lpClassName,HBRUSH hBackBrush,DWORD dwFlag){
2439 WNDCLASSEX wcl;
2440
2441 wcl.cbSize=sizeof(WNDCLASSEX);
2442 wcl.hInstance=hInst;
2443 wcl.lpszClassName=lpClassName;
2444 wcl.lpfnWndProc=WndProc;
2445
2446 if(dwFlag&FLAG_DBLCLK) wcl.style=CS_DBLCLKS;
2447 else wcl.style=0;
2448
2449 wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION);
2450 wcl.hIconSm=LoadIcon(NULL,IDI_WINLOGO);
2451
2452 if(dwFlag&FLAG_BEAMCURSOR) wcl.hCursor=LoadCursor(NULL,IDC_IBEAM);
2453 else wcl.hCursor=LoadCursor(NULL,IDC_ARROW);
2454
2455 wcl.lpszMenuName=NULL;
2456 wcl.cbClsExtra=0;
2457 wcl.cbWndExtra=0;
2458 wcl.hbrBackground=hBackBrush;
2459
2460 return RegisterClassEx(&wcl);
2461}
2462int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){
2463 int i,i2,IsStr;
2464 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
2465 MSG msg;
2466 HACCEL hAccel;
2467
2468 hInst=hThisInst;
2469 if(!SetupProjectEditor()) return 0;
2470
2471 HBRUSH hGrayBrush_LineNumber;
2472 hGrayBrush_LineNumber=CreateSolidBrush(RGB(220,220,220));
2473
2474 //if(!RegWndClass(WindowFunc,"ProjectEditorClass",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2475 if(!RegWndClass(MDIClientWindow_TextEdit,"MDIClientWindow_TextEdit",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2476 if(!RegWndClass(MethodCheckWindow,"MethodCheckWindow",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2477 if(!RegWndClass(MDIClientWindow_Rad,"MDIClientWindow_Rad",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2478 if(!RegWndClass(RadToolsWindow,"RadToolsWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2479 if(!RegWndClass(RadPropertyWindow,"RadPropertyWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2480 if(!RegWndClass(RadWindow,"RadWindow",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK)) return 0;
2481 if(!RegWndClass(TestWindowProc,"TestWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2482 if(!RegWndClass(MDIClientWindow_Menu,"MDIClientWindow_Menu",(HBRUSH)GetStockObject(WHITE_BRUSH),FLAG_DBLCLK)) return 0;
2483 if(!RegWndClass(MenuEditWindow,"MenuEditWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2484 if(!RegWndClass(MDIClientWindow_IconEdit,"MDIClientWindow_IconEdit",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2485 if(!RegWndClass(IconEditWindowProc,"IconEditWindowProc",(HBRUSH)GetStockObject(WHITE_BRUSH),0)) return 0;
2486 if(!RegWndClass(ProjectViewProc,"ProjectView",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2487 if(!RegWndClass(ProjectView_ToolWindowProc,"ProjectView_ToolWindow",h3DFaceBackBrush,FLAG_DBLCLK)) return 0;
2488 if(!RegWndClass(TextEditProc,"TextEditor",(HBRUSH)GetStockObject(NULL_BRUSH),FLAG_DBLCLK|FLAG_BEAMCURSOR)) return 0;
2489 if(!RegWndClass(ComplementWindow,"ComplementWindow",(HBRUSH)GetStockObject(BLACK_BRUSH),FLAG_DBLCLK)) return 0;
2490 if(!RegWndClass(PreviewWndProc,"PreviewWindow",(HBRUSH)GetStockObject(GRAY_BRUSH),FLAG_DBLCLK)) return 0;
2491
2492 //Web検索用のウィンドウクラス
2493 if(!RegWndClass(WebResultWndProc,"WebResult",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2494 if(!RegWndClass(OneTabProc,"OneTab",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2495 if(!RegWndClass(ResultListProc,"ResultList",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2496
2497 //ルーラーのウィンドウクラス
2498 if(!RegWndClass(RulerProc,"Ruler",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2499
2500 //SideWebのウィンドウクラス
2501 if(!RegWndClass(SideWebProc,"SideWeb",(HBRUSH)COLOR_APPWORKSPACE+1,FLAG_DBLCLK)) return 0;
2502
2503 ActiveBasic::IDE::Program::Main();
2504
2505 //return 0;
2506
2507
2508 hAccel=LoadAccelerators(hResInst,MAKEINTRESOURCE(IDR_ACCELERATOR1));
2509
2510 //メインウィンドウ
2511 RECT *prc;
2512 prc=&pobj_nv->StartupWindowRect;
2513 /*
2514 hOwner=CreateWindowEx(WS_EX_ACCEPTFILES,"ProjectEditorClass",APPLICATION_NAME,
2515 WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
2516 prc->left, prc->top,
2517 prc->right-prc->left, prc->bottom-prc->top,
2518 HWND_DESKTOP,pobj_MainMenu->hMenu,hInst,NULL);
2519 */
2520
2521 //バックアップ用タイマーを設定(10秒に一回)
2522 SetTimer(hOwner,ID_TIMER_BACKUP,10000,NULL);
2523
2524 SendMessage(hOwner,WM_SETICON,ICON_SMALL,(long)hOwnerIcon);
2525 SetClipboardViewer(hOwner);
2526
2527 if(pobj_nv->bWindowMax) ShowWindow(hOwner,SW_MAXIMIZE);
2528 else ShowWindow(hOwner,ShowCmd);
2529 UpdateWindow(hOwner);
2530
2531 int open_sw=0;
2532 if(lstrlen(lpCmdLine)>0){
2533 lstrcpy(dummy,lpCmdLine);
2534 for(i=0,i2=0,IsStr=0;;i++,i2++){
2535 if(dummy[i]=='\"'){
2536 if(IsStr==0) IsStr=1;
2537 else IsStr=0;
2538 i++;
2539 }
2540 if((dummy[i]==' '&&IsStr==0)||dummy[i]=='\0'){
2541 str[i2]=0;
2542 if(!(strstr(str,":")||strstr(str,"\\\\"))){
2543 lstrcpy(str2,str);
2544 GetCurrentDirectory(MAX_PATH,str);
2545 lstrcat(str,"\\");
2546 lstrcat(str,str2);
2547 }
2548 ShortPathToLongPath(str,str2);
2549 OpenFileWithExtension(str2);
2550 open_sw=1;
2551 if(dummy[i]=='\0') break;
2552 i2=-1;
2553 continue;
2554 }
2555 str[i2]=dummy[i];
2556 }
2557 }
2558
2559 BOOL bRestore=0;
2560
2561
2562 {
2563 //自動バックアップ及び復元機能
2564
2565 //必要であれば復元
2566 bRestore=restore();
2567 }
2568
2569
2570#ifdef THETEXT
2571 if(open_sw==0&&bRestore==0){
2572 //ファイルが開かれなかったとき
2573 NewTextEditWindow(NULL,WNDTYPE_TEXT);
2574 }
2575#endif
2576
2577
2578 while(GetMessage(&msg,NULL,0,0)){
2579
2580 if(!TranslateAccelerator(hOwner,hAccel,&msg)){
2581 if(ProjectInfo.name[0]){
2582 for(i=0,i2=0;i<MAX_WNDNUM;i++){
2583 if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
2584 if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
2585 }
2586 }
2587 if(i2==0){
2588 if(!TranslateMDISysAccel(hClient,&msg)){
2589 TranslateMessage(&msg);
2590 DispatchMessage(&msg);
2591 }
2592 }
2593 }
2594 else{
2595 if(!TranslateMDISysAccel(hClient,&msg)){
2596 TranslateMessage(&msg);
2597 DispatchMessage(&msg);
2598 }
2599 }
2600 }
2601 }
2602
2603 DeleteObject(hGrayBrush_LineNumber);
2604
2605#if defined HeapAlloc
2606 CheckHeapCheck();
2607#endif
2608
2609 return msg.wParam;
2610}
Note: See TracBrowser for help on using the repository browser.