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

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

・いくつかのメニューをMainFrameに実装しなおした
・TheTextでビルドが通るようにした。

File size: 20.1 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
10::LRESULT MainFrame::OnCreate( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
11{
12 // ウィンドウエリアマネージャに親ウィンドウを登録
13 wam.SetParentWnd( m_hWnd );
14
15 RECT rect;
16 GetClientRect( &rect );
17
18 // MDIベースを作成
19 mdiWindow = new MdiWindow();
20 mdiWindow->Create(
21 m_hWnd,
22 rect,
23 NULL,
24 WS_CHILD
25 );
26 wam.AddMdiWindow( mdiWindow );
27
28
29
30
31
32 extern HWND hOwner;
33 hOwner = m_hWnd;
34 extern WNDPROC oldMainFrameWndProc;
35 oldMainFrameWndProc = (WNDPROC)::GetWindowLong( hOwner, GWL_WNDPROC );
36 ::SetWindowLong( hOwner, GWL_WNDPROC, (LONG)WindowFunc );
37
38 SetupWindow(hOwner);
39
40 //テキストエディタフォント設定
41 ResetTextEditFont(hOwner);
42
43
44
45 return 0;
46}
47
48void MainFrame::OnSize(UINT nType, CSize size)
49{
50 //mdiWindow->MoveWindow( 0, 0, size.cx, size.cy );
51}
52
53::LRESULT MainFrame::OnClose( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
54{
55 DestroyWindow();
56 return 0;
57}
58::LRESULT MainFrame::OnDestroy( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled )
59{
60 mdiWindow->DestroyWindow();
61 delete mdiWindow;
62
63 ::PostQuitMessage( 0 );
64
65 return 0;
66}
67
68void backup(void *dummy);
69void MainFrame::OnTimer( UINT_PTR id )
70{
71 switch( id )
72 {
73 case ID_TIMER_BACKUP:
74 _beginthread( backup, 0, 0 );
75 break;
76
77#ifndef THETEXT
78 case ID_DEBUGSAFTY:
79 {
80 //BasicCompiler.exeが強制終了しているかどうかを検証
81 extern CDebugger *pobj_Debugger;
82 pobj_Debugger->SaftyCheck();
83 break;
84 }
85#endif
86 }
87}
88
89void ResetState_EditMenu(void);
90void MainFrame::OnDrawClipboard()
91{
92 ResetState_EditMenu();
93}
94
95void MenuAdvice(WPARAM msg);
96void MainFrame::OnMenuSelect( UINT nItemID, UINT nFlags, HMENU menu )
97{
98 MenuAdvice( nItemID );
99}
100
101void MainFrame::OnInitMenu( HMENU menu )
102{
103 extern CNonVolatile *pobj_nv;
104 extern CSubMenuEx *pobj_FileHistoryMenu;
105 pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
106#ifndef THETEXT
107 extern CSubMenuEx *pobj_ProjectHistoryMenu;
108 pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
109#endif
110}
111
112void MainFrame::OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMI )
113{
114 if(lpMI->CtlType==ODT_MENU){
115 SIZE size;
116 CMenuItemData *pobj_MenuItemData;
117 pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
118 if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
119 //メインメニューの親アイテム
120 pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
121 lpMI->itemWidth = size.cx;
122 lpMI->itemHeight = size.cy;
123 }
124 else{
125 //メインメニューにぶらさがるサブメニュー
126 pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
127 lpMI->itemWidth = size.cx;
128 lpMI->itemHeight = size.cy;
129 }
130 }
131}
132
133void MainFrame::OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct )
134{
135 if(lpDrawItemStruct->CtlType==ODT_MENU){
136 if(!pobj_MainMenu) return;
137
138 CMenuItemData *pobj_MenuItemData;
139 pobj_MenuItemData=(CMenuItemData *)lpDrawItemStruct->itemData;
140 if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
141 //メインメニューの親アイテム
142 pobj_MainMenu->OwnerDrawMenu(lpDrawItemStruct->hDC,
143 &lpDrawItemStruct->rcItem,
144 (lpDrawItemStruct->itemState&ODS_SELECTED)!=0,
145 pobj_MenuItemData->item_index);
146 }
147 else{
148 //メインメニューにぶらさがるサブメニュー
149 pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
150 lpDrawItemStruct->hDC,
151 &lpDrawItemStruct->rcItem,
152 (lpDrawItemStruct->itemState&ODS_SELECTED)!=0,
153 pobj_MenuItemData->item_index);
154 }
155 }
156}
157
158LRESULT MainFrame::OnNotify( int idCtrl, LPNMHDR pnmh )
159{
160 NMPGCALCSIZE *lpCalcSize;
161 NMPGSCROLL *lpScroll;
162
163 if(!pnmh) return 0;
164 LPTOOLTIPTEXT TipText=(LPTOOLTIPTEXT)pnmh;
165 if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
166
167 extern HWND hStandardToolbarPager;
168 extern HWND hDebuggerToolbarPager;
169 if(pobj_Rebar){
170 //レバーオブジェクトが存在するとき
171 if(pnmh->hwndFrom==pobj_Rebar->hRebar&&pnmh->code==RBN_HEIGHTCHANGE){
172 ResizeOwnerWnd();
173 return 0;
174 }
175 }
176 if(pnmh->hwndFrom==hStandardToolbarPager){
177 if(pnmh->code==PGN_CALCSIZE){
178 lpCalcSize=(LPNMPGCALCSIZE)pnmh;
179 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
180 lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
181 }
182 else if(pnmh->code==PGN_SCROLL){
183 lpScroll=(LPNMPGSCROLL)pnmh;
184 lpScroll->iScroll=20;
185 }
186 }
187 else if(pnmh->hwndFrom==hDebuggerToolbarPager){
188 if(pnmh->code==PGN_CALCSIZE){
189 lpCalcSize=(LPNMPGCALCSIZE)pnmh;
190 if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
191 lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
192 }
193 else if(pnmh->code==PGN_SCROLL){
194 lpScroll=(LPNMPGSCROLL)pnmh;
195 lpScroll->iScroll=20;
196 }
197 }
198
199 if(pobj_MainTab){
200 if(pnmh->hwndFrom==pobj_MainTab->hTab){
201 if(pnmh->code==TCN_SELCHANGE)
202 pobj_MainTab->SelChangeEvent();
203
204 if(pnmh->code==NM_RCLICK){
205
206 TCHITTESTINFO tcHitTest;
207 GetCursorPos(&tcHitTest.pt);
208 ::ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
209 int index = TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
210 if( index == -1 ) return 0;
211
212 TabCtrl_SetCurSel(pobj_MainTab->hTab,index);
213
214 pobj_MainTab->SelChangeEvent();
215
216
217 /////////////////////
218 // メニューを表示
219 /////////////////////
220
221 HWND hChild=::GetWindow(hClient,GW_CHILD);
222 int WndNum=GetWndNum(hChild);
223
224 //保存コマンドの文字列をセット
225 char temporary[1024], temp2[1024];
226 MENUITEMINFO mii;
227 mii.cbSize=sizeof(MENUITEMINFO);
228 mii.fMask=MIIM_TYPE;
229 mii.dwTypeData=temporary;
230 mii.fType=MFT_STRING;
231 if(MdiInfo[WndNum].path[0]){
232 _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
233 lstrcat(temporary,temp2);
234 lstrcat(temporary," を保存(&S)");
235 }
236 else{
237 lstrcpy(temporary,"保存(&S)");
238 }
239 extern HMENU hTabMenu;
240 SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
241
242 /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
243 コマンドを場合によって無効化にする */
244 if(MdiInfo[WndNum].path[0]){
245 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
246 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
247 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
248 }
249 else{
250 EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
251 EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
252 EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
253 }
254
255 POINT MousePos;
256 GetCursorPos(&MousePos);
257 TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
258 }
259 }
260 }
261 if(pobj_SideWeb){
262 if(pnmh->hwndFrom==pobj_SideWeb->hTab&&pnmh->code==TCN_SELCHANGE){
263 pobj_SideWeb->SelChangeEvent();
264 }
265 }
266
267 return 0;
268}
269
270void MainFrame::OnCmdNew( UINT uNotifyCode, int nID, CWindow wndCtl )
271{
272
273#ifdef THETEXT
274 NewTextEditWindow(NULL,WNDTYPE_TEXT);
275 return;
276#else
277 int FileType;
278 BOOL bAddToProject;
279 char temporary[MAX_PATH];
280
281 FileType=DialogBox(hResInst,MAKEINTRESOURCE(IDD_NEWFILE),hOwner,(DLGPROC)DlgNewFile);
282 if(FileType==-1) return;
283
284 if(FileType&0x00008000){
285 bAddToProject=1;
286 FileType&=0x0FFF;
287 extern char NewFileName[MAX_PATH];
288 lstrcpy(temporary,NewFileName);
289 if(!strstr(temporary,".")) lstrcat(temporary,".ab");
290 GetFullPath(temporary,ProjectInfo.dir);
291 }
292 else bAddToProject=0;
293
294 switch(FileType){
295 case FT_BASICPROGRAM: //Basicプログラム
296 case FT_SUBPROGRAM:
297 if(bAddToProject){
298 WriteBuffer(temporary,0,0);
299 NewTextEditWindow(temporary,WNDTYPE_BASIC);
300 Project_File_Insert(temporary);
301 }
302 else NewTextEditWindow(NULL,WNDTYPE_BASIC);
303 break;
304
305 case FT_PROJECT:
306 DlgNewProjectWizard(hOwner);
307 break;
308
309 case FT_TEXT:
310 NewTextEditWindow(NULL,WNDTYPE_TEXT);
311 break;
312
313 case FT_HTML:
314 NewTextEditWindow(NULL,WNDTYPE_HTML);
315 break;
316
317 case FT_ICON:
318 NewIconEditWindow(NULL);
319 break;
320 }
321#endif
322}
323
324void MainFrame::OnCmdOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
325{
326 //"ファイルを指定してください"
327 extern LPSTR DefFileFilter;
328 char temporary[1024];
329 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILEOPENTITLE_DEFAULT,TRUE)) return;
330
331 OpenFileWithExtension( temporary );
332}
333
334void MainFrame::OnCmdClose( UINT uNotifyCode, int nID, CWindow wndCtl )
335{
336 HWND hChild=::GetWindow(hClient,GW_CHILD);
337 if(::IsWindow(hChild)) SendMessage(hChild,WM_CLOSE,0,0);
338}
339
340void MainFrame::OnCmdProjectOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
341{
342 //"プロジェクト ファイルを指定して下さい"
343 extern LPSTR ProjectFileFilter;
344 char temporary[1024];
345 if(!GetFilePathDialog(m_hWnd,temporary,ProjectFileFilter,STRING_FILEOPENTITLE_PROJECT,TRUE))
346 {
347 return;
348 }
349
350 OpenProject(temporary);
351}
352
353void MainFrame::OnCmdProjectSave( UINT uNotifyCode, int nID, CWindow wndCtl )
354{
355 SaveProject();
356}
357
358void MainFrame::OnCmdProjectClose( UINT uNotifyCode, int nID, CWindow wndCtl )
359{
360 CloseProject();
361}
362
363void MainFrame::OnCmdProjectFolderOpen( UINT uNotifyCode, int nID, CWindow wndCtl )
364{
365 ShellExecute(m_hWnd,"explore",ProjectInfo.dir,NULL,NULL,SW_SHOWNORMAL);
366}
367
368void MainFrame::OnCmdSave( UINT uNotifyCode, int nID, CWindow wndCtl )
369{
370 SaveDocument(::GetWindow(hClient,GW_CHILD),NULL);
371}
372
373void MainFrame::OnCmdNewSave( UINT uNotifyCode, int nID, CWindow wndCtl )
374{
375 //"保存先のファイルを指定してください"
376 extern LPSTR DefFileFilter;
377 char temporary[1024];
378 if(!GetFilePathDialog(m_hWnd,temporary,DefFileFilter,STRING_FILESAVETITLE_DEFAULT,FALSE)) return;
379
380 SaveDocument(::GetWindow(hClient,GW_CHILD),temporary);
381}
382
383void MainFrame::OnCmdCodeSave( UINT uNotifyCode, int nID, CWindow wndCtl )
384{
385 //文字コードを指定して保存
386 DialogBox(hResInst,MAKEINTRESOURCE(IDD_CODE_SAVE),m_hWnd,(DLGPROC)nkfDlgCodeSave);
387}
388
389void MainFrame::OnCmdAllSave( UINT uNotifyCode, int nID, CWindow wndCtl )
390{
391 for( int i=0;i<MAX_WNDNUM;i++){
392 if(MdiInfo[i].hwnd) SaveDocument(MdiInfo[i].hwnd,NULL);
393 }
394 if(ProjectInfo.name[0]) SaveProject();
395}
396
397void MainFrame::OnCmdPageSet( UINT uNotifyCode, int nID, CWindow wndCtl )
398{
399 //ページ設定
400 obj_Page.SetupDlg();
401}
402
403void MainFrame::OnCmdPreview( UINT uNotifyCode, int nID, CWindow wndCtl )
404{
405 //プレビュー(Pro版のみ)
406 Preview();
407}
408
409void MainFrame::OnCmdPrintOut( UINT uNotifyCode, int nID, CWindow wndCtl )
410{
411 //印刷
412 Printout();
413}
414
415void MainFrame::OnCmdExit( UINT uNotifyCode, int nID, CWindow wndCtl )
416{
417 SendMessage(WM_CLOSE);
418}
419
420void MainFrame::OnCmdUndo( UINT uNotifyCode, int nID, CWindow wndCtl )
421{
422 HWND hChild=::GetWindow(hClient,GW_CHILD);
423 if(!hChild) return;
424 int WndNum=GetWndNum(hChild);
425 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
426 TextEdit_UndoCommand(WndNum);
427 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
428 Rad_UndoCommand(WndNum);
429 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
430 IconEdit_UndoCommand(WndNum);
431}
432
433void MainFrame::OnCmdRedo( UINT uNotifyCode, int nID, CWindow wndCtl )
434{
435 HWND hChild=::GetWindow(hClient,GW_CHILD);
436 if(!hChild) return;
437 int WndNum=GetWndNum(hChild);
438 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType))
439 TextEdit_RedoCommand(WndNum);
440 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
441 Rad_RedoCommand(WndNum);
442 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT)
443 IconEdit_RedoCommand(WndNum);
444}
445
446void MainFrame::OnCmdCut( UINT uNotifyCode, int nID, CWindow wndCtl )
447{
448 HWND hChild=::GetWindow(hClient,GW_CHILD);
449 int WndNum=GetWndNum(hChild);
450 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
451 HWND hEdit=::GetWindow(hChild,GW_CHILD);
452
453 CHARRANGE CharRange;
454 TextEdit_GetSel(WndNum,&CharRange);
455
456 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
457 char *pTemp=(char *)GlobalLock(hGlobal);
458 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
459 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
460 GlobalUnlock(hGlobal);
461
462 //クリップボードに保存
463 OpenClipboard();
464 EmptyClipboard();
465 SetClipboardData(CF_TEXT,hGlobal);
466 CloseClipboard();
467
468 //選択文字列を消去
469 SendMessage(hEdit,WM_KEYDOWN,VK_DELETE,0);
470 }
471 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
472 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
473
474 //クリップボードに格納するためのデータを用意する
475 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x-=17;
476 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y-=10;
477 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
478 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.x+=17;
479 ProjectInfo.pWindowInfo[indexOfWndInfo].pChildInfo[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]].pos.y+=10;
480
481 OpenClipboard();
482 EmptyClipboard();
483 extern DWORD dwRadClipboardID;
484 SetClipboardData(dwRadClipboardID,hGlobal);
485 CloseClipboard();
486
487 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
488 }
489 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
490 //クリップボードに格納するためのデータを用意する
491 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
492 if(hGlobal==0) return;
493
494 OpenClipboard();
495 EmptyClipboard();
496 SetClipboardData(CF_BITMAP,hGlobal);
497 CloseClipboard();
498
499 DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hSelectingBmp);
500 MdiInfo[WndNum].MdiIconEditInfo->SelectLevel=0;
501
502 IconEdit_EraseRect(WndNum,&MdiInfo[WndNum].MdiIconEditInfo->DraggingRect);
503 }
504}
505
506void MainFrame::OnCmdCopy( UINT uNotifyCode, int nID, CWindow wndCtl )
507{
508 HWND hChild=::GetWindow(hClient,GW_CHILD);
509 int WndNum=GetWndNum(hChild);
510 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
511 HWND hEdit = ::GetWindow(hChild,GW_CHILD);
512
513 CHARRANGE CharRange;
514 TextEdit_GetSel(WndNum,&CharRange);
515
516 HGLOBAL hGlobal=(char *)GlobalAlloc(GMEM_MOVEABLE,CharRange.cpMax-CharRange.cpMin+1);
517 char *pTemp=(char *)GlobalLock(hGlobal);
518 memcpy(pTemp,MdiInfo[WndNum].pMdiTextEdit->buffer+CharRange.cpMin,CharRange.cpMax-CharRange.cpMin);
519 pTemp[CharRange.cpMax-CharRange.cpMin]=0;
520 GlobalUnlock(hGlobal);
521
522 //クリップボードに保存
523 OpenClipboard();
524 EmptyClipboard();
525 SetClipboardData(CF_TEXT,hGlobal);
526 CloseClipboard();
527 }
528 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
529 int indexOfWndInfo = GetWndInfoNum(MdiInfo[WndNum].path);
530
531 //クリップボードに格納するためのデータを用意する
532 HGLOBAL hGlobal=Rad_GetChildInfoClipboardData(WndNum,indexOfWndInfo);
533
534 OpenClipboard();
535 EmptyClipboard();
536 extern DWORD dwRadClipboardID;
537 SetClipboardData(dwRadClipboardID,hGlobal);
538 CloseClipboard();
539 }
540 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
541 //クリップボードに格納するためのデータを用意する
542 HGLOBAL hGlobal=IconEdit_GetChildInfoClipboardData(WndNum);
543
544 OpenClipboard();
545 EmptyClipboard();
546 SetClipboardData(CF_BITMAP,hGlobal);
547 CloseClipboard();
548 }
549}
550
551void MainFrame::OnCmdPaste( UINT uNotifyCode, int nID, CWindow wndCtl )
552{
553 HWND hChild=::GetWindow(hClient,GW_CHILD);
554 int WndNum=GetWndNum(hChild);
555 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
556 HWND hEdit=::GetWindow(hChild,GW_CHILD);
557
558 //クリップボードを開く
559 OpenClipboard();
560 HGLOBAL hGlobal=GetClipboardData(CF_TEXT);
561 if(!hGlobal){
562 CloseClipboard();
563 return;
564 }
565
566
567 char *pTemp;
568 if(pobj_nv->bPasteIndent){
569 //インデント整形
570 pTemp=CodeFormatter((char *)GlobalLock(hGlobal));
571 GlobalUnlock(hGlobal);
572 }
573 else pTemp=(char *)GlobalLock(hGlobal);
574
575
576 //テキストエディタの文字列をリプレイス
577 TextEdit_ReplaceUpdateUndoData(WndNum,
578 pTemp,
579 1,
580 1);
581
582 if(pobj_nv->bPasteIndent)
583 HeapDefaultFree(pTemp);
584 else
585 GlobalUnlock(hGlobal);
586
587 //クリップボードを閉じる
588 CloseClipboard();
589
590
591 //キャレット位置までスクロールする
592 TextEdit_ScrollCaret(WndNum,0);
593 ResetCaretPos(WndNum);
594 }
595 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
596 OpenClipboard();
597 extern DWORD dwRadClipboardID;
598 HGLOBAL hGlobal=GetClipboardData(dwRadClipboardID);
599 if(!hGlobal){
600 CloseClipboard();
601 return;
602 }
603 Rad_PasteChildInfoClipboardData(WndNum,hGlobal);
604 CloseClipboard();
605 }
606 else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
607 OpenClipboard();
608 HGLOBAL hGlobal=GetClipboardData(CF_BITMAP);
609 if(!hGlobal){
610 CloseClipboard();
611 return;
612 }
613 IconEdit_PasteChildInfoClipboardData(WndNum,(HBITMAP)hGlobal);
614 CloseClipboard();
615 }
616}
617
618void MainFrame::OnCmdDelete( UINT uNotifyCode, int nID, CWindow wndCtl )
619{
620 HWND hChild=::GetWindow(hClient,GW_CHILD);
621 int WndNum=GetWndNum(hChild);
622 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
623 HWND hEdit=::GetWindow(hChild,GW_CHILD);
624 TextEdit_ReplaceUpdateUndoData(WndNum,"",0,1);
625 }
626 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD)
627 SendMessage(MdiInfo[WndNum].MdiRadInfo->hRad,WM_COMMAND,IDM_RAD_ITEM_DELETE,0);
628}
629
630void MainFrame::OnCmdAllSelect( UINT uNotifyCode, int nID, CWindow wndCtl )
631{
632 HWND hChild=::GetWindow(hClient,GW_CHILD);
633 int WndNum=GetWndNum(hChild);
634 if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
635 HWND hEdit=::GetWindow(hChild,GW_CHILD);
636
637 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x=0;
638 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y=0;
639
640 GetCaretPosFromBufferIndex(
641 MdiInfo[WndNum].pMdiTextEdit->buffer,
642 lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer),
643 &MdiInfo[WndNum].pMdiTextEdit->EndCaretPos);
644
645 ::InvalidateRect(hEdit,NULL,0);
646
647 ResetState_EditMenu();
648 }
649 else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
650 int i2=GetWndInfoNum(MdiInfo[WndNum].path);
651 for(int i3=0;i3<ProjectInfo.pWindowInfo[i2].NumberOfChildWindows;i3++){
652 MdiInfo[WndNum].MdiRadInfo->SelectingItem[i3]=i3;
653 }
654 DrawRadWindow(WndNum,&ProjectInfo.pWindowInfo[i2]);
655 }
656}
657
658void MainFrame::OnCmdFind( UINT uNotifyCode, int nID, CWindow wndCtl )
659{
660 DialogBox(hResInst,MAKEINTRESOURCE(IDD_FIND),m_hWnd,(DLGPROC)DlgFind);
661}
662
663void MainFrame::OnCmdPermutation( UINT uNotifyCode, int nID, CWindow wndCtl )
664{
665 DialogBox(hResInst,MAKEINTRESOURCE(IDD_PERMUTATION),m_hWnd,(DLGPROC)DlgPermutation);
666}
667
668void MainFrame::OnCmdConvertX( UINT uNotifyCode, int nID, CWindow wndCtl )
669{
670 TextEdit_Convert( nID );
671}
672
673#ifdef THETEXT
674void MainFrame::OnCmdStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
675{
676 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,0);
677}
678
679void MainFrame::OnCmdSelStringCount( UINT uNotifyCode, int nID, CWindow wndCtl )
680{
681 DialogBoxParam(hResInst,MAKEINTRESOURCE(IDD_STRING_COUNT),m_hWnd,(DLGPROC)DlgStringCount,1);
682}
683#endif
684
685void MainFrame::OnCmdProjectView( UINT uNotifyCode, int nID, CWindow wndCtl )
686{
687 extern HWND hProjectView;
688 bool isCheck = false;
689 if(pobj_nv->bClipProjectView){
690 if(::IsWindowVisible(hProjectView)){
691 ::ShowWindow(hProjectView,SW_HIDE);
692 }
693 else{
694 ::ShowWindow(hProjectView,SW_SHOW);
695 isCheck = true;
696 }
697 }
698 else{
699 extern HWND hProjectView_ToolWindow;
700 if(::IsWindowVisible(hProjectView_ToolWindow)){
701 ::ShowWindow(hProjectView_ToolWindow,SW_HIDE);
702 }
703 else{
704 ::ShowWindow(hProjectView_ToolWindow,SW_SHOW);
705 ::ShowWindow(hProjectView,SW_SHOW);
706 isCheck = true;
707 }
708 }
709 pobj_MainMenu->CheckMenu(IDM_PROJECTVIEW,isCheck);
710
711 //再配置
712 ResizeOwnerWnd();
713
714 ::ShowWindow(hClient,SW_SHOW);
715}
716
717void MainFrame::OnCmdProjectOption( UINT uNotifyCode, int nID, CWindow wndCtl )
718{
719 DlgProjectOptionSetting( m_hWnd );
720}
721
722void MainFrame::OnCmdTopMost( UINT uNotifyCode, int nID, CWindow wndCtl )
723{
724 if(pobj_MainMenu->IsCheck(IDM_TOPMOST)){
725 SetWindowPos( HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
726 pobj_MainMenu->CheckMenu(IDM_TOPMOST,0);
727 }
728 else{
729 SetWindowPos( HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
730 pobj_MainMenu->CheckMenu(IDM_TOPMOST,1);
731 }
732}
733
734void ResetState_ViewMenu(void);
735void MainFrame::OnCmdRightTurn( UINT uNotifyCode, int nID, CWindow wndCtl )
736{
737 pobj_nv->bRightTurn^=1;
738 ResetState_ViewMenu();
739
740 //トップのウィンドウを再描画
741 RedrawAllWindow();
742}
743
744void MainFrame::OnCmdSet( UINT uNotifyCode, int nID, CWindow wndCtl )
745{
746 DlgOptionSetting( m_hWnd );
747}
Note: See TracBrowser for help on using the repository browser.