source: dev/trunk/ab5.0/abdev/abdev/src/MainFrame.cpp@ 534

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

hCompileViewが向こうの場合はSendMessageしないようにした。

File size: 40.6 KB
Line 
1#include "stdafx.h"
2
3using namespace ActiveBasic::IDE;
4using namespace ActiveBasic::IDE::WindowComponents;
5
6LRESULT CALLBACK WindowFunc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
7void SetupWindow(HWND hwnd);
8void ResetTextEditFont(HWND hwnd);
9
10void MainFrame::OpenWebBrowser( const std::string &url )
11{
12 ShellExecute(m_hWnd,"open",url.c_str(),"",NULL,SW_SHOWNORMAL);
13}
14
15void MainFrame::OpenExplorer( const std::string &path )
16{
17 ShellExecute(m_hWnd,"explore",path.c_str(),NULL,NULL,SW_SHOWNORMAL);
18}
19
20::LRESULT MainFrame::OnCreate( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
21{
22 // ウィンドウエリアマネージャに親ウィンドウを登録
23 wam.SetParentWnd( m_hWnd );
24
25 RECT rect;
26 GetClientRect( &rect );
27
28 // MDIベースを作成
29 mdiWindow = new MdiWindow();
30 mdiWindow->Create(
31 m_hWnd,
32 rect,
33 NULL,
34 WS_CHILD
35 );
36 wam.AddMdiWindow( mdiWindow );
37
38
39
40
41
42 extern HWND hOwner;
43 hOwner = m_hWnd;
44 extern WNDPROC oldMainFrameWndProc;
45 oldMainFrameWndProc = (WNDPROC)::GetWindowLong( hOwner, GWL_WNDPROC );
46 ::SetWindowLong( hOwner, GWL_WNDPROC, (LONG)WindowFunc );
47
48 SetupWindow(hOwner);
49
50 //テキストエディタフォント設定
51 ResetTextEditFont(hOwner);
52
53
54
55 return 0;
56}
57
58void MainFrame::OnSize(UINT nType, CSize size)
59{
60 //mdiWindow->MoveWindow( 0, 0, size.cx, size.cy );
61}
62
63BOOL MainFrame::OnQueryEndSession(UINT nSource, UINT uLogOff)
64{
65 OnClose();
66
67 return TRUE;
68}
69
70void MainFrame::OnClose()
71{
72 extern BOOL bSearchingClasses;
73 if(bSearchingClasses){
74 pobj_ClassTreeView->bCloseSwitch=1;
75 return;
76 }
77
78 //コンパイラビューを閉じる
79 extern HWND hCompileView;
80 if( hCompileView && ::IsWindow( hCompileView ) )
81 {
82 SendMessage(hCompileView,WM_COMMAND,IDCANCEL,0);
83 }
84
85 //次回起動時にMDIウィンドウを最大化させるかを判定
86 HWND hChild=::GetWindow(hClient,GW_CHILD);
87 pobj_nv->bMDIZoomed=::IsZoomed(hChild);
88
89 //プロジェクトを閉じる
90 if(ProjectInfo.name[0]){
91 if(!CloseProject()) return;
92 }
93
94 //MDIウィンドウの保存確認
95 hChild=::GetWindow(hClient,GW_CHILD);
96 while(hChild){
97 if(!DocumentModifyCheck(hChild)) return;
98 hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
99 }
100
101
102 KillTimer(ID_TIMER_BACKUP);
103
104
105 //ProjectViewの位置を保存、ProjectViewを破棄
106 extern HWND hProjectView;
107 extern HWND hProjectView_ToolWindow;
108 ::GetWindowRect(hProjectView_ToolWindow,&pobj_nv->rectProjectView);
109 ::DestroyWindow(hProjectView);
110 ::DestroyWindow(hProjectView_ToolWindow);
111
112 //Rebarの位置を保存、Rebarを破棄
113 delete pobj_Rebar;
114 pobj_Rebar=0;
115
116 //タブコントロールを破棄
117 delete pobj_MainTab;
118 pobj_MainTab=0;
119
120 //SideWebを破棄
121 delete pobj_SideWeb;
122 pobj_SideWeb=0;
123
124 //メインウィンドウの最大化有無、座標を保存
125 if(IsZoomed()) pobj_nv->bWindowMax=1;
126 else if(!IsIconic()){
127 pobj_nv->bWindowMax=0;
128 GetWindowRect(&pobj_nv->StartupWindowRect);
129 }
130
131 hChild=::GetWindow(hClient,GW_CHILD);
132 while(hChild){
133 CloseDocWindow(GetWndNum(hChild));
134 ::DestroyWindow(hChild);
135 hChild=::GetWindow(hClient,GW_CHILD);
136 }
137
138 EndProjectEditor(); //ProjectEditorの情報を保存
139
140 //エディタ用フォントを破棄
141 extern HFONT hFont_TextEdit,hFont_HyperLink_TextEdit;
142 if(hFont_TextEdit) DeleteObject(hFont_TextEdit);
143 if(hFont_HyperLink_TextEdit) DeleteObject(hFont_HyperLink_TextEdit);
144
145 DestroyWindow();
146}
147void MainFrame::OnDestroy()
148{
149 mdiWindow->DestroyWindow();
150 delete mdiWindow;
151
152 ::PostQuitMessage( 0 );
153}
154
155void backup(void *dummy);
156void MainFrame::OnTimer( UINT_PTR id )
157{
158 switch( id )
159 {
160 case ID_TIMER_BACKUP:
161 _beginthread( backup, 0, 0 );
162 break;
163
164#ifndef THETEXT
165 case ID_DEBUGSAFTY:
166 {
167 //BasicCompiler.exeが強制終了しているかどうかを検証
168 extern CDebugger *pobj_Debugger;
169 pobj_Debugger->SaftyCheck();
170 break;
171 }
172#endif
173 }
174}
175
176void ResetState_EditMenu(void);
177void MainFrame::OnDrawClipboard()
178{
179 ResetState_EditMenu();
180}
181
182void MenuAdvice(WPARAM msg);
183void MainFrame::OnMenuSelect( UINT nItemID, UINT nFlags, HMENU menu )
184{
185 MenuAdvice( nItemID );
186}
187
188void MainFrame::OnInitMenu( HMENU menu )
189{
190 extern CNonVolatile *pobj_nv;
191 extern CSubMenuEx *pobj_FileHistoryMenu;
192 pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
193#ifndef THETEXT
194 extern CSubMenuEx *pobj_ProjectHistoryMenu;
195 pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
196#endif
197}
198
199void MainFrame::OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMI )
200{
201 if(lpMI->CtlType==ODT_MENU){
202 SIZE size;
203 CMenuItemData *pobj_MenuItemData;
204 pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
205 if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
206 //メインメニューの親アイテム
207 pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
208 lpMI->itemWidth = size.cx;
209 lpMI->itemHeight = size.cy;
210 }
211 else{
212 //メインメニューにぶらさがるサブメニュー
213 pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
214 lpMI->itemWidth = size.cx;
215 lpMI->itemHeight = size.cy;
216 }
217 }
218}
219
220void MainFrame::OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )
221{
222 if(lpDrawItemStruct->CtlType==ODT_MENU){
223 if(!pobj_MainMenu) return;
224
225 CMenuItemData *pobj_MenuItemData;
226 pobj_MenuItemData=(CMenuItemData *)lpDrawItemStruct->itemData;
227 if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
228 //メインメニューの親アイテム
229 pobj_MainMenu->OwnerDrawMenu(lpDrawItemStruct->hDC,
230 &lpDrawItemStruct->rcItem,
231 (lpDrawItemStruct->itemState&ODS_SELECTED)!=0,
232 pobj_MenuItemData->item_index);
233 }
234 else{
235 //メインメニューにぶらさがるサブメニュー
236 pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
237 lpDrawItemStruct->hDC,
238 &lpDrawItemStruct->rcItem,
239 (lpDrawItemStruct->itemState&ODS_SELECTED)!=0,
240 pobj_MenuItemData->item_index);
241 }
242 }
243}
244
245LRESULT MainFrame::OnNotify( int idCtrl, LPNMHDR pnmh )
246{
247 NMPGCALCSIZE *lpCalcSize;
248 NMPGSCROLL *lpScroll;
249
250 if(!pnmh) return 0;
251 LPTOOLTIPTEXT TipText=(LPTOOLTIPTEXT)pnmh;
252 if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
253
254 extern HWND hStandardToolbarPager;
255 extern HWND hDebuggerToolbarPager;
256 if(pobj_Rebar){
257 //レバーオブジェクトが存在するとき
258 if(pnmh->hwndFrom==pobj_Rebar->hRebar&&pnmh->code==RBN_HEIGHTCHANGE){
259 ResizeOwnerWnd();
260 return 0;
261 }
262 }
263 if(pnmh->hwndFrom==hStandardToolbarPager){
264 if(pnmh->code==PGN_CALCSIZE){
265 lpCalcSize=(LPNMPGCALCSIZE)pnmh;
266 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
267 lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
268 }
269 else if(pnmh->code==PGN_SCROLL){
270 lpScroll=(LPNMPGSCROLL)pnmh;
271 lpScroll->iScroll=20;
272 }
273 }
274 else if(pnmh->hwndFrom==hDebuggerToolbarPager){
275 if(pnmh->code==PGN_CALCSIZE){
276 lpCalcSize=(LPNMPGCALCSIZE)pnmh;
277 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
278 lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
279 }
280 else if(pnmh->code==PGN_SCROLL){
281 lpScroll=(LPNMPGSCROLL)pnmh;
282 lpScroll->iScroll=20;
283 }
284 }
285
286 if(pobj_MainTab){
287 if(pnmh->hwndFrom==pobj_MainTab->hTab){
288 if(pnmh->code==TCN_SELCHANGE)
289 pobj_MainTab->SelChangeEvent();
290
291 if(pnmh->code==NM_RCLICK){
292
293 TCHITTESTINFO tcHitTest;
294 GetCursorPos(&tcHitTest.pt);
295 ::ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
296 int index = TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
297 if( index == -1 ) return 0;
298
299 TabCtrl_SetCurSel(pobj_MainTab->hTab,index);
300
301 pobj_MainTab->SelChangeEvent();
302
303
304 /////////////////////
305 // メニューを表示
306 /////////////////////
307
308 HWND hChild=::GetWindow(hClient,GW_CHILD);
309 int WndNum=GetWndNum(hChild);
310
311 //保存コマンドの文字列をセット
312 char temporary[1024], temp2[1024];
313 MENUITEMINFO mii;
314 mii.cbSize=sizeof(MENUITEMINFO);
315 mii.fMask=MIIM_TYPE;
316 mii.dwTypeData=temporary;
317 mii.fType=MFT_STRING;
318 if(MdiInfo[WndNum].path[0]){
319 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
320 lstrcat(temporary,temp2);
321 lstrcat(temporary," を保存(&S)");
322 }
323 else{
324 lstrcpy(temporary,"保存(&S)");
325 }
326 extern HMENU hTabMenu;
327 SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
328
329 /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
330 コマンドを場合によって無効化にする */
331 if(MdiInfo[WndNum].path[0]){
332 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
333 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
334 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
335 }
336 else{
337 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
338 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
339 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
340 }
341
342 POINT MousePos;
343 GetCursorPos(&MousePos);
344 TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
345 }
346 }
347 }
348 if(pobj_SideWeb){
349 if(pnmh->hwndFrom==pobj_SideWeb->hTab&&pnmh->code==TCN_SELCHANGE){
350 pobj_SideWeb->SelChangeEvent();
351 }
352 }
353
354 return 0;
355}
356
357void MainFrame::OnDropFiles( HDROP hDropInfo )
358{
359 int max = DragQueryFile(hDropInfo,-1,0,0);
360 for(int i=0;i<max;i++){
361 char temporary[1024];
362 DragQueryFile(hDropInfo,i,temporary,MAX_PATH);
363 OpenFileWithExtension(temporary);
364 }
365 DragFinish(hDropInfo);
366}
367
368::LRESULT MainFrame::OnShowSourceLine( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
369{
370 char temporary[1024];
371
372 //エラー部分を反転表示
373 DWORD AccBytes;
374 HANDLE fh;
375 sprintf(temporary,"%spgm.tmp",pj_editor_Dir);
376 fh=CreateFile(temporary,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
377 ReadFile(fh,temporary,MAX_PATH,&AccBytes,NULL);
378 CloseHandle(fh);
379 temporary[AccBytes]=0;
380 HWND hChild=::GetWindow(hClient,GW_CHILD);
381 int WndNum = -1;
382 while(hChild){
383 WndNum=GetWndNum(hChild);
384 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
385 if(lstrcmpi(MdiInfo[WndNum].path,temporary)==0) break;
386 }
387 hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
388 }
389 if(!hChild){
390 hChild=OpenFileWithExtension(temporary);
391 WndNum=GetWndNum(hChild);
392 }
393
394 if(WndNum==-1) return 0;
395
396 //ウィンドウを最前面に表示
397 ::BringWindowToTop(hChild);
398 ::UpdateWindow(hChild);
399
400 char *pTemp=MdiInfo[WndNum].pMdiTextEdit->buffer;
401
402 //行の先頭インデックスを取得(取得する行の番号はwParamで渡される)
403 int i,i2;
404 for(i=0,i2=0;;i++){
405 if(i2>=(int)wParam) break;
406 if(pTemp[i]=='\0') break;
407 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n'){
408 i++;
409 i2++;
410 }
411 }
412 POINT pos;
413 pos.x=i;
414
415 //行の終端インデックスを取得
416 for(;;i++){
417 if(pTemp[i]=='\0') break;
418 if(pTemp[i]=='\r'&&pTemp[i+1]=='\n') break;
419 }
420 pos.y=i;
421
422 //行を選択する
423 TextEdit_SetSel(WndNum,pos.x,pos.y,TRUE);
424
425 return 0;
426}
427
428void MainFrame::OnCmdNew( UINT uNotifyCode, int nID, CWindow wndCtl )
429{
430
431#ifdef THETEXT
432 NewTextEditWindow(NULL,WNDTYPE_TEXT);
433 return;
434#else
435 int FileType;
436 BOOL bAddToProject;
437 char temporary[MAX_PATH];
438
439 FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,(DLGPROC)DlgNewFile);
440 if(FileType==-1) return;
441
442 if(FileType&0x00008000){
443 bAddToProject=1;
444 FileType&=0x0FFF;
445 extern char NewFileName[MAX_PATH];
446 lstrcpy(temporary,NewFileName);
447 if(!strstr(temporary,".")) lstrcat(temporary,".ab");
448 GetFullPath(temporary,ProjectInfo.dir);
449 }
450 else bAddToProject=0;
451
452 switch(FileType){
453 case FT_BASICPROGRAM: //Basicプログラム
454 case FT_SUBPROGRAM:
455 if(bAddToProject){
456 WriteBuffer(temporary,0,0);
457 NewTextEditWindow(temporary,WNDTYPE_BASIC);
458 Project_File_Insert(temporary);
459 }
460 else NewTextEditWindow(NULL,WNDTYPE_BASIC);
461 break;
462
463 case FT_PROJECT:
464 DlgNewProjectWizard(hOwner);
465 break;
466
467 case FT_TEXT:
468 NewTextEditWindow(NULL,WNDTYPE_TEXT);
469 break;
470
471 case FT_HTML:
472 NewTextEditWindow(NULL,WNDTYPE_HTML);
473 break;
474
475 case FT_ICON:
476 NewIconEditWindow(NULL);
477 break;
478 }
479#endif
480}
481
482void MainFrame::OnCmdOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
483{
484 //"ファイルを指定してください"
485 extern LPSTR DefFileFilter;
486 char temporary[1024];
487 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return;
488
489 OpenFileWithExtension( temporary );
490}
491
492void MainFrame::OnCmdClose( UINT uNotifyCode, int nID, CWindow wndCtl )
493{
494 HWND hChild=::GetWindow(hClient,GW_CHILD);
495 if(::IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
496}
497
498void MainFrame::OnCmdProjectOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
499{
500 //"プロジェクト ファイルを指定して下さい"
501 extern LPSTR ProjectFileFilter;
502 char temporary[1024];
503 if(!GetFilePathDialog(m_hWnd,temporary,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE))
504 {
505 return;
506 }
507
508 OpenProject(temporary);
509}
510
511void MainFrame::OnCmdProjectSave( UINT uNotifyCode, int nID, CWindow wndCtl )
512{
513 SaveProject();
514}
515
516void MainFrame::OnCmdProjectClose( UINT uNotifyCode, int nID, CWindow wndCtl )
517{
518 CloseProject();
519}
520
521void MainFrame::OnCmdProjectFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
522{
523 ShellExecute(m_hWnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
524}
525
526void MainFrame::OnCmdSave( UINT uNotifyCode, int nID, CWindow wndCtl )
527{
528 SaveDocument(::GetWindow(hClient,GW_CHILD),NULL);
529}
530
531void MainFrame::OnCmdNewSave( UINT uNotifyCode, int nID, CWindow wndCtl )
532{
533 //"保存先のファイルを指定してください"
534 extern LPSTR DefFileFilter;
535 char temporary[1024];
536 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return;
537
538 SaveDocument(::GetWindow(hClient,GW_CHILD),temporary);
539}
540
541void MainFrame::OnCmdCodeSave( UINT uNotifyCode, int nID, CWindow wndCtl )
542{
543 //文字コードを指定して保存
544 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),m_hWnd,(DLGPROC)nkfDlgCodeSave);
545}
546
547void MainFrame::OnCmdAllSave( UINT uNotifyCode, int nID, CWindow wndCtl )
548{
549 for( int i=0;i<MAX_WNDNUM;i++){
550 if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
551 }
552 if(ProjectInfo.name[0]) SaveProject();
553}
554
555void MainFrame::OnCmdPageSet( UINT uNotifyCode, int nID, CWindow wndCtl )
556{
557 //ページ設定
558 obj_Page.SetupDlg();
559}
560
561void MainFrame::OnCmdPreview( UINT uNotifyCode, int nID, CWindow wndCtl )
562{
563 //プレビュー(Pro版のみ)
564 Preview();
565}
566
567void MainFrame::OnCmdPrintOut( UINT uNotifyCode, int nID, CWindow wndCtl )
568{
569 //印刷
570 Printout();
571}
572
573void MainFrame::OnCmdExit( UINT uNotifyCode, int nID, CWindow wndCtl )
574{
575 SendMessage(WM_CLOSE);
576}
577
578void MainFrame::OnCmdUndo( UINT uNotifyCode, int nID, CWindow wndCtl )
579{
580 HWND hChild=::GetWindow(hClient,GW_CHILD);
581 if(!hChild) return;
582 int WndNum=GetWndNum(hChild);
583 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
584 TextEdit_UndoCommand(WndNum);
585 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
586 Rad_UndoCommand(WndNum);
587 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
588 IconEdit_UndoCommand(WndNum);
589}
590
591void MainFrame::OnCmdRedo( UINT uNotifyCode, int nID, CWindow wndCtl )
592{
593 HWND hChild=::GetWindow(hClient,GW_CHILD);
594 if(!hChild) return;
595 int WndNum=GetWndNum(hChild);
596 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
597 TextEdit_RedoCommand(WndNum);
598 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
599 Rad_RedoCommand(WndNum);
600 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
601 IconEdit_RedoCommand(WndNum);
602}
603
604void MainFrame::OnCmdCut( UINT uNotifyCode, int nID, CWindow wndCtl )
605{
606 HWND hChild=::GetWindow(hClient,GW_CHILD);
607 int WndNum=GetWndNum(hChild);
608 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
609 HWND hEdit=::GetWindow(hChild,GW_CHILD);
610
611 CHARRANGE CharRange;
612 TextEdit_GetSel(WndNum,&CharRange);
613
614 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
615 char *pTemp=(char *)GlobalLock(hGlobal);
616 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
617 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
618 GlobalUnlock(hGlobal);
619
620 //クリップボードに保存
621 OpenClipboard();
622 EmptyClipboard();
623 SetClipboardData(CF_TEXT,hGlobal);
624 CloseClipboard();
625
626 //選択文字列を消去
627 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
628 }
629 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
630 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
631
632 //クリップボードに格納するためのデータを用意する
633 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
634 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
635 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
636 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17;
637 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10;
638
639 OpenClipboard();
640 EmptyClipboard();
641 extern DWORD dwRadClipboardID;
642 SetClipboardData(dwRadClipboardID,hGlobal);
643 CloseClipboard();
644
645 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
646 }
647 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
648 //クリップボードに格納するためのデータを用意する
649 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
650 if(hGlobal==0) return;
651
652 OpenClipboard();
653 EmptyClipboard();
654 SetClipboardData(CF_BITMAP,hGlobal);
655 CloseClipboard();
656
657 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
658 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
659
660 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
661 }
662}
663
664void MainFrame::OnCmdCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
665{
666 HWND hChild=::GetWindow(hClient,GW_CHILD);
667 int WndNum=GetWndNum(hChild);
668 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
669 HWND hEdit = ::GetWindow(hChild,GW_CHILD);
670
671 CHARRANGE CharRange;
672 TextEdit_GetSel(WndNum,&CharRange);
673
674 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
675 char *pTemp=(char *)GlobalLock(hGlobal);
676 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
677 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
678 GlobalUnlock(hGlobal);
679
680 //クリップボードに保存
681 OpenClipboard();
682 EmptyClipboard();
683 SetClipboardData(CF_TEXT,hGlobal);
684 CloseClipboard();
685 }
686 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
687 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
688
689 //クリップボードに格納するためのデータを用意する
690 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
691
692 OpenClipboard();
693 EmptyClipboard();
694 extern DWORD dwRadClipboardID;
695 SetClipboardData(dwRadClipboardID,hGlobal);
696 CloseClipboard();
697 }
698 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
699 //クリップボードに格納するためのデータを用意する
700 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
701
702 OpenClipboard();
703 EmptyClipboard();
704 SetClipboardData(CF_BITMAP,hGlobal);
705 CloseClipboard();
706 }
707}
708
709void MainFrame::OnCmdPaste( UINT uNotifyCode, int nID, CWindow wndCtl )
710{
711 HWND hChild=::GetWindow(hClient,GW_CHILD);
712 int WndNum=GetWndNum(hChild);
713 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
714 HWND hEdit=::GetWindow(hChild,GW_CHILD);
715
716 //クリップボードを開く
717 OpenClipboard();
718 HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
719 if(!hGlobal){
720 CloseClipboard();
721 return;
722 }
723
724
725 char *pTemp;
726 if(pobj_nv->bPasteIndent){
727 //インデント整形
728 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
729 GlobalUnlock(hGlobal);
730 }
731 else pTemp=(char *)GlobalLock(hGlobal);
732
733
734 //テキストエディタの文字列をリプレイス
735 TextEdit_ReplaceUpdateUndoData(WndNum,
736 pTemp,
737 1,
738 1);
739
740 if(pobj_nv->bPasteIndent)
741 HeapDefaultFree(pTemp);
742 else
743 GlobalUnlock(hGlobal);
744
745 //クリップボードを閉じる
746 CloseClipboard();
747
748
749 //キャレット位置までスクロールする
750 TextEdit_ScrollCaret(WndNum,0);
751 ResetCaretPos(WndNum);
752 }
753 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
754 OpenClipboard();
755 extern DWORD dwRadClipboardID;
756 HGLOBAL hGlobal=GetClipboardData(dwRadClipboardID);
757 if(!hGlobal){
758 CloseClipboard();
759 return;
760 }
761 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
762 CloseClipboard();
763 }
764 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
765 OpenClipboard();
766 HGLOBAL hGlobal=GetClipboardData(CF_BITMAP);
767 if(!hGlobal){
768 CloseClipboard();
769 return;
770 }
771 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
772 CloseClipboard();
773 }
774}
775
776void MainFrame::OnCmdDelete( UINT uNotifyCode, int nID, CWindow wndCtl )
777{
778 HWND hChild=::GetWindow(hClient,GW_CHILD);
779 int WndNum=GetWndNum(hChild);
780 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
781 HWND hEdit=::GetWindow(hChild,GW_CHILD);
782 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
783 }
784 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
785 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
786}
787
788void MainFrame::OnCmdAllSelect( UINT uNotifyCode, int nID, CWindow wndCtl )
789{
790 HWND hChild=::GetWindow(hClient,GW_CHILD);
791 int WndNum=GetWndNum(hChild);
792 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
793 HWND hEdit=::GetWindow(hChild,GW_CHILD);
794
795 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
796 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
797
798 GetCaretPosFromBufferIndex(
799 MdiInfo[WndNum].pMdiTextEdit->buffer,
800 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
801 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
802
803 ::InvalidateRect(hEdit,NULL,0);
804
805 ResetState_EditMenu();
806 }
807 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
808 int i2=GetWndInfoNum(MdiInfo[WndNum].path);
809 for(int i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
810 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
811 }
812 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
813 }
814}
815
816void MainFrame::OnCmdFind( UINT uNotifyCode, int nID, CWindow wndCtl )
817{
818 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),m_hWnd,(DLGPROC)DlgFind);
819}
820
821void MainFrame::OnCmdPermutation( UINT uNotifyCode, int nID, CWindow wndCtl )
822{
823 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),m_hWnd,(DLGPROC)DlgPermutation);
824}
825
826void MainFrame::OnCmdConvertX( UINT uNotifyCode, int nID, CWindow wndCtl )
827{
828 TextEdit_Convert( nID );
829}
830
831#ifdef THETEXT
832void MainFrame::OnCmdStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
833{
834 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,0);
835}
836
837void MainFrame::OnCmdSelStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
838{
839 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,1);
840}
841#endif
842
843void MainFrame::OnCmdProjectView( UINT uNotifyCode, int nID, CWindow wndCtl )
844{
845 extern HWND hProjectView;
846 bool isCheck = false;
847 if(pobj_nv->bClipProjectView){
848 if(::IsWindowVisible(hProjectView)){
849 ::ShowWindow(hProjectView,SW_HIDE);
850 }
851 else{
852 ::ShowWindow(hProjectView,SW_SHOW);
853 isCheck = true;
854 }
855 }
856 else{
857 extern HWND hProjectView_ToolWindow;
858 if(::IsWindowVisible(hProjectView_ToolWindow)){
859 ::ShowWindow(hProjectView_ToolWindow,SW_HIDE);
860 }
861 else{
862 ::ShowWindow(hProjectView_ToolWindow,SW_SHOW);
863 ::ShowWindow(hProjectView,SW_SHOW);
864 isCheck = true;
865 }
866 }
867 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,isCheck);
868
869 //再配置
870 ResizeOwnerWnd();
871
872 ::ShowWindow(hClient,SW_SHOW);
873}
874
875void MainFrame::OnCmdProjectOption( UINT uNotifyCode, int nID, CWindow wndCtl )
876{
877 DlgProjectOptionSetting( m_hWnd );
878}
879
880void MainFrame::OnCmdTopMost( UINT uNotifyCode, int nID, CWindow wndCtl )
881{
882 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
883 SetWindowPos( HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
884 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
885 }
886 else{
887 SetWindowPos( HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
888 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
889 }
890}
891
892void ResetState_ViewMenu(void);
893void MainFrame::OnCmdRightTurn( UINT uNotifyCode, int nID, CWindow wndCtl )
894{
895 pobj_nv->bRightTurn^=1;
896 ResetState_ViewMenu();
897
898 //トップのウィンドウを再描画
899 RedrawAllWindow();
900}
901
902void MainFrame::OnCmdSet( UINT uNotifyCode, int nID, CWindow wndCtl )
903{
904 DlgOptionSetting( m_hWnd );
905}
906
907void CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)
908{
909 std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;
910 STARTUPINFO si;
911 PROCESS_INFORMATION pi;
912 memset(&si,0,sizeof(STARTUPINFO));
913 si.cb=sizeof(STARTUPINFO);
914 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
915 si.wShowWindow = SW_HIDE;
916 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
917 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
918 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
919
920 char args[8192];
921 lstrcpy( args, argsStr.c_str() );
922
923 CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
924}
925
926#ifndef THETEXT
927void MainFrame::OnCmdDebug( UINT uNotifyCode, int nID, CWindow wndCtl )
928{
929 char temporary[1024], temp2[1024], temp3[1024];
930 if(pobj_Debugger->IsDebugging()){
931 pobj_Debugger->DebugContinue();
932 return;
933 }
934
935 HWND hChild = ::GetWindow(hClient,GW_CHILD);
936 if(ProjectInfo.name[0]){
937 //プロジェクトが開かれている場合
938 if(!SetProjectToRun()) return;
939
940 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
941 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
942 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
943 HANDLE hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
944 DWORD dwAccessBytes;
945 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
946 CloseHandle(hFile);
947
948 //ソースファイル名をtemp2へ
949 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
950
951 //出力ファイル名をtemp3へ
952 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
953 GetFullPath(temp3,ProjectInfo.dir);
954
955 if(IsNeedCompileForProject(1))
956 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,m_hWnd);
957 else
958 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,m_hWnd);
959
960 //DLLオプション
961 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
962
963 //Unicodeオプション
964 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
965
966 //ブレークポイントをセーブ
967 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
968 }
969 else{
970 //単独ソースコード
971 if(!SetRunning(hChild)) return;
972 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
973 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
974 else
975 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
976
977 //ブレークポイントをセーブ
978 extern CDBBreakPoint *pobj_DBBreakPoint;
979 pobj_DBBreakPoint->SaveToTempFile();
980 }
981
982 //コンパイルビューをクリップするかどうか
983 extern BOOL bClipCompileView;
984 if(bClipCompileView){
985 lstrcat(temporary," /clip_compile_view");
986
987 //コンパイラビューを閉じる
988 extern HWND hCompileView;
989 if(hCompileView==(HWND)-1) return;
990 if(hCompileView){
991 hChild=hCompileView;
992 hCompileView=(HWND)-1;
993 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
994 }
995
996 //重複起動防止のため
997 hCompileView=(HWND)-1;
998 }
999
1000 //インクルードディレクトリ
1001 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1002 lstrcat(temporary,temp2);
1003
1004 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1005 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1006}
1007
1008void MainFrame::OnCmdDebugCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1009{
1010 char temporary[1024], temp2[1024], temp3[1024];
1011
1012 HWND hChild=::GetWindow(hClient,GW_CHILD);
1013 if(ProjectInfo.name[0]){
1014 //プロジェクトが開かれている場合
1015 if(!SetProjectToRun()) return;
1016
1017 //ソースファイル名をtemp2へ
1018 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1019
1020 //出力ファイル名をtemp3へ
1021 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1022 GetFullPath(temp3,ProjectInfo.dir);
1023
1024 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,m_hWnd);
1025
1026 //DLLオプション
1027 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1028
1029 //Unicodeオプション
1030 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1031 }
1032 else{
1033 //単独ソースコード
1034 if(!SetRunning(hChild)) return;
1035 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1036 }
1037
1038 //コンパイルビューをクリップするかどうか
1039 extern BOOL bClipCompileView;
1040 if(bClipCompileView){
1041 lstrcat(temporary," /clip_compile_view");
1042
1043 //コンパイラビューを閉じる
1044 extern HWND hCompileView;
1045 if(hCompileView==(HWND)-1) return;
1046 if(hCompileView){
1047 hChild=hCompileView;
1048 hCompileView=(HWND)-1;
1049 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1050 }
1051
1052 //重複起動防止のため
1053 hCompileView=(HWND)-1;
1054 }
1055
1056 //インクルードディレクトリ
1057 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1058 lstrcat(temporary,temp2);
1059
1060 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1061 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1062
1063}
1064
1065void MainFrame::OnCmdAttach( UINT uNotifyCode, int nID, CWindow wndCtl )
1066{
1067 char temporary[1024], temp2[1024];
1068
1069 int idProcess;
1070 DWORD dwPlatform;
1071 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),m_hWnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1072 if(idProcess==0) return;
1073
1074 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,m_hWnd);
1075
1076 //コンパイルビューをクリップするかどうか
1077 extern BOOL bClipCompileView;
1078 if(bClipCompileView){
1079 lstrcat(temporary," /clip_compile_view");
1080
1081 //コンパイラビューを閉じる
1082 extern HWND hCompileView;
1083 if(hCompileView==(HWND)-1) return;
1084 if(hCompileView){
1085 HWND hChild=hCompileView;
1086 hCompileView=(HWND)-1;
1087 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1088 }
1089
1090 //重複起動防止のため
1091 hCompileView=(HWND)-1;
1092 }
1093
1094 //インクルードディレクトリ
1095 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1096 lstrcat(temporary,temp2);
1097
1098 ActiveBasic::Common::Platform::EnumType platform;
1099 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1100 {
1101 platform = ActiveBasic::Common::Platform::X86;
1102 }
1103 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1104 {
1105 platform = ActiveBasic::Common::Platform::X64;
1106 }
1107 else
1108 {
1109 throw;
1110 }
1111
1112 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1113 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1114}
1115
1116void MainFrame::OnCmdReleaseCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1117{
1118 char temporary[1024], temp2[1024], temp3[1024];
1119
1120 HWND hChild=::GetWindow(hClient,GW_CHILD);
1121 if(ProjectInfo.name[0]){
1122 //プロジェクトが開かれている場合
1123 if(!SetProjectToRun()) return;
1124
1125 //ソースファイル名をtemp2へ
1126 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1127
1128 //出力ファイル名をtemp3へ
1129 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1130 GetFullPath(temp3,ProjectInfo.dir);
1131
1132 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,m_hWnd);
1133
1134 //DLLオプション
1135 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1136
1137 //Unicodeオプション
1138 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1139 }
1140 else{
1141 //単独ソースコード
1142 if(!SetRunning(hChild)) return;
1143 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1144 }
1145
1146 //コンパイルビューをクリップするかどうか
1147 extern BOOL bClipCompileView;
1148 if(bClipCompileView){
1149 lstrcat(temporary," /clip_compile_view");
1150
1151 //コンパイラビューを閉じる
1152 extern HWND hCompileView;
1153 if(hCompileView==(HWND)-1) return;
1154 if(hCompileView){
1155 hChild=hCompileView;
1156 hCompileView=(HWND)-1;
1157 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1158 }
1159
1160 //重複起動防止のため
1161 hCompileView=(HWND)-1;
1162 }
1163
1164 //インクルードディレクトリ
1165 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1166 lstrcat(temporary,temp2);
1167
1168 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1169 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1170}
1171
1172void MainFrame::OnCmdReleaseRun( UINT uNotifyCode, int nID, CWindow wndCtl )
1173{
1174 char temporary[1024], temp2[1024], temp3[1024];
1175
1176 HWND hChild=::GetWindow(hClient,GW_CHILD);
1177 if(ProjectInfo.name[0]){
1178/* //プロジェクトが開かれている場合
1179 if(!SetProjectToRun()) return;
1180
1181 //必要であればリリースコンパイル
1182 if(IsNeedCompileForProject(0))
1183 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1184
1185 if(ProjectInfo.dwModuleType==MT_DLL){
1186 lstrcpy(temporary,ProjectInfo.szExePath);
1187 }
1188 else{
1189 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1190 GetFullPath(temporary,ProjectInfo.dir);
1191 }
1192 }
1193 else{
1194/* //必要であればリリースコンパイル
1195 if(!SetRunning(hChild)) return;
1196
1197 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1198 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1199
1200 //単独ソースコード
1201 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1202 lstrcat(temporary,temp2);
1203 lstrcat(temporary,temp3);
1204 lstrcat(temporary,".exe");
1205 }
1206
1207 //インクルードディレクトリ
1208 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1209 lstrcat(temporary,temp2);
1210
1211 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1212}
1213
1214void MainFrame::OnCmdStepIn( UINT uNotifyCode, int nID, CWindow wndCtl )
1215{
1216 pobj_Debugger->StepIn();
1217}
1218
1219void MainFrame::OnCmdStepOver( UINT uNotifyCode, int nID, CWindow wndCtl )
1220{
1221 pobj_Debugger->StepOver();
1222}
1223
1224void MainFrame::OnCmdStepCursor( UINT uNotifyCode, int nID, CWindow wndCtl )
1225{
1226 pobj_Debugger->StepToCursor();
1227}
1228
1229void MainFrame::OnCmdBreakPoint( UINT uNotifyCode, int nID, CWindow wndCtl )
1230{
1231 if(ProjectInfo.name[0]){
1232 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1233 }
1234 else{
1235 extern CDBBreakPoint *pobj_DBBreakPoint;
1236 pobj_DBBreakPoint->Event_BreakPoint();
1237 }
1238}
1239
1240void MainFrame::OnCmdDebugStop( UINT uNotifyCode, int nID, CWindow wndCtl )
1241{
1242 pobj_Debugger->DebugStop();
1243}
1244
1245void MainFrame::OnCmdDebugPause( UINT uNotifyCode, int nID, CWindow wndCtl )
1246{
1247 pobj_Debugger->DebugPause();
1248}
1249
1250#endif // not THETEXT
1251
1252void MainFrame::OnCmdWebLink( UINT uNotifyCode, int nID, CWindow wndCtl )
1253{
1254 switch( nID )
1255 {
1256#ifndef THETEXT
1257 case IDM_COMMUNITY:
1258 OpenWebBrowser( "http://www.activebasic.com/forum/" );
1259 break;
1260 case IDM_COMMU_SEARCH:
1261 OpenWebBrowser( "http://www.activebasic.com/forum/search.php" );
1262 break;
1263 case IDM_COMMU_PM:
1264 OpenWebBrowser( "http://www.activebasic.com/forum/privmsg.php?folder=inbox" );
1265 break;
1266 case ID_COMMU_FORUM1:
1267 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=1" );
1268 break;
1269 case ID_COMMU_FORUM2:
1270 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=2" );
1271 break;
1272 case ID_COMMU_FORUM3:
1273 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=5" );
1274 break;
1275 case ID_COMMU_FORUM4:
1276 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=3" );
1277 break;
1278 case ID_COMMU_FORUM5:
1279 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=6" );
1280 break;
1281 case ID_COMMU_FORUM6:
1282 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=8" );
1283 break;
1284 case ID_COMMU_FORUM7:
1285 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=4" );
1286 break;
1287 case ID_COMMU_FORUM8:
1288 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=7" );
1289 break;
1290 case IDM_AB_WEBSITE:
1291 OpenWebBrowser( "http://www.activebasic.com/" );
1292 break;
1293 case IDM_ACTBDL:
1294 OpenWebBrowser( "http://www.activebasic.com/activebasic5/download.htm" );
1295 break;
1296#else
1297 case IDM_DSHOMEPAGE:
1298 OpenWebBrowser( "http://www.discoversoft.net/" );
1299 break;
1300#endif // not THETEXT
1301 default:
1302 throw;
1303 }
1304}
1305
1306void MainFrame::OnCmdTopics( UINT uNotifyCode, int nID, CWindow wndCtl )
1307{
1308 char temporary[1024];
1309#ifdef THETEXT
1310 sprintf(temporary,"%sTopics\\index.html",pj_editor_Dir);
1311 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1312#else
1313 sprintf(temporary,"%sBasicHelp.chm",pj_editor_Dir);
1314 HtmlHelp(NULL,temporary,HH_DISPLAY_TOPIC,0);
1315#endif
1316}
1317
1318void MainFrame::OnCmdAbout( UINT uNotifyCode, int nID, CWindow wndCtl )
1319{
1320 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),m_hWnd,(DLGPROC)DialogAbout);
1321}
1322
1323void MainFrame::OnCmdDocSelectBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1324{
1325 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1326}
1327
1328void MainFrame::OnCmdStandardBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1329{
1330 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1331}
1332
1333void MainFrame::OnCmdReleaseBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1334{
1335 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1336}
1337
1338void MainFrame::OnCmdDebugBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1339{
1340 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1341}
1342
1343void MainFrame::OnCmdSelectCompilerBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1344{
1345 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1346}
1347
1348void MainFrame::OnCmdNoGripper( UINT uNotifyCode, int nID, CWindow wndCtl )
1349{
1350 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1351 else pobj_nv->bNoGripper=1;
1352
1353 //レバーコントロールを再生成
1354 pobj_Rebar->ResetRebar();
1355
1356 //メニュー状態を設定
1357 ResetState_DocMenu();
1358}
1359
1360void MainFrame::OnCmdResetRebar( UINT uNotifyCode, int nID, CWindow wndCtl )
1361{
1362 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1363 if( MessageBox(STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION) == IDCANCEL )
1364 {
1365 return;
1366 }
1367
1368 //レバーコントロールを再生成
1369 pobj_Rebar->ResetInitRebar();
1370
1371 //メニュー状態を設定
1372 ResetState_DocMenu();
1373}
1374
1375void MainFrame::OnCmdAllCloseOmitMyself( UINT uNotifyCode, int nID, CWindow wndCtl )
1376{
1377 //このウィンドウ以外をすべて閉じる(&A)
1378 HWND hChild=::GetWindow(hClient,GW_CHILD);
1379 int WndNum=GetWndNum(hChild);
1380 for(int i=0;i<MAX_WNDNUM;i++){
1381 if(i==WndNum) continue;
1382 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1383 }
1384}
1385
1386void MainFrame::OnCmdPathCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
1387{
1388 HWND hChild=::GetWindow(hClient,GW_CHILD);
1389 int WndNum=GetWndNum(hChild);
1390
1391 //絶対パスをコピー
1392 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1393 char *pTemp=(char *)GlobalLock(hGlobal);
1394 lstrcpy(pTemp,MdiInfo[WndNum].path);
1395 GlobalUnlock(hGlobal);
1396
1397 //クリップボードに保存
1398 OpenClipboard();
1399 EmptyClipboard();
1400 SetClipboardData(CF_TEXT,hGlobal);
1401 CloseClipboard();
1402}
1403
1404void MainFrame::OnCmdFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
1405{
1406 HWND hChild=::GetWindow(hClient,GW_CHILD);
1407 int WndNum=GetWndNum(hChild);
1408
1409 char temporary[1024], temp2[1024];
1410 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1411 lstrcat(temporary,temp2);
1412
1413 OpenExplorer( temporary );
1414}
1415
1416void MainFrame::OnCmdDeleteFile( UINT uNotifyCode, int nID, CWindow wndCtl )
1417{
1418 HWND hChild=::GetWindow(hClient,GW_CHILD);
1419 int WndNum=GetWndNum(hChild);
1420
1421 char temporary[1024], temp2[1024];
1422 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1423 lstrcat(temporary,temp2);
1424
1425 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1426 if(MessageBox(temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return;
1427
1428 //ゴミ箱へ
1429 SHFILEOPSTRUCT fo;
1430 fo.hwnd=m_hWnd;
1431 fo.wFunc=FO_DELETE;
1432 fo.pFrom =MdiInfo[WndNum].path;
1433 fo.pTo="\0";
1434 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1435 SHFileOperation(&fo);
1436
1437 //閉じる
1438 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1439 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1440}
1441
1442void MainFrame::OnCmdColor( UINT uNotifyCode, int nID, CWindow wndCtl )
1443{
1444 static COLORREF colorUser=RGB(255,255,255);
1445
1446 switch( nID )
1447 {
1448 case IDM_USER_COLOR:
1449 {
1450 CHOOSECOLOR cc;
1451 COLORREF CusColors[16]={
1452 RGB(255,255,255),
1453 RGB(0,0,0),
1454 RGB(128,128,128),
1455 RGB(192,192,192),
1456 RGB(128,0,0),
1457 RGB(255,0,0),
1458 RGB(128,128,0),
1459 RGB(255,255,0),
1460 RGB(0,128,0),
1461 RGB(0,255,0),
1462 RGB(0,128,128),
1463 RGB(0,255,255),
1464 RGB(0,0,128),
1465 RGB(0,0,255),
1466 RGB(128,0,128),
1467 RGB(255,0,255)};
1468 cc.lStructSize=sizeof(CHOOSECOLOR);
1469 cc.hwndOwner=m_hWnd;
1470 cc.rgbResult=colorUser;
1471 cc.lpCustColors=CusColors;
1472 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1473 if(!ChooseColor(&cc)){
1474 return;
1475 }
1476 colorUser=cc.rgbResult;
1477 }
1478 case IDM_GRAY:
1479 case IDM_WHITE:
1480 case IDM_RED:
1481 case IDM_GREEN:
1482 case IDM_BLUE:
1483 case IDM_YELLOW:
1484 {
1485 HWND hChild=::GetWindow(hClient,GW_CHILD);
1486 int WndNum=GetWndNum(hChild);
1487
1488 TC_ITEM tcItem;
1489 tcItem.mask=TCIF_PARAM;
1490 if(nID==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1491 if(nID==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1492 if(nID==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1493 if(nID==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1494 if(nID==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1495 if(nID==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1496 if(nID==IDM_USER_COLOR) tcItem.lParam=colorUser;
1497 TabCtrl_SetItem(pobj_MainTab->hTab,
1498 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1499 &tcItem);
1500 ::InvalidateRect(pobj_MainTab->hTab,NULL,0);
1501 break;
1502 }
1503 default:
1504 throw;
1505 }
1506}
Note: See TracBrowser for help on using the repository browser.