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

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

静的リンクライブラリプロジェクトの作成(IDE側)に対応。

File size: 40.8 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 // SLLオプション
964 if( ProjectInfo.dwModuleType == MT_SLL ) lstrcat( temporary, " /static_library" );
965
966 //Unicodeオプション
967 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
968
969 //ブレークポイントをセーブ
970 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
971 }
972 else{
973 //単独ソースコード
974 if(!SetRunning(hChild)) return;
975 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
976 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
977 else
978 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
979
980 //ブレークポイントをセーブ
981 extern CDBBreakPoint *pobj_DBBreakPoint;
982 pobj_DBBreakPoint->SaveToTempFile();
983 }
984
985 //コンパイルビューをクリップするかどうか
986 extern BOOL bClipCompileView;
987 if(bClipCompileView){
988 lstrcat(temporary," /clip_compile_view");
989
990 //コンパイラビューを閉じる
991 extern HWND hCompileView;
992 if(hCompileView==(HWND)-1) return;
993 if(hCompileView){
994 hChild=hCompileView;
995 hCompileView=(HWND)-1;
996 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
997 }
998
999 //重複起動防止のため
1000 hCompileView=(HWND)-1;
1001 }
1002
1003 //インクルードディレクトリ
1004 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1005 lstrcat(temporary,temp2);
1006
1007 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1008 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1009}
1010
1011void MainFrame::OnCmdDebugCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1012{
1013 char temporary[1024], temp2[1024], temp3[1024];
1014
1015 HWND hChild=::GetWindow(hClient,GW_CHILD);
1016 if(ProjectInfo.name[0]){
1017 //プロジェクトが開かれている場合
1018 if(!SetProjectToRun()) return;
1019
1020 //ソースファイル名をtemp2へ
1021 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1022
1023 //出力ファイル名をtemp3へ
1024 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1025 GetFullPath(temp3,ProjectInfo.dir);
1026
1027 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,m_hWnd);
1028
1029 //DLLオプション
1030 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1031
1032 //Unicodeオプション
1033 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1034 }
1035 else{
1036 //単独ソースコード
1037 if(!SetRunning(hChild)) return;
1038 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1039 }
1040
1041 //コンパイルビューをクリップするかどうか
1042 extern BOOL bClipCompileView;
1043 if(bClipCompileView){
1044 lstrcat(temporary," /clip_compile_view");
1045
1046 //コンパイラビューを閉じる
1047 extern HWND hCompileView;
1048 if(hCompileView==(HWND)-1) return;
1049 if(hCompileView){
1050 hChild=hCompileView;
1051 hCompileView=(HWND)-1;
1052 if( ::IsWindow( hChild ) )
1053 {
1054 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1055 }
1056 }
1057
1058 //重複起動防止のため
1059 hCompileView=(HWND)-1;
1060 }
1061
1062 //インクルードディレクトリ
1063 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1064 lstrcat(temporary,temp2);
1065
1066 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1067 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1068
1069}
1070
1071void MainFrame::OnCmdAttach( UINT uNotifyCode, int nID, CWindow wndCtl )
1072{
1073 char temporary[1024], temp2[1024];
1074
1075 int idProcess;
1076 DWORD dwPlatform;
1077 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),m_hWnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1078 if(idProcess==0) return;
1079
1080 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,m_hWnd);
1081
1082 //コンパイルビューをクリップするかどうか
1083 extern BOOL bClipCompileView;
1084 if(bClipCompileView){
1085 lstrcat(temporary," /clip_compile_view");
1086
1087 //コンパイラビューを閉じる
1088 extern HWND hCompileView;
1089 if(hCompileView==(HWND)-1) return;
1090 if(hCompileView){
1091 HWND hChild=hCompileView;
1092 hCompileView=(HWND)-1;
1093 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1094 }
1095
1096 //重複起動防止のため
1097 hCompileView=(HWND)-1;
1098 }
1099
1100 //インクルードディレクトリ
1101 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1102 lstrcat(temporary,temp2);
1103
1104 ActiveBasic::Common::Platform::EnumType platform;
1105 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1106 {
1107 platform = ActiveBasic::Common::Platform::X86;
1108 }
1109 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1110 {
1111 platform = ActiveBasic::Common::Platform::X64;
1112 }
1113 else
1114 {
1115 throw;
1116 }
1117
1118 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1119 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1120}
1121
1122void MainFrame::OnCmdReleaseCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1123{
1124 char temporary[1024], temp2[1024], temp3[1024];
1125
1126 HWND hChild=::GetWindow(hClient,GW_CHILD);
1127 if(ProjectInfo.name[0]){
1128 //プロジェクトが開かれている場合
1129 if(!SetProjectToRun()) return;
1130
1131 //ソースファイル名をtemp2へ
1132 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1133
1134 //出力ファイル名をtemp3へ
1135 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1136 GetFullPath(temp3,ProjectInfo.dir);
1137
1138 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,m_hWnd);
1139
1140 //DLLオプション
1141 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1142
1143 //Unicodeオプション
1144 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1145 }
1146 else{
1147 //単独ソースコード
1148 if(!SetRunning(hChild)) return;
1149 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1150 }
1151
1152 //コンパイルビューをクリップするかどうか
1153 extern BOOL bClipCompileView;
1154 if(bClipCompileView){
1155 lstrcat(temporary," /clip_compile_view");
1156
1157 //コンパイラビューを閉じる
1158 extern HWND hCompileView;
1159 if(hCompileView==(HWND)-1) return;
1160 if(hCompileView){
1161 hChild=hCompileView;
1162 hCompileView=(HWND)-1;
1163 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1164 }
1165
1166 //重複起動防止のため
1167 hCompileView=(HWND)-1;
1168 }
1169
1170 //インクルードディレクトリ
1171 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1172 lstrcat(temporary,temp2);
1173
1174 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1175 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1176}
1177
1178void MainFrame::OnCmdReleaseRun( UINT uNotifyCode, int nID, CWindow wndCtl )
1179{
1180 char temporary[1024], temp2[1024], temp3[1024];
1181
1182 HWND hChild=::GetWindow(hClient,GW_CHILD);
1183 if(ProjectInfo.name[0]){
1184/* //プロジェクトが開かれている場合
1185 if(!SetProjectToRun()) return;
1186
1187 //必要であればリリースコンパイル
1188 if(IsNeedCompileForProject(0))
1189 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1190
1191 if(ProjectInfo.dwModuleType==MT_DLL){
1192 lstrcpy(temporary,ProjectInfo.szExePath);
1193 }
1194 else{
1195 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1196 GetFullPath(temporary,ProjectInfo.dir);
1197 }
1198 }
1199 else{
1200/* //必要であればリリースコンパイル
1201 if(!SetRunning(hChild)) return;
1202
1203 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1204 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1205
1206 //単独ソースコード
1207 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1208 lstrcat(temporary,temp2);
1209 lstrcat(temporary,temp3);
1210 lstrcat(temporary,".exe");
1211 }
1212
1213 //インクルードディレクトリ
1214 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1215 lstrcat(temporary,temp2);
1216
1217 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1218}
1219
1220void MainFrame::OnCmdStepIn( UINT uNotifyCode, int nID, CWindow wndCtl )
1221{
1222 pobj_Debugger->StepIn();
1223}
1224
1225void MainFrame::OnCmdStepOver( UINT uNotifyCode, int nID, CWindow wndCtl )
1226{
1227 pobj_Debugger->StepOver();
1228}
1229
1230void MainFrame::OnCmdStepCursor( UINT uNotifyCode, int nID, CWindow wndCtl )
1231{
1232 pobj_Debugger->StepToCursor();
1233}
1234
1235void MainFrame::OnCmdBreakPoint( UINT uNotifyCode, int nID, CWindow wndCtl )
1236{
1237 if(ProjectInfo.name[0]){
1238 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1239 }
1240 else{
1241 extern CDBBreakPoint *pobj_DBBreakPoint;
1242 pobj_DBBreakPoint->Event_BreakPoint();
1243 }
1244}
1245
1246void MainFrame::OnCmdDebugStop( UINT uNotifyCode, int nID, CWindow wndCtl )
1247{
1248 pobj_Debugger->DebugStop();
1249}
1250
1251void MainFrame::OnCmdDebugPause( UINT uNotifyCode, int nID, CWindow wndCtl )
1252{
1253 pobj_Debugger->DebugPause();
1254}
1255
1256#endif // not THETEXT
1257
1258void MainFrame::OnCmdWebLink( UINT uNotifyCode, int nID, CWindow wndCtl )
1259{
1260 switch( nID )
1261 {
1262#ifndef THETEXT
1263 case IDM_COMMUNITY:
1264 OpenWebBrowser( "http://www.activebasic.com/forum/" );
1265 break;
1266 case IDM_COMMU_SEARCH:
1267 OpenWebBrowser( "http://www.activebasic.com/forum/search.php" );
1268 break;
1269 case IDM_COMMU_PM:
1270 OpenWebBrowser( "http://www.activebasic.com/forum/privmsg.php?folder=inbox" );
1271 break;
1272 case ID_COMMU_FORUM1:
1273 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=1" );
1274 break;
1275 case ID_COMMU_FORUM2:
1276 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=2" );
1277 break;
1278 case ID_COMMU_FORUM3:
1279 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=5" );
1280 break;
1281 case ID_COMMU_FORUM4:
1282 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=3" );
1283 break;
1284 case ID_COMMU_FORUM5:
1285 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=6" );
1286 break;
1287 case ID_COMMU_FORUM6:
1288 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=8" );
1289 break;
1290 case ID_COMMU_FORUM7:
1291 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=4" );
1292 break;
1293 case ID_COMMU_FORUM8:
1294 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=7" );
1295 break;
1296 case IDM_AB_WEBSITE:
1297 OpenWebBrowser( "http://www.activebasic.com/" );
1298 break;
1299 case IDM_ACTBDL:
1300 OpenWebBrowser( "http://www.activebasic.com/activebasic5/download.htm" );
1301 break;
1302#else
1303 case IDM_DSHOMEPAGE:
1304 OpenWebBrowser( "http://www.discoversoft.net/" );
1305 break;
1306#endif // not THETEXT
1307 default:
1308 throw;
1309 }
1310}
1311
1312void MainFrame::OnCmdTopics( UINT uNotifyCode, int nID, CWindow wndCtl )
1313{
1314 char temporary[1024];
1315#ifdef THETEXT
1316 sprintf(temporary,"%sTopics\\index.html",pj_editor_Dir);
1317 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1318#else
1319 sprintf(temporary,"%sBasicHelp.chm",pj_editor_Dir);
1320 HtmlHelp(NULL,temporary,HH_DISPLAY_TOPIC,0);
1321#endif
1322}
1323
1324void MainFrame::OnCmdAbout( UINT uNotifyCode, int nID, CWindow wndCtl )
1325{
1326 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),m_hWnd,(DLGPROC)DialogAbout);
1327}
1328
1329void MainFrame::OnCmdDocSelectBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1330{
1331 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1332}
1333
1334void MainFrame::OnCmdStandardBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1335{
1336 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1337}
1338
1339void MainFrame::OnCmdReleaseBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1340{
1341 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1342}
1343
1344void MainFrame::OnCmdDebugBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1345{
1346 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1347}
1348
1349void MainFrame::OnCmdSelectCompilerBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1350{
1351 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1352}
1353
1354void MainFrame::OnCmdNoGripper( UINT uNotifyCode, int nID, CWindow wndCtl )
1355{
1356 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1357 else pobj_nv->bNoGripper=1;
1358
1359 //レバーコントロールを再生成
1360 pobj_Rebar->ResetRebar();
1361
1362 //メニュー状態を設定
1363 ResetState_DocMenu();
1364}
1365
1366void MainFrame::OnCmdResetRebar( UINT uNotifyCode, int nID, CWindow wndCtl )
1367{
1368 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1369 if( MessageBox(STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION) == IDCANCEL )
1370 {
1371 return;
1372 }
1373
1374 //レバーコントロールを再生成
1375 pobj_Rebar->ResetInitRebar();
1376
1377 //メニュー状態を設定
1378 ResetState_DocMenu();
1379}
1380
1381void MainFrame::OnCmdAllCloseOmitMyself( UINT uNotifyCode, int nID, CWindow wndCtl )
1382{
1383 //このウィンドウ以外をすべて閉じる(&A)
1384 HWND hChild=::GetWindow(hClient,GW_CHILD);
1385 int WndNum=GetWndNum(hChild);
1386 for(int i=0;i<MAX_WNDNUM;i++){
1387 if(i==WndNum) continue;
1388 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1389 }
1390}
1391
1392void MainFrame::OnCmdPathCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
1393{
1394 HWND hChild=::GetWindow(hClient,GW_CHILD);
1395 int WndNum=GetWndNum(hChild);
1396
1397 //絶対パスをコピー
1398 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1399 char *pTemp=(char *)GlobalLock(hGlobal);
1400 lstrcpy(pTemp,MdiInfo[WndNum].path);
1401 GlobalUnlock(hGlobal);
1402
1403 //クリップボードに保存
1404 OpenClipboard();
1405 EmptyClipboard();
1406 SetClipboardData(CF_TEXT,hGlobal);
1407 CloseClipboard();
1408}
1409
1410void MainFrame::OnCmdFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
1411{
1412 HWND hChild=::GetWindow(hClient,GW_CHILD);
1413 int WndNum=GetWndNum(hChild);
1414
1415 char temporary[1024], temp2[1024];
1416 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1417 lstrcat(temporary,temp2);
1418
1419 OpenExplorer( temporary );
1420}
1421
1422void MainFrame::OnCmdDeleteFile( UINT uNotifyCode, int nID, CWindow wndCtl )
1423{
1424 HWND hChild=::GetWindow(hClient,GW_CHILD);
1425 int WndNum=GetWndNum(hChild);
1426
1427 char temporary[1024], temp2[1024];
1428 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1429 lstrcat(temporary,temp2);
1430
1431 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1432 if(MessageBox(temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return;
1433
1434 //ゴミ箱へ
1435 SHFILEOPSTRUCT fo;
1436 fo.hwnd=m_hWnd;
1437 fo.wFunc=FO_DELETE;
1438 fo.pFrom =MdiInfo[WndNum].path;
1439 fo.pTo="\0";
1440 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1441 SHFileOperation(&fo);
1442
1443 //閉じる
1444 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1445 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1446}
1447
1448void MainFrame::OnCmdColor( UINT uNotifyCode, int nID, CWindow wndCtl )
1449{
1450 static COLORREF colorUser=RGB(255,255,255);
1451
1452 switch( nID )
1453 {
1454 case IDM_USER_COLOR:
1455 {
1456 CHOOSECOLOR cc;
1457 COLORREF CusColors[16]={
1458 RGB(255,255,255),
1459 RGB(0,0,0),
1460 RGB(128,128,128),
1461 RGB(192,192,192),
1462 RGB(128,0,0),
1463 RGB(255,0,0),
1464 RGB(128,128,0),
1465 RGB(255,255,0),
1466 RGB(0,128,0),
1467 RGB(0,255,0),
1468 RGB(0,128,128),
1469 RGB(0,255,255),
1470 RGB(0,0,128),
1471 RGB(0,0,255),
1472 RGB(128,0,128),
1473 RGB(255,0,255)};
1474 cc.lStructSize=sizeof(CHOOSECOLOR);
1475 cc.hwndOwner=m_hWnd;
1476 cc.rgbResult=colorUser;
1477 cc.lpCustColors=CusColors;
1478 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1479 if(!ChooseColor(&cc)){
1480 return;
1481 }
1482 colorUser=cc.rgbResult;
1483 }
1484 case IDM_GRAY:
1485 case IDM_WHITE:
1486 case IDM_RED:
1487 case IDM_GREEN:
1488 case IDM_BLUE:
1489 case IDM_YELLOW:
1490 {
1491 HWND hChild=::GetWindow(hClient,GW_CHILD);
1492 int WndNum=GetWndNum(hChild);
1493
1494 TC_ITEM tcItem;
1495 tcItem.mask=TCIF_PARAM;
1496 if(nID==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1497 if(nID==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1498 if(nID==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1499 if(nID==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1500 if(nID==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1501 if(nID==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1502 if(nID==IDM_USER_COLOR) tcItem.lParam=colorUser;
1503 TabCtrl_SetItem(pobj_MainTab->hTab,
1504 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1505 &tcItem);
1506 ::InvalidateRect(pobj_MainTab->hTab,NULL,0);
1507 break;
1508 }
1509 default:
1510 throw;
1511 }
1512}
Note: See TracBrowser for help on using the repository browser.