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

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

hChildが無効の場合はSendMessageしないようにした。

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