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

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

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

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