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

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

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

File size: 37.4 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::OnCmdNew( UINT uNotifyCode, int nID, CWindow wndCtl )
356{
357
358#ifdef THETEXT
359 NewTextEditWindow(NULL,WNDTYPE_TEXT);
360 return;
361#else
362 int FileType;
363 BOOL bAddToProject;
364 char temporary[MAX_PATH];
365
366 FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,(DLGPROC)DlgNewFile);
367 if(FileType==-1) return;
368
369 if(FileType&0x00008000){
370 bAddToProject=1;
371 FileType&=0x0FFF;
372 extern char NewFileName[MAX_PATH];
373 lstrcpy(temporary,NewFileName);
374 if(!strstr(temporary,".")) lstrcat(temporary,".ab");
375 GetFullPath(temporary,ProjectInfo.dir);
376 }
377 else bAddToProject=0;
378
379 switch(FileType){
380 case FT_BASICPROGRAM: //Basicプログラム
381 case FT_SUBPROGRAM:
382 if(bAddToProject){
383 WriteBuffer(temporary,0,0);
384 NewTextEditWindow(temporary,WNDTYPE_BASIC);
385 Project_File_Insert(temporary);
386 }
387 else NewTextEditWindow(NULL,WNDTYPE_BASIC);
388 break;
389
390 case FT_PROJECT:
391 DlgNewProjectWizard(hOwner);
392 break;
393
394 case FT_TEXT:
395 NewTextEditWindow(NULL,WNDTYPE_TEXT);
396 break;
397
398 case FT_HTML:
399 NewTextEditWindow(NULL,WNDTYPE_HTML);
400 break;
401
402 case FT_ICON:
403 NewIconEditWindow(NULL);
404 break;
405 }
406#endif
407}
408
409void MainFrame::OnCmdOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
410{
411 //"ファイルを指定してください"
412 extern LPSTR DefFileFilter;
413 char temporary[1024];
414 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return;
415
416 OpenFileWithExtension( temporary );
417}
418
419void MainFrame::OnCmdClose( UINT uNotifyCode, int nID, CWindow wndCtl )
420{
421 HWND hChild=::GetWindow(hClient,GW_CHILD);
422 if(::IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
423}
424
425void MainFrame::OnCmdProjectOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
426{
427 //"プロジェクト ファイルを指定して下さい"
428 extern LPSTR ProjectFileFilter;
429 char temporary[1024];
430 if(!GetFilePathDialog(m_hWnd,temporary,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE))
431 {
432 return;
433 }
434
435 OpenProject(temporary);
436}
437
438void MainFrame::OnCmdProjectSave( UINT uNotifyCode, int nID, CWindow wndCtl )
439{
440 SaveProject();
441}
442
443void MainFrame::OnCmdProjectClose( UINT uNotifyCode, int nID, CWindow wndCtl )
444{
445 CloseProject();
446}
447
448void MainFrame::OnCmdProjectFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
449{
450 ShellExecute(m_hWnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
451}
452
453void MainFrame::OnCmdSave( UINT uNotifyCode, int nID, CWindow wndCtl )
454{
455 SaveDocument(::GetWindow(hClient,GW_CHILD),NULL);
456}
457
458void MainFrame::OnCmdNewSave( UINT uNotifyCode, int nID, CWindow wndCtl )
459{
460 //"保存先のファイルを指定してください"
461 extern LPSTR DefFileFilter;
462 char temporary[1024];
463 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return;
464
465 SaveDocument(::GetWindow(hClient,GW_CHILD),temporary);
466}
467
468void MainFrame::OnCmdCodeSave( UINT uNotifyCode, int nID, CWindow wndCtl )
469{
470 //文字コードを指定して保存
471 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),m_hWnd,(DLGPROC)nkfDlgCodeSave);
472}
473
474void MainFrame::OnCmdAllSave( UINT uNotifyCode, int nID, CWindow wndCtl )
475{
476 for( int i=0;i<MAX_WNDNUM;i++){
477 if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
478 }
479 if(ProjectInfo.name[0]) SaveProject();
480}
481
482void MainFrame::OnCmdPageSet( UINT uNotifyCode, int nID, CWindow wndCtl )
483{
484 //ページ設定
485 obj_Page.SetupDlg();
486}
487
488void MainFrame::OnCmdPreview( UINT uNotifyCode, int nID, CWindow wndCtl )
489{
490 //プレビュー(Pro版のみ)
491 Preview();
492}
493
494void MainFrame::OnCmdPrintOut( UINT uNotifyCode, int nID, CWindow wndCtl )
495{
496 //印刷
497 Printout();
498}
499
500void MainFrame::OnCmdExit( UINT uNotifyCode, int nID, CWindow wndCtl )
501{
502 SendMessage(WM_CLOSE);
503}
504
505void MainFrame::OnCmdUndo( UINT uNotifyCode, int nID, CWindow wndCtl )
506{
507 HWND hChild=::GetWindow(hClient,GW_CHILD);
508 if(!hChild) return;
509 int WndNum=GetWndNum(hChild);
510 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
511 TextEdit_UndoCommand(WndNum);
512 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
513 Rad_UndoCommand(WndNum);
514 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
515 IconEdit_UndoCommand(WndNum);
516}
517
518void MainFrame::OnCmdRedo( UINT uNotifyCode, int nID, CWindow wndCtl )
519{
520 HWND hChild=::GetWindow(hClient,GW_CHILD);
521 if(!hChild) return;
522 int WndNum=GetWndNum(hChild);
523 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
524 TextEdit_RedoCommand(WndNum);
525 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
526 Rad_RedoCommand(WndNum);
527 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
528 IconEdit_RedoCommand(WndNum);
529}
530
531void MainFrame::OnCmdCut( UINT uNotifyCode, int nID, CWindow wndCtl )
532{
533 HWND hChild=::GetWindow(hClient,GW_CHILD);
534 int WndNum=GetWndNum(hChild);
535 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
536 HWND hEdit=::GetWindow(hChild,GW_CHILD);
537
538 CHARRANGE CharRange;
539 TextEdit_GetSel(WndNum,&CharRange);
540
541 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
542 char *pTemp=(char *)GlobalLock(hGlobal);
543 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
544 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
545 GlobalUnlock(hGlobal);
546
547 //クリップボードに保存
548 OpenClipboard();
549 EmptyClipboard();
550 SetClipboardData(CF_TEXT,hGlobal);
551 CloseClipboard();
552
553 //選択文字列を消去
554 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
555 }
556 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
557 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
558
559 //クリップボードに格納するためのデータを用意する
560 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
561 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
562 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
563 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17;
564 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10;
565
566 OpenClipboard();
567 EmptyClipboard();
568 extern DWORD dwRadClipboardID;
569 SetClipboardData(dwRadClipboardID,hGlobal);
570 CloseClipboard();
571
572 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
573 }
574 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
575 //クリップボードに格納するためのデータを用意する
576 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
577 if(hGlobal==0) return;
578
579 OpenClipboard();
580 EmptyClipboard();
581 SetClipboardData(CF_BITMAP,hGlobal);
582 CloseClipboard();
583
584 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
585 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
586
587 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
588 }
589}
590
591void MainFrame::OnCmdCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
592{
593 HWND hChild=::GetWindow(hClient,GW_CHILD);
594 int WndNum=GetWndNum(hChild);
595 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
596 HWND hEdit = ::GetWindow(hChild,GW_CHILD);
597
598 CHARRANGE CharRange;
599 TextEdit_GetSel(WndNum,&CharRange);
600
601 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
602 char *pTemp=(char *)GlobalLock(hGlobal);
603 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
604 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
605 GlobalUnlock(hGlobal);
606
607 //クリップボードに保存
608 OpenClipboard();
609 EmptyClipboard();
610 SetClipboardData(CF_TEXT,hGlobal);
611 CloseClipboard();
612 }
613 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
614 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
615
616 //クリップボードに格納するためのデータを用意する
617 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
618
619 OpenClipboard();
620 EmptyClipboard();
621 extern DWORD dwRadClipboardID;
622 SetClipboardData(dwRadClipboardID,hGlobal);
623 CloseClipboard();
624 }
625 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
626 //クリップボードに格納するためのデータを用意する
627 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
628
629 OpenClipboard();
630 EmptyClipboard();
631 SetClipboardData(CF_BITMAP,hGlobal);
632 CloseClipboard();
633 }
634}
635
636void MainFrame::OnCmdPaste( UINT uNotifyCode, int nID, CWindow wndCtl )
637{
638 HWND hChild=::GetWindow(hClient,GW_CHILD);
639 int WndNum=GetWndNum(hChild);
640 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
641 HWND hEdit=::GetWindow(hChild,GW_CHILD);
642
643 //クリップボードを開く
644 OpenClipboard();
645 HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
646 if(!hGlobal){
647 CloseClipboard();
648 return;
649 }
650
651
652 char *pTemp;
653 if(pobj_nv->bPasteIndent){
654 //インデント整形
655 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
656 GlobalUnlock(hGlobal);
657 }
658 else pTemp=(char *)GlobalLock(hGlobal);
659
660
661 //テキストエディタの文字列をリプレイス
662 TextEdit_ReplaceUpdateUndoData(WndNum,
663 pTemp,
664 1,
665 1);
666
667 if(pobj_nv->bPasteIndent)
668 HeapDefaultFree(pTemp);
669 else
670 GlobalUnlock(hGlobal);
671
672 //クリップボードを閉じる
673 CloseClipboard();
674
675
676 //キャレット位置までスクロールする
677 TextEdit_ScrollCaret(WndNum,0);
678 ResetCaretPos(WndNum);
679 }
680 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
681 OpenClipboard();
682 extern DWORD dwRadClipboardID;
683 HGLOBAL hGlobal=GetClipboardData(dwRadClipboardID);
684 if(!hGlobal){
685 CloseClipboard();
686 return;
687 }
688 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
689 CloseClipboard();
690 }
691 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
692 OpenClipboard();
693 HGLOBAL hGlobal=GetClipboardData(CF_BITMAP);
694 if(!hGlobal){
695 CloseClipboard();
696 return;
697 }
698 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
699 CloseClipboard();
700 }
701}
702
703void MainFrame::OnCmdDelete( UINT uNotifyCode, int nID, CWindow wndCtl )
704{
705 HWND hChild=::GetWindow(hClient,GW_CHILD);
706 int WndNum=GetWndNum(hChild);
707 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
708 HWND hEdit=::GetWindow(hChild,GW_CHILD);
709 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
710 }
711 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
712 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
713}
714
715void MainFrame::OnCmdAllSelect( UINT uNotifyCode, int nID, CWindow wndCtl )
716{
717 HWND hChild=::GetWindow(hClient,GW_CHILD);
718 int WndNum=GetWndNum(hChild);
719 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
720 HWND hEdit=::GetWindow(hChild,GW_CHILD);
721
722 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
723 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
724
725 GetCaretPosFromBufferIndex(
726 MdiInfo[WndNum].pMdiTextEdit->buffer,
727 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
728 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
729
730 ::InvalidateRect(hEdit,NULL,0);
731
732 ResetState_EditMenu();
733 }
734 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
735 int i2=GetWndInfoNum(MdiInfo[WndNum].path);
736 for(int i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
737 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
738 }
739 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
740 }
741}
742
743void MainFrame::OnCmdFind( UINT uNotifyCode, int nID, CWindow wndCtl )
744{
745 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),m_hWnd,(DLGPROC)DlgFind);
746}
747
748void MainFrame::OnCmdPermutation( UINT uNotifyCode, int nID, CWindow wndCtl )
749{
750 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),m_hWnd,(DLGPROC)DlgPermutation);
751}
752
753void MainFrame::OnCmdConvertX( UINT uNotifyCode, int nID, CWindow wndCtl )
754{
755 TextEdit_Convert( nID );
756}
757
758#ifdef THETEXT
759void MainFrame::OnCmdStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
760{
761 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,0);
762}
763
764void MainFrame::OnCmdSelStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
765{
766 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,1);
767}
768#endif
769
770void MainFrame::OnCmdProjectView( UINT uNotifyCode, int nID, CWindow wndCtl )
771{
772 extern HWND hProjectView;
773 bool isCheck = false;
774 if(pobj_nv->bClipProjectView){
775 if(::IsWindowVisible(hProjectView)){
776 ::ShowWindow(hProjectView,SW_HIDE);
777 }
778 else{
779 ::ShowWindow(hProjectView,SW_SHOW);
780 isCheck = true;
781 }
782 }
783 else{
784 extern HWND hProjectView_ToolWindow;
785 if(::IsWindowVisible(hProjectView_ToolWindow)){
786 ::ShowWindow(hProjectView_ToolWindow,SW_HIDE);
787 }
788 else{
789 ::ShowWindow(hProjectView_ToolWindow,SW_SHOW);
790 ::ShowWindow(hProjectView,SW_SHOW);
791 isCheck = true;
792 }
793 }
794 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,isCheck);
795
796 //再配置
797 ResizeOwnerWnd();
798
799 ::ShowWindow(hClient,SW_SHOW);
800}
801
802void MainFrame::OnCmdProjectOption( UINT uNotifyCode, int nID, CWindow wndCtl )
803{
804 DlgProjectOptionSetting( m_hWnd );
805}
806
807void MainFrame::OnCmdTopMost( UINT uNotifyCode, int nID, CWindow wndCtl )
808{
809 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
810 SetWindowPos( HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
811 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
812 }
813 else{
814 SetWindowPos( HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
815 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
816 }
817}
818
819void ResetState_ViewMenu(void);
820void MainFrame::OnCmdRightTurn( UINT uNotifyCode, int nID, CWindow wndCtl )
821{
822 pobj_nv->bRightTurn^=1;
823 ResetState_ViewMenu();
824
825 //トップのウィンドウを再描画
826 RedrawAllWindow();
827}
828
829void MainFrame::OnCmdSet( UINT uNotifyCode, int nID, CWindow wndCtl )
830{
831 DlgOptionSetting( m_hWnd );
832}
833
834void CreateProcessWithStdHandle( const std::string &appPath, const std::string &cmdLine)
835{
836 std::string argsStr = (std::string)"\"" + appPath + "\" " + cmdLine;
837 STARTUPINFO si;
838 PROCESS_INFORMATION pi;
839 memset(&si,0,sizeof(STARTUPINFO));
840 si.cb=sizeof(STARTUPINFO);
841 si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
842 si.wShowWindow = SW_HIDE;
843 si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
844 si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
845 si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
846
847 char args[8192];
848 lstrcpy( args, argsStr.c_str() );
849
850 CreateProcess( NULL, args, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
851}
852
853#ifndef THETEXT
854void MainFrame::OnCmdDebug( UINT uNotifyCode, int nID, CWindow wndCtl )
855{
856 char temporary[1024], temp2[1024], temp3[1024];
857 if(pobj_Debugger->IsDebugging()){
858 pobj_Debugger->DebugContinue();
859 return;
860 }
861
862 HWND hChild = ::GetWindow(hClient,GW_CHILD);
863 if(ProjectInfo.name[0]){
864 //プロジェクトが開かれている場合
865 if(!SetProjectToRun()) return;
866
867 //デバッグ用のコマンドライン及び実行可能ファイル(DLLのみ)
868 sprintf(temporary,"%s\r\n%s",ProjectInfo.szExePath,ProjectInfo.szCmdLine);
869 sprintf(temp2,"%spgm.tmp",pj_editor_Dir);
870 HANDLE hFile=CreateFile(temp2,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_TEMPORARY,NULL);
871 DWORD dwAccessBytes;
872 WriteFile(hFile,temporary,lstrlen(temporary),&dwAccessBytes,NULL);
873 CloseHandle(hFile);
874
875 //ソースファイル名をtemp2へ
876 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
877
878 //出力ファイル名をtemp3へ
879 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
880 GetFullPath(temp3,ProjectInfo.dir);
881
882 if(IsNeedCompileForProject(1))
883 sprintf(temporary,"\"%s\" \"%s\" /debug /run /wnd:%08x",temp2,temp3,m_hWnd);
884 else
885 sprintf(temporary,"\"%s\" \"%s\" /run /wnd:%08x",temp2,temp3,m_hWnd);
886
887 //DLLオプション
888 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
889
890 //Unicodeオプション
891 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
892
893 //ブレークポイントをセーブ
894 ProjectInfo.pobj_DBBreakPoint->SaveToTempFile();
895 }
896 else{
897 //単独ソースコード
898 if(!SetRunning(hChild)) return;
899 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,1))
900 sprintf(temporary,"\"%s\" /debug /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
901 else
902 sprintf(temporary,"\"%s\" /run /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
903
904 //ブレークポイントをセーブ
905 extern CDBBreakPoint *pobj_DBBreakPoint;
906 pobj_DBBreakPoint->SaveToTempFile();
907 }
908
909 //コンパイルビューをクリップするかどうか
910 extern BOOL bClipCompileView;
911 if(bClipCompileView){
912 lstrcat(temporary," /clip_compile_view");
913
914 //コンパイラビューを閉じる
915 extern HWND hCompileView;
916 if(hCompileView==(HWND)-1) return;
917 if(hCompileView){
918 hChild=hCompileView;
919 hCompileView=(HWND)-1;
920 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
921 }
922
923 //重複起動防止のため
924 hCompileView=(HWND)-1;
925 }
926
927 //インクルードディレクトリ
928 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
929 lstrcat(temporary,temp2);
930
931 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
932 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
933}
934
935void MainFrame::OnCmdDebugCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
936{
937 char temporary[1024], temp2[1024], temp3[1024];
938
939 HWND hChild=::GetWindow(hClient,GW_CHILD);
940 if(ProjectInfo.name[0]){
941 //プロジェクトが開かれている場合
942 if(!SetProjectToRun()) return;
943
944 //ソースファイル名をtemp2へ
945 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
946
947 //出力ファイル名をtemp3へ
948 lstrcpy(temp3,ProjectInfo.lpszOutput_Debug);
949 GetFullPath(temp3,ProjectInfo.dir);
950
951 sprintf(temporary,"\"%s\" \"%s\" /debug /wnd:%08x",temp2,temp3,m_hWnd);
952
953 //DLLオプション
954 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
955
956 //Unicodeオプション
957 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
958 }
959 else{
960 //単独ソースコード
961 if(!SetRunning(hChild)) return;
962 sprintf(temporary,"\"%s\" /debug /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
963 }
964
965 //コンパイルビューをクリップするかどうか
966 extern BOOL bClipCompileView;
967 if(bClipCompileView){
968 lstrcat(temporary," /clip_compile_view");
969
970 //コンパイラビューを閉じる
971 extern HWND hCompileView;
972 if(hCompileView==(HWND)-1) return;
973 if(hCompileView){
974 hChild=hCompileView;
975 hCompileView=(HWND)-1;
976 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
977 }
978
979 //重複起動防止のため
980 hCompileView=(HWND)-1;
981 }
982
983 //インクルードディレクトリ
984 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
985 lstrcat(temporary,temp2);
986
987 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
988 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
989
990}
991
992void MainFrame::OnCmdAttach( UINT uNotifyCode, int nID, CWindow wndCtl )
993{
994 char temporary[1024], temp2[1024];
995
996 int idProcess;
997 DWORD dwPlatform;
998 idProcess=DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_ATTACH),m_hWnd,(DLGPROC)DlgAttach,(LPARAM)&dwPlatform);
999 if(idProcess==0) return;
1000
1001 sprintf(temporary,"/attach:%08x /wnd:%08x",idProcess,m_hWnd);
1002
1003 //コンパイルビューをクリップするかどうか
1004 extern BOOL bClipCompileView;
1005 if(bClipCompileView){
1006 lstrcat(temporary," /clip_compile_view");
1007
1008 //コンパイラビューを閉じる
1009 extern HWND hCompileView;
1010 if(hCompileView==(HWND)-1) return;
1011 if(hCompileView){
1012 HWND hChild=hCompileView;
1013 hCompileView=(HWND)-1;
1014 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1015 }
1016
1017 //重複起動防止のため
1018 hCompileView=(HWND)-1;
1019 }
1020
1021 //インクルードディレクトリ
1022 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1023 lstrcat(temporary,temp2);
1024
1025 ActiveBasic::Common::Platform::EnumType platform;
1026 if(dwPlatform==IMAGE_FILE_MACHINE_I386)
1027 {
1028 platform = ActiveBasic::Common::Platform::X86;
1029 }
1030 else if(dwPlatform==IMAGE_FILE_MACHINE_AMD64)
1031 {
1032 platform = ActiveBasic::Common::Platform::X64;
1033 }
1034 else
1035 {
1036 throw;
1037 }
1038
1039 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1040 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( platform ), temporary );
1041}
1042
1043void MainFrame::OnCmdReleaseCompile( UINT uNotifyCode, int nID, CWindow wndCtl )
1044{
1045 char temporary[1024], temp2[1024], temp3[1024];
1046
1047 HWND hChild=::GetWindow(hClient,GW_CHILD);
1048 if(ProjectInfo.name[0]){
1049 //プロジェクトが開かれている場合
1050 if(!SetProjectToRun()) return;
1051
1052 //ソースファイル名をtemp2へ
1053 ProjectInfo.pobj_DBFileInfo->ppobj_FileInfo[0]->GetFullPath(temp2);
1054
1055 //出力ファイル名をtemp3へ
1056 lstrcpy(temp3,ProjectInfo.lpszOutput_Release);
1057 GetFullPath(temp3,ProjectInfo.dir);
1058
1059 sprintf(temporary,"\"%s\" \"%s\" /wnd:%08x",temp2,temp3,m_hWnd);
1060
1061 //DLLオプション
1062 if(ProjectInfo.dwModuleType==MT_DLL) lstrcat(temporary," /dll");
1063
1064 //Unicodeオプション
1065 if(ProjectInfo.dwOption & PJ_OP_UNICODE) lstrcat(temporary," /unicode");
1066 }
1067 else{
1068 //単独ソースコード
1069 if(!SetRunning(hChild)) return;
1070 sprintf(temporary,"\"%s\" /wnd:%08x",MdiInfo[GetWndNum(hChild)].path,m_hWnd);
1071 }
1072
1073 //コンパイルビューをクリップするかどうか
1074 extern BOOL bClipCompileView;
1075 if(bClipCompileView){
1076 lstrcat(temporary," /clip_compile_view");
1077
1078 //コンパイラビューを閉じる
1079 extern HWND hCompileView;
1080 if(hCompileView==(HWND)-1) return;
1081 if(hCompileView){
1082 hChild=hCompileView;
1083 hCompileView=(HWND)-1;
1084 SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
1085 }
1086
1087 //重複起動防止のため
1088 hCompileView=(HWND)-1;
1089 }
1090
1091 //インクルードディレクトリ
1092 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1093 lstrcat(temporary,temp2);
1094
1095 extern ActiveBasic::Common::Platform::EnumType selectingPlatform;
1096 CreateProcessWithStdHandle( ActiveBasic::Common::Environment::GetCompilerExePath( selectingPlatform ), temporary );
1097}
1098
1099void MainFrame::OnCmdReleaseRun( UINT uNotifyCode, int nID, CWindow wndCtl )
1100{
1101 char temporary[1024], temp2[1024], temp3[1024];
1102
1103 HWND hChild=::GetWindow(hClient,GW_CHILD);
1104 if(ProjectInfo.name[0]){
1105/* //プロジェクトが開かれている場合
1106 if(!SetProjectToRun()) return;
1107
1108 //必要であればリリースコンパイル
1109 if(IsNeedCompileForProject(0))
1110 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1111
1112 if(ProjectInfo.dwModuleType==MT_DLL){
1113 lstrcpy(temporary,ProjectInfo.szExePath);
1114 }
1115 else{
1116 lstrcpy(temporary,ProjectInfo.lpszOutput_Debug);
1117 GetFullPath(temporary,ProjectInfo.dir);
1118 }
1119 }
1120 else{
1121/* //必要であればリリースコンパイル
1122 if(!SetRunning(hChild)) return;
1123
1124 if(IsNeedCompile(MdiInfo[GetWndNum(hChild)].path,0))
1125 SendMessage(WM_COMMAND,IDM_RELEASECOMPILE,0);*/
1126
1127 //単独ソースコード
1128 _splitpath(MdiInfo[GetWndNum(hChild)].path,temporary,temp2,temp3,NULL);
1129 lstrcat(temporary,temp2);
1130 lstrcat(temporary,temp3);
1131 lstrcat(temporary,".exe");
1132 }
1133
1134 //インクルードディレクトリ
1135 sprintf(temp2," /include_dir:\"%s\"",pobj_nv->GetIncludeDirFullPath().c_str());
1136 lstrcat(temporary,temp2);
1137
1138 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1139}
1140
1141void MainFrame::OnCmdStepIn( UINT uNotifyCode, int nID, CWindow wndCtl )
1142{
1143 pobj_Debugger->StepIn();
1144}
1145
1146void MainFrame::OnCmdStepOver( UINT uNotifyCode, int nID, CWindow wndCtl )
1147{
1148 pobj_Debugger->StepOver();
1149}
1150
1151void MainFrame::OnCmdStepCursor( UINT uNotifyCode, int nID, CWindow wndCtl )
1152{
1153 pobj_Debugger->StepToCursor();
1154}
1155
1156void MainFrame::OnCmdBreakPoint( UINT uNotifyCode, int nID, CWindow wndCtl )
1157{
1158 if(ProjectInfo.name[0]){
1159 ProjectInfo.pobj_DBBreakPoint->Event_BreakPoint();
1160 }
1161 else{
1162 extern CDBBreakPoint *pobj_DBBreakPoint;
1163 pobj_DBBreakPoint->Event_BreakPoint();
1164 }
1165}
1166
1167void MainFrame::OnCmdDebugStop( UINT uNotifyCode, int nID, CWindow wndCtl )
1168{
1169 pobj_Debugger->DebugStop();
1170}
1171
1172void MainFrame::OnCmdDebugPause( UINT uNotifyCode, int nID, CWindow wndCtl )
1173{
1174 pobj_Debugger->DebugPause();
1175}
1176
1177#endif // not THETEXT
1178
1179void MainFrame::OnCmdWebLink( UINT uNotifyCode, int nID, CWindow wndCtl )
1180{
1181 switch( nID )
1182 {
1183#ifndef THETEXT
1184 case IDM_COMMUNITY:
1185 OpenWebBrowser( "http://www.activebasic.com/forum/" );
1186 break;
1187 case IDM_COMMU_SEARCH:
1188 OpenWebBrowser( "http://www.activebasic.com/forum/search.php" );
1189 break;
1190 case IDM_COMMU_PM:
1191 OpenWebBrowser( "http://www.activebasic.com/forum/privmsg.php?folder=inbox" );
1192 break;
1193 case ID_COMMU_FORUM1:
1194 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=1" );
1195 break;
1196 case ID_COMMU_FORUM2:
1197 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=2" );
1198 break;
1199 case ID_COMMU_FORUM3:
1200 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=5" );
1201 break;
1202 case ID_COMMU_FORUM4:
1203 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=3" );
1204 break;
1205 case ID_COMMU_FORUM5:
1206 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=6" );
1207 break;
1208 case ID_COMMU_FORUM6:
1209 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=8" );
1210 break;
1211 case ID_COMMU_FORUM7:
1212 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=4" );
1213 break;
1214 case ID_COMMU_FORUM8:
1215 OpenWebBrowser( "http://www.activebasic.com/forum/viewforum.php?f=7" );
1216 break;
1217 case IDM_AB_WEBSITE:
1218 OpenWebBrowser( "http://www.activebasic.com/" );
1219 break;
1220 case IDM_ACTBDL:
1221 OpenWebBrowser( "http://www.activebasic.com/activebasic5/download.htm" );
1222 break;
1223#else
1224 case IDM_DSHOMEPAGE:
1225 OpenWebBrowser( "http://www.discoversoft.net/" );
1226 break;
1227#endif // not THETEXT
1228 default:
1229 throw;
1230 }
1231}
1232
1233void MainFrame::OnCmdTopics( UINT uNotifyCode, int nID, CWindow wndCtl )
1234{
1235 char temporary[1024];
1236#ifdef THETEXT
1237 sprintf(temporary,"%sTopics\\index.html",pj_editor_Dir);
1238 ShellExecute(m_hWnd,"open",temporary,NULL,NULL,SW_SHOWNORMAL);
1239#else
1240 sprintf(temporary,"%sBasicHelp.chm",pj_editor_Dir);
1241 HtmlHelp(NULL,temporary,HH_DISPLAY_TOPIC,0);
1242#endif
1243}
1244
1245void MainFrame::OnCmdAbout( UINT uNotifyCode, int nID, CWindow wndCtl )
1246{
1247 DialogBox(hResInst,MAKEINTRESOURCE(IDD_ABOUT),m_hWnd,(DLGPROC)DialogAbout);
1248}
1249
1250void MainFrame::OnCmdDocSelectBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1251{
1252 pobj_Rebar->ChangeRebarBand(ID_DOCCOMBO);
1253}
1254
1255void MainFrame::OnCmdStandardBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1256{
1257 pobj_Rebar->ChangeRebarBand(ID_STANDARDTOOLBAR);
1258}
1259
1260void MainFrame::OnCmdReleaseBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1261{
1262 pobj_Rebar->ChangeRebarBand(ID_RELEASETOOLBAR);
1263}
1264
1265void MainFrame::OnCmdDebugBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1266{
1267 pobj_Rebar->ChangeRebarBand(ID_DEBUGGERTOOLBAR);
1268}
1269
1270void MainFrame::OnCmdSelectCompilerBand( UINT uNotifyCode, int nID, CWindow wndCtl )
1271{
1272 pobj_Rebar->ChangeRebarBand(ID_SELECTCOMPILERCOMBO);
1273}
1274
1275void MainFrame::OnCmdNoGripper( UINT uNotifyCode, int nID, CWindow wndCtl )
1276{
1277 if(pobj_nv->bNoGripper) pobj_nv->bNoGripper=0;
1278 else pobj_nv->bNoGripper=1;
1279
1280 //レバーコントロールを再生成
1281 pobj_Rebar->ResetRebar();
1282
1283 //メニュー状態を設定
1284 ResetState_DocMenu();
1285}
1286
1287void MainFrame::OnCmdResetRebar( UINT uNotifyCode, int nID, CWindow wndCtl )
1288{
1289 //"ツールバーの配置をすべて初期状態に戻します。\nよろしいですか?"
1290 if( MessageBox(STRING_TOOLBAR_RESET,APPLICATION_NAME,MB_OKCANCEL|MB_ICONEXCLAMATION) == IDCANCEL )
1291 {
1292 return;
1293 }
1294
1295 //レバーコントロールを再生成
1296 pobj_Rebar->ResetInitRebar();
1297
1298 //メニュー状態を設定
1299 ResetState_DocMenu();
1300}
1301
1302void MainFrame::OnCmdAllCloseOmitMyself( UINT uNotifyCode, int nID, CWindow wndCtl )
1303{
1304 //このウィンドウ以外をすべて閉じる(&A)
1305 HWND hChild=::GetWindow(hClient,GW_CHILD);
1306 int WndNum=GetWndNum(hChild);
1307 for(int i=0;i<MAX_WNDNUM;i++){
1308 if(i==WndNum) continue;
1309 if(MdiInfo[i].hwnd) SendMessage(MdiInfo[i].hwnd,WM_CLOSE,0,0);
1310 }
1311}
1312
1313void MainFrame::OnCmdPathCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
1314{
1315 HWND hChild=::GetWindow(hClient,GW_CHILD);
1316 int WndNum=GetWndNum(hChild);
1317
1318 //絶対パスをコピー
1319 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,lstrlen(MdiInfo[WndNum].path)+1);
1320 char *pTemp=(char *)GlobalLock(hGlobal);
1321 lstrcpy(pTemp,MdiInfo[WndNum].path);
1322 GlobalUnlock(hGlobal);
1323
1324 //クリップボードに保存
1325 OpenClipboard();
1326 EmptyClipboard();
1327 SetClipboardData(CF_TEXT,hGlobal);
1328 CloseClipboard();
1329}
1330
1331void MainFrame::OnCmdFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
1332{
1333 HWND hChild=::GetWindow(hClient,GW_CHILD);
1334 int WndNum=GetWndNum(hChild);
1335
1336 char temporary[1024], temp2[1024];
1337 _splitpath(MdiInfo[WndNum].path,temporary,temp2,NULL,NULL);
1338 lstrcat(temporary,temp2);
1339
1340 OpenExplorer( temporary );
1341}
1342
1343void MainFrame::OnCmdDeleteFile( UINT uNotifyCode, int nID, CWindow wndCtl )
1344{
1345 HWND hChild=::GetWindow(hClient,GW_CHILD);
1346 int WndNum=GetWndNum(hChild);
1347
1348 char temporary[1024], temp2[1024];
1349 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
1350 lstrcat(temporary,temp2);
1351
1352 lstrcat(temporary," をごみ箱に移動して閉じます。よろしいですか?");
1353 if(MessageBox(temporary,APPLICATION_NAME,MB_OKCANCEL|MB_ICONQUESTION)==IDCANCEL) return;
1354
1355 //ゴミ箱へ
1356 SHFILEOPSTRUCT fo;
1357 fo.hwnd=m_hWnd;
1358 fo.wFunc=FO_DELETE;
1359 fo.pFrom =MdiInfo[WndNum].path;
1360 fo.pTo="\0";
1361 fo.fFlags =FOF_ALLOWUNDO|FOF_NOCONFIRMATION;
1362 SHFileOperation(&fo);
1363
1364 //閉じる
1365 MdiInfo[WndNum].pMdiTextEdit->UnModify();
1366 SendMessage(MdiInfo[WndNum].hwnd,WM_CLOSE,0,0);
1367}
Note: See TracBrowser for help on using the repository browser.