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

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

CHILDINFOの管理方法をstd::vectorに変更。

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 WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
631 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
632
633 //クリップボードに格納するためのデータを用意する
634 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.x-=17;
635 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.y-=10;
636 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
637 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.x+=17;
638 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.y+=10;
639
640 OpenClipboard();
641 EmptyClipboard();
642 extern DWORD dwRadClipboardID;
643 SetClipboardData(dwRadClipboardID,hGlobal);
644 CloseClipboard();
645
646 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
647 }
648 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
649 //クリップボードに格納するためのデータを用意する
650 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
651 if(hGlobal==0) return;
652
653 OpenClipboard();
654 EmptyClipboard();
655 SetClipboardData(CF_BITMAP,hGlobal);
656 CloseClipboard();
657
658 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
659 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
660
661 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
662 }
663}
664
665void MainFrame::OnCmdCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
666{
667 HWND hChild=::GetWindow(hClient,GW_CHILD);
668 int WndNum=GetWndNum(hChild);
669 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
670 HWND hEdit = ::GetWindow(hChild,GW_CHILD);
671
672 CHARRANGE CharRange;
673 TextEdit_GetSel(WndNum,&CharRange);
674
675 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
676 char *pTemp=(char *)GlobalLock(hGlobal);
677 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
678 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
679 GlobalUnlock(hGlobal);
680
681 //クリップボードに保存
682 OpenClipboard();
683 EmptyClipboard();
684 SetClipboardData(CF_TEXT,hGlobal);
685 CloseClipboard();
686 }
687 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
688 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
689
690 //クリップボードに格納するためのデータを用意する
691 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
692
693 OpenClipboard();
694 EmptyClipboard();
695 extern DWORD dwRadClipboardID;
696 SetClipboardData(dwRadClipboardID,hGlobal);
697 CloseClipboard();
698 }
699 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
700 //クリップボードに格納するためのデータを用意する
701 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
702
703 OpenClipboard();
704 EmptyClipboard();
705 SetClipboardData(CF_BITMAP,hGlobal);
706 CloseClipboard();
707 }
708}
709
710void MainFrame::OnCmdPaste( UINT uNotifyCode, int nID, CWindow wndCtl )
711{
712 HWND hChild=::GetWindow(hClient,GW_CHILD);
713 int WndNum=GetWndNum(hChild);
714 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
715 HWND hEdit=::GetWindow(hChild,GW_CHILD);
716
717 //クリップボードを開く
718 OpenClipboard();
719 HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
720 if(!hGlobal){
721 CloseClipboard();
722 return;
723 }
724
725
726 char *pTemp;
727 if(pobj_nv->bPasteIndent){
728 //インデント整形
729 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
730 GlobalUnlock(hGlobal);
731 }
732 else pTemp=(char *)GlobalLock(hGlobal);
733
734
735 //テキストエディタの文字列をリプレイス
736 TextEdit_ReplaceUpdateUndoData(WndNum,
737 pTemp,
738 1,
739 1);
740
741 if(pobj_nv->bPasteIndent)
742 HeapDefaultFree(pTemp);
743 else
744 GlobalUnlock(hGlobal);
745
746 //クリップボードを閉じる
747 CloseClipboard();
748
749
750 //キャレット位置までスクロールする
751 TextEdit_ScrollCaret(WndNum,0);
752 ResetCaretPos(WndNum);
753 }
754 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
755 OpenClipboard();
756 extern DWORD dwRadClipboardID;
757 HGLOBAL hGlobal=GetClipboardData(dwRadClipboardID);
758 if(!hGlobal){
759 CloseClipboard();
760 return;
761 }
762 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
763 CloseClipboard();
764 }
765 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
766 OpenClipboard();
767 HGLOBAL hGlobal=GetClipboardData(CF_BITMAP);
768 if(!hGlobal){
769 CloseClipboard();
770 return;
771 }
772 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
773 CloseClipboard();
774 }
775}
776
777void MainFrame::OnCmdDelete( UINT uNotifyCode, int nID, CWindow wndCtl )
778{
779 HWND hChild=::GetWindow(hClient,GW_CHILD);
780 int WndNum=GetWndNum(hChild);
781 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
782 HWND hEdit=::GetWindow(hChild,GW_CHILD);
783 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
784 }
785 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
786 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
787}
788
789void MainFrame::OnCmdAllSelect( UINT uNotifyCode, int nID, CWindow wndCtl )
790{
791 HWND hChild=::GetWindow(hClient,GW_CHILD);
792 int WndNum=GetWndNum(hChild);
793 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
794 HWND hEdit=::GetWindow(hChild,GW_CHILD);
795
796 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
797 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
798
799 GetCaretPosFromBufferIndex(
800 MdiInfo[WndNum].pMdiTextEdit->buffer,
801 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
802 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
803
804 ::InvalidateRect(hEdit,NULL,0);
805
806 ResetState_EditMenu();
807 }
808 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
809 WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
810 for(int i3=0;i3<pWindowInfo->childWindowInfos.size();i3++){
811 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
812 }
813 DrawRadWindow(WndNum,pWindowInfo);
814 }
815}
816
817void MainFrame::OnCmdFind( UINT uNotifyCode, int nID, CWindow wndCtl )
818{
819 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),m_hWnd,(DLGPROC)DlgFind);
820}
821
822void MainFrame::OnCmdPermutation( UINT uNotifyCode, int nID, CWindow wndCtl )
823{
824 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),m_hWnd,(DLGPROC)DlgPermutation);
825}
826
827void MainFrame::OnCmdConvertX( UINT uNotifyCode, int nID, CWindow wndCtl )
828{
829 TextEdit_Convert( nID );
830}
831
832#ifdef THETEXT
833void MainFrame::OnCmdStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
834{
835 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,0);
836}
837
838void MainFrame::OnCmdSelStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
839{
840 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,1);
841}
842#endif
843
844void MainFrame::OnCmdProjectView( UINT uNotifyCode, int nID, CWindow wndCtl )
845{
846 extern HWND hProjectView;
847 bool isCheck = false;
848 if(pobj_nv->bClipProjectView){
849 if(::IsWindowVisible(hProjectView)){
850 ::ShowWindow(hProjectView,SW_HIDE);
851 }
852 else{
853 ::ShowWindow(hProjectView,SW_SHOW);
854 isCheck = true;
855 }
856 }
857 else{
858 extern HWND hProjectView_ToolWindow;
859 if(::IsWindowVisible(hProjectView_ToolWindow)){
860 ::ShowWindow(hProjectView_ToolWindow,SW_HIDE);
861 }
862 else{
863 ::ShowWindow(hProjectView_ToolWindow,SW_SHOW);
864 ::ShowWindow(hProjectView,SW_SHOW);
865 isCheck = true;
866 }
867 }
868 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,isCheck);
869
870 //再配置
871 ResizeOwnerWnd();
872
873 ::ShowWindow(hClient,SW_SHOW);
874}
875
876void MainFrame::OnCmdProjectOption( UINT uNotifyCode, int nID, CWindow wndCtl )
877{
878 DlgProjectOptionSetting( m_hWnd );
879}
880
881void MainFrame::OnCmdTopMost( UINT uNotifyCode, int nID, CWindow wndCtl )
882{
883 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
884 SetWindowPos( HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
885 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
886 }
887 else{
888 SetWindowPos( HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
889 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
890 }
891}
892
893void ResetState_ViewMenu(void);
894void MainFrame::OnCmdRightTurn( UINT uNotifyCode, int nID, CWindow wndCtl )
895{
896 pobj_nv->bRightTurn^=1;
897 ResetState_ViewMenu();
898
899 //トップのウィンドウを再描画
900 RedrawAllWindow();
901}
902
903void MainFrame::OnCmdSet( UINT uNotifyCode, int nID, CWindow wndCtl )
904{
905 DlgOptionSetting( m_hWnd );
906}
907
908void CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)
909{
910 std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;
911 STARTUPINFO si;
912 PROCESS_INFORMATION pi;
913 memset(&si,0,sizeof(STARTUPINFO));
914 si.cb=sizeof(STARTUPINFO);
915 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
916 si.wShowWindow = SW_HIDE;
917 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
918 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
919 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
920
921 char args[8192];
922 lstrcpy( args, argsStr.c_str() );
923
924 CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
925}
926
927#ifndef THETEXT
928void MainFrame::OnCmdDebug( UINT uNotifyCode, int nID, CWindow wndCtl )
929{
930 char temporary[1024], temp2[1024], temp3[1024];
931 if(pobj_Debugger->IsDebugging()){
932 pobj_Debugger->DebugContinue();
933 return;
934 }
935
936 HWND hChild = ::GetWindow(hClient,GW_CHILD);
937 if(ProjectInfo.name[0]){
938 //プロジェクトが開かれている場合
939 if(!SetProjectToRun()) return;
940
941 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
942 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
943 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
944 HANDLE hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
945 DWORD dwAccessBytes;
946 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
947 CloseHandle(hFile);
948
949 //ソースファイル名をtemp2へ
950 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
951
952 //出力ファイル名をtemp3へ
953 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
954 GetFullPath(temp3,ProjectInfo.dir);
955
956 if(IsNeedCompileForProject(1))
957 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,m_hWnd);
958 else
959 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,m_hWnd);
960
961 // DLLオプション
962 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
963
964 // SLLオプション
965 if( ProjectInfo.dwModuleType == MT_SLL ) lstrcat( temporary, " /static_library" );
966
967 //Unicodeオプション
968 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
969
970 //ブレークポイントをセーブ
971 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
972 }
973 else{
974 //単独ソースコード
975 if(!SetRunning(hChild)) return;
976 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
977 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
978 else
979 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
980
981 //ブレークポイントをセーブ
982 extern CDBBreakPoint *pobj_DBBreakPoint;
983 pobj_DBBreakPoint->SaveToTempFile();
984 }
985
986 //コンパイルビューをクリップするかどうか
987 extern BOOL bClipCompileView;
988 if(bClipCompileView){
989 lstrcat(temporary," /clip_compile_view");
990
991 //コンパイラビューを閉じる
992 extern HWND hCompileView;
993 if(hCompileView==(HWND)-1) return;
994 if(hCompileView){
995 hChild=hCompileView;
996 hCompileView=(HWND)-1;
997 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
998 }
999
1000 //重複起動防止のため
1001 hCompileView=(HWND)-1;
1002 }
1003
1004 //インクルードディレクトリ
1005 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1006 lstrcat(temporary,temp2);
1007
1008 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1009 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1010}
1011
1012void MainFrame::OnCmdDebugCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1013{
1014 char temporary[1024], temp2[1024], temp3[1024];
1015
1016 HWND hChild=::GetWindow(hClient,GW_CHILD);
1017 if(ProjectInfo.name[0]){
1018 //プロジェクトが開かれている場合
1019 if(!SetProjectToRun()) return;
1020
1021 //ソースファイル名をtemp2へ
1022 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1023
1024 //出力ファイル名をtemp3へ
1025 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
1026 GetFullPath(temp3,ProjectInfo.dir);
1027
1028 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,m_hWnd);
1029
1030 //DLLオプション
1031 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1032
1033 //Unicodeオプション
1034 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1035 }
1036 else{
1037 //単独ソースコード
1038 if(!SetRunning(hChild)) return;
1039 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1040 }
1041
1042 //コンパイルビューをクリップするかどうか
1043 extern BOOL bClipCompileView;
1044 if(bClipCompileView){
1045 lstrcat(temporary," /clip_compile_view");
1046
1047 //コンパイラビューを閉じる
1048 extern HWND hCompileView;
1049 if(hCompileView==(HWND)-1) return;
1050 if(hCompileView){
1051 hChild=hCompileView;
1052 hCompileView=(HWND)-1;
1053 if( ::IsWindow( hChild ) )
1054 {
1055 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1056 }
1057 }
1058
1059 //重複起動防止のため
1060 hCompileView=(HWND)-1;
1061 }
1062
1063 //インクルードディレクトリ
1064 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1065 lstrcat(temporary,temp2);
1066
1067 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1068 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1069
1070}
1071
1072void MainFrame::OnCmdAttach( UINT uNotifyCode, int nID, CWindow wndCtl )
1073{
1074 char temporary[1024], temp2[1024];
1075
1076 int idProcess;
1077 DWORD dwPlatform;
1078 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),m_hWnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
1079 if(idProcess==0) return;
1080
1081 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,m_hWnd);
1082
1083 //コンパイルビューをクリップするかどうか
1084 extern BOOL bClipCompileView;
1085 if(bClipCompileView){
1086 lstrcat(temporary," /clip_compile_view");
1087
1088 //コンパイラビューを閉じる
1089 extern HWND hCompileView;
1090 if(hCompileView==(HWND)-1) return;
1091 if(hCompileView){
1092 HWND hChild=hCompileView;
1093 hCompileView=(HWND)-1;
1094 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1095 }
1096
1097 //重複起動防止のため
1098 hCompileView=(HWND)-1;
1099 }
1100
1101 //インクルードディレクトリ
1102 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1103 lstrcat(temporary,temp2);
1104
1105 ActiveBasic::Common::Platform::EnumType platform;
1106 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1107 {
1108 platform = ActiveBasic::Common::Platform::X86;
1109 }
1110 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1111 {
1112 platform = ActiveBasic::Common::Platform::X64;
1113 }
1114 else
1115 {
1116 throw;
1117 }
1118
1119 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1120 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1121}
1122
1123void MainFrame::OnCmdReleaseCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1124{
1125 char temporary[1024], temp2[1024], temp3[1024];
1126
1127 HWND hChild=::GetWindow(hClient,GW_CHILD);
1128 if(ProjectInfo.name[0]){
1129 //プロジェクトが開かれている場合
1130 if(!SetProjectToRun()) return;
1131
1132 //ソースファイル名をtemp2へ
1133 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1134
1135 //出力ファイル名をtemp3へ
1136 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1137 GetFullPath(temp3,ProjectInfo.dir);
1138
1139 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,m_hWnd);
1140
1141 //DLLオプション
1142 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1143
1144 //Unicodeオプション
1145 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1146 }
1147 else{
1148 //単独ソースコード
1149 if(!SetRunning(hChild)) return;
1150 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1151 }
1152
1153 //コンパイルビューをクリップするかどうか
1154 extern BOOL bClipCompileView;
1155 if(bClipCompileView){
1156 lstrcat(temporary," /clip_compile_view");
1157
1158 //コンパイラビューを閉じる
1159 extern HWND hCompileView;
1160 if(hCompileView==(HWND)-1) return;
1161 if(hCompileView){
1162 hChild=hCompileView;
1163 hCompileView=(HWND)-1;
1164 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1165 }
1166
1167 //重複起動防止のため
1168 hCompileView=(HWND)-1;
1169 }
1170
1171 //インクルードディレクトリ
1172 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1173 lstrcat(temporary,temp2);
1174
1175 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1176 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1177}
1178
1179void MainFrame::OnCmdReleaseRun( UINT uNotifyCode, int nID, CWindow wndCtl )
1180{
1181 char temporary[1024], temp2[1024], temp3[1024];
1182
1183 HWND hChild=::GetWindow(hClient,GW_CHILD);
1184 if(ProjectInfo.name[0]){
1185/* //プロジェクトが開かれている場合
1186 if(!SetProjectToRun()) return;
1187
1188 //必要であればリリースコンパイル
1189 if(IsNeedCompileForProject(0))
1190 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1191
1192 if(ProjectInfo.dwModuleType==MT_DLL){
1193 lstrcpy(temporary,ProjectInfo.szExePath);
1194 }
1195 else{
1196 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1197 GetFullPath(temporary,ProjectInfo.dir);
1198 }
1199 }
1200 else{
1201/* //必要であればリリースコンパイル
1202 if(!SetRunning(hChild)) return;
1203
1204 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1205 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1206
1207 //単独ソースコード
1208 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1209 lstrcat(temporary,temp2);
1210 lstrcat(temporary,temp3);
1211 lstrcat(temporary,".exe");
1212 }
1213
1214 //インクルードディレクトリ
1215 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1216 lstrcat(temporary,temp2);
1217
1218 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1219}
1220
1221void MainFrame::OnCmdStepIn( UINT uNotifyCode, int nID, CWindow wndCtl )
1222{
1223 pobj_Debugger->StepIn();
1224}
1225
1226void MainFrame::OnCmdStepOver( UINT uNotifyCode, int nID, CWindow wndCtl )
1227{
1228 pobj_Debugger->StepOver();
1229}
1230
1231void MainFrame::OnCmdStepCursor( UINT uNotifyCode, int nID, CWindow wndCtl )
1232{
1233 pobj_Debugger->StepToCursor();
1234}
1235
1236void MainFrame::OnCmdBreakPoint( UINT uNotifyCode, int nID, CWindow wndCtl )
1237{
1238 if(ProjectInfo.name[0]){
1239 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1240 }
1241 else{
1242 extern CDBBreakPoint *pobj_DBBreakPoint;
1243 pobj_DBBreakPoint->Event_BreakPoint();
1244 }
1245}
1246
1247void MainFrame::OnCmdDebugStop( UINT uNotifyCode, int nID, CWindow wndCtl )
1248{
1249 pobj_Debugger->DebugStop();
1250}
1251
1252void MainFrame::OnCmdDebugPause( UINT uNotifyCode, int nID, CWindow wndCtl )
1253{
1254 pobj_Debugger->DebugPause();
1255}
1256
1257#endif // not THETEXT
1258
1259void MainFrame::OnCmdWebLink( UINT uNotifyCode, int nID, CWindow wndCtl )
1260{
1261 switch( nID )
1262 {
1263#ifndef THETEXT
1264 case IDM_COMMUNITY:
1265 OpenWebBrowser( "http://www.activebasic.com/forum/" );
1266 break;
1267 case IDM_COMMU_SEARCH:
1268 OpenWebBrowser( "http://www.activebasic.com/forum/search.php" );
1269 break;
1270 case IDM_COMMU_PM:
1271 OpenWebBrowser( "http://www.activebasic.com/forum/privmsg.php?folder=inbox" );
1272 break;
1273 case ID_COMMU_FORUM1:
1274 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=1" );
1275 break;
1276 case ID_COMMU_FORUM2:
1277 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=2" );
1278 break;
1279 case ID_COMMU_FORUM3:
1280 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=5" );
1281 break;
1282 case ID_COMMU_FORUM4:
1283 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=3" );
1284 break;
1285 case ID_COMMU_FORUM5:
1286 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=6" );
1287 break;
1288 case ID_COMMU_FORUM6:
1289 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=8" );
1290 break;
1291 case ID_COMMU_FORUM7:
1292 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=4" );
1293 break;
1294 case ID_COMMU_FORUM8:
1295 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=7" );
1296 break;
1297 case IDM_AB_WEBSITE:
1298 OpenWebBrowser( "http://www.activebasic.com/" );
1299 break;
1300 case IDM_ACTBDL:
1301 OpenWebBrowser( "http://www.activebasic.com/activebasic5/download.htm" );
1302 break;
1303#else
1304 case IDM_DSHOMEPAGE:
1305 OpenWebBrowser( "http://www.discoversoft.net/" );
1306 break;
1307#endif // not THETEXT
1308 default:
1309 throw;
1310 }
1311}
1312
1313void MainFrame::OnCmdTopics( UINT uNotifyCode, int nID, CWindow wndCtl )
1314{
1315 char temporary[1024];
1316#ifdef THETEXT
1317 sprintf(temporary,"%sTopics\\index.html",pj_editor_Dir);
1318 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1319#else
1320 sprintf(temporary,"%sBasicHelp.chm",pj_editor_Dir);
1321 HtmlHelp(NULL,temporary,HH_DISPLAY_TOPIC,0);
1322#endif
1323}
1324
1325void MainFrame::OnCmdAbout( UINT uNotifyCode, int nID, CWindow wndCtl )
1326{
1327 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),m_hWnd,(DLGPROC)DialogAbout);
1328}
1329
1330void MainFrame::OnCmdDocSelectBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1331{
1332 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1333}
1334
1335void MainFrame::OnCmdStandardBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1336{
1337 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1338}
1339
1340void MainFrame::OnCmdReleaseBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1341{
1342 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1343}
1344
1345void MainFrame::OnCmdDebugBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1346{
1347 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1348}
1349
1350void MainFrame::OnCmdSelectCompilerBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1351{
1352 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1353}
1354
1355void MainFrame::OnCmdNoGripper( UINT uNotifyCode, int nID, CWindow wndCtl )
1356{
1357 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1358 else pobj_nv->bNoGripper=1;
1359
1360 //レバーコントロールを再生成
1361 pobj_Rebar->ResetRebar();
1362
1363 //メニュー状態を設定
1364 ResetState_DocMenu();
1365}
1366
1367void MainFrame::OnCmdResetRebar( UINT uNotifyCode, int nID, CWindow wndCtl )
1368{
1369 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1370 if( MessageBox(STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION) == IDCANCEL )
1371 {
1372 return;
1373 }
1374
1375 //レバーコントロールを再生成
1376 pobj_Rebar->ResetInitRebar();
1377
1378 //メニュー状態を設定
1379 ResetState_DocMenu();
1380}
1381
1382void MainFrame::OnCmdAllCloseOmitMyself( UINT uNotifyCode, int nID, CWindow wndCtl )
1383{
1384 //このウィンドウ以外をすべて閉じる(&A)
1385 HWND hChild=::GetWindow(hClient,GW_CHILD);
1386 int WndNum=GetWndNum(hChild);
1387 for(int i=0;i<MAX_WNDNUM;i++){
1388 if(i==WndNum) continue;
1389 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1390 }
1391}
1392
1393void MainFrame::OnCmdPathCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
1394{
1395 HWND hChild=::GetWindow(hClient,GW_CHILD);
1396 int WndNum=GetWndNum(hChild);
1397
1398 //絶対パスをコピー
1399 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1400 char *pTemp=(char *)GlobalLock(hGlobal);
1401 lstrcpy(pTemp,MdiInfo[WndNum].path);
1402 GlobalUnlock(hGlobal);
1403
1404 //クリップボードに保存
1405 OpenClipboard();
1406 EmptyClipboard();
1407 SetClipboardData(CF_TEXT,hGlobal);
1408 CloseClipboard();
1409}
1410
1411void MainFrame::OnCmdFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
1412{
1413 HWND hChild=::GetWindow(hClient,GW_CHILD);
1414 int WndNum=GetWndNum(hChild);
1415
1416 char temporary[1024], temp2[1024];
1417 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1418 lstrcat(temporary,temp2);
1419
1420 OpenExplorer( temporary );
1421}
1422
1423void MainFrame::OnCmdDeleteFile( UINT uNotifyCode, int nID, CWindow wndCtl )
1424{
1425 HWND hChild=::GetWindow(hClient,GW_CHILD);
1426 int WndNum=GetWndNum(hChild);
1427
1428 char temporary[1024], temp2[1024];
1429 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1430 lstrcat(temporary,temp2);
1431
1432 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1433 if(MessageBox(temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return;
1434
1435 //ゴミ箱へ
1436 SHFILEOPSTRUCT fo;
1437 fo.hwnd=m_hWnd;
1438 fo.wFunc=FO_DELETE;
1439 fo.pFrom =MdiInfo[WndNum].path;
1440 fo.pTo="\0";
1441 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1442 SHFileOperation(&fo);
1443
1444 //閉じる
1445 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1446 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1447}
1448
1449void MainFrame::OnCmdColor( UINT uNotifyCode, int nID, CWindow wndCtl )
1450{
1451 static COLORREF colorUser=RGB(255,255,255);
1452
1453 switch( nID )
1454 {
1455 case IDM_USER_COLOR:
1456 {
1457 CHOOSECOLOR cc;
1458 COLORREF CusColors[16]={
1459 RGB(255,255,255),
1460 RGB(0,0,0),
1461 RGB(128,128,128),
1462 RGB(192,192,192),
1463 RGB(128,0,0),
1464 RGB(255,0,0),
1465 RGB(128,128,0),
1466 RGB(255,255,0),
1467 RGB(0,128,0),
1468 RGB(0,255,0),
1469 RGB(0,128,128),
1470 RGB(0,255,255),
1471 RGB(0,0,128),
1472 RGB(0,0,255),
1473 RGB(128,0,128),
1474 RGB(255,0,255)};
1475 cc.lStructSize=sizeof(CHOOSECOLOR);
1476 cc.hwndOwner=m_hWnd;
1477 cc.rgbResult=colorUser;
1478 cc.lpCustColors=CusColors;
1479 cc.Flags=CC_RGBINIT|CC_FULLOPEN;
1480 if(!ChooseColor(&cc)){
1481 return;
1482 }
1483 colorUser=cc.rgbResult;
1484 }
1485 case IDM_GRAY:
1486 case IDM_WHITE:
1487 case IDM_RED:
1488 case IDM_GREEN:
1489 case IDM_BLUE:
1490 case IDM_YELLOW:
1491 {
1492 HWND hChild=::GetWindow(hClient,GW_CHILD);
1493 int WndNum=GetWndNum(hChild);
1494
1495 TC_ITEM tcItem;
1496 tcItem.mask=TCIF_PARAM;
1497 if(nID==IDM_GRAY) tcItem.lParam=TABCOLOR_GRAY;
1498 if(nID==IDM_WHITE) tcItem.lParam=TABCOLOR_WHITE;
1499 if(nID==IDM_RED) tcItem.lParam=TABCOLOR_RED;
1500 if(nID==IDM_GREEN) tcItem.lParam=TABCOLOR_GREEN;
1501 if(nID==IDM_BLUE) tcItem.lParam=TABCOLOR_BLUE;
1502 if(nID==IDM_YELLOW) tcItem.lParam=TABCOLOR_YELLOW;
1503 if(nID==IDM_USER_COLOR) tcItem.lParam=colorUser;
1504 TabCtrl_SetItem(pobj_MainTab->hTab,
1505 TabCtrl_GetCurSel(pobj_MainTab->hTab),
1506 &tcItem);
1507 ::InvalidateRect(pobj_MainTab->hTab,NULL,0);
1508 break;
1509 }
1510 default:
1511 throw;
1512 }
1513}
Note: See TracBrowser for help on using the repository browser.