Changeset 492 in dev for trunk/ab5.0/abdev/abdev


Ignore:
Timestamp:
Apr 17, 2008, 1:37:40 AM (16 years ago)
Author:
dai_9181
Message:

下記メッセージをMainFrameクラスに実装しなおした
WM_TIMER
WM_DRAWCLIPBOARD
WM_MENUSELECT
WM_INITMENU
WM_MEASUREITEM
WM_DRAWITEM
WM_NOTIFY

Location:
trunk/ab5.0/abdev/abdev
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/abdev/Common.h

    r484 r492  
     1#pragma once
     2
    13#define OEMRESOURCE
    24#define _CRT_SECURE_NO_DEPRECATE    //セキュリティ警告を出さない
  • trunk/ab5.0/abdev/abdev/abdev.cpp

    r489 r492  
    13991399    RECT rect;
    14001400    POINT pos;
    1401     LPTOOLTIPTEXT TipText;
    1402     LPNMHDR lpnmhdr;
    1403     NMPGCALCSIZE *lpCalcSize;
    1404     NMPGSCROLL *lpScroll;
    14051401    HDROP hDrop;
    14061402    HGLOBAL hGlobal;
     
    14251421    }
    14261422
    1427     switch(message){
    1428         case WM_TIMER:
    1429             //Pro版は自動バックアップ及び復元機能を有効にする
    1430             _beginthread(backup,0,0);
    1431 
    1432 #ifndef THETEXT
    1433             if(wParam==ID_DEBUGSAFTY){
    1434                 //BasicCompiler.exeが強制終了しているかどうかを検証
    1435                 pobj_Debugger->SaftyCheck();
    1436             }
    1437 #endif
    1438 
    1439             return 0;
    1440 
    1441 
    1442         case WM_DRAWCLIPBOARD:
    1443             ResetState_EditMenu();
    1444             return 0;
    1445 
    1446         case WM_MENUSELECT:
    1447             MenuAdvice(wParam);
    1448             return 0;
    1449         case WM_INITMENU:
    1450             pobj_nv->pobj_History->ResetFileMenu(pobj_FileHistoryMenu,1);
    1451 #ifndef THETEXT
    1452             pobj_nv->pobj_ProjectHistory->ResetFileMenu(pobj_ProjectHistoryMenu,0);
    1453 #endif
    1454             return 0;
    1455         case WM_MEASUREITEM:
    1456             LPMEASUREITEMSTRUCT lpMI;
    1457             lpMI = (LPMEASUREITEMSTRUCT)lParam;
    1458             if(lpMI->CtlType==ODT_MENU){
    1459                 SIZE size;
    1460                 CMenuItemData *pobj_MenuItemData;
    1461                 pobj_MenuItemData=(CMenuItemData *)lpMI->itemData;
    1462                 if(pobj_MenuItemData->pobj_ThisMenu->hMenu==pobj_MainMenu->hMenu){
    1463                     //メインメニューの親アイテム
    1464                     pobj_MainMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
    1465                     lpMI->itemWidth = size.cx;
    1466                     lpMI->itemHeight = size.cy;
    1467                 }
    1468                 else{
    1469                     //メインメニューにぶらさがるサブメニュー
    1470                     pobj_MenuItemData->pobj_ThisMenu->GetItemSize(pobj_MenuItemData->item_index,&size);
    1471                     lpMI->itemWidth = size.cx;
    1472                     lpMI->itemHeight = size.cy;
    1473                 }
    1474             }
    1475             return 0;
    1476 
    1477         case WM_DRAWITEM:
    1478             {
    1479                 DRAWITEMSTRUCT *pdis = (DRAWITEMSTRUCT *)lParam;
    1480 
    1481                 if(pdis->CtlType==ODT_MENU){
    1482                     if(!pobj_MainMenu) return 0;
    1483 
    1484                     CMenuItemData *pobj_MenuItemData;
    1485                     pobj_MenuItemData=(CMenuItemData *)pdis->itemData;
    1486                     if(pobj_MainMenu->hMenu==pobj_MenuItemData->pobj_ThisMenu->hMenu){
    1487                         //メインメニューの親アイテム
    1488                         pobj_MainMenu->OwnerDrawMenu(pdis->hDC,
    1489                             &pdis->rcItem,
    1490                             (pdis->itemState&ODS_SELECTED)!=0,
    1491                             pobj_MenuItemData->item_index);
    1492                     }
    1493                     else{
    1494                         //メインメニューにぶらさがるサブメニュー
    1495                         pobj_MainMenu->OwnerDrawSubMenu(pobj_MenuItemData->pobj_ThisMenu->hMenu,
    1496                             pdis->hDC,
    1497                             &pdis->rcItem,
    1498                             (pdis->itemState&ODS_SELECTED)!=0,
    1499                             pobj_MenuItemData->item_index);
    1500                     }
    1501                 }
    1502 
    1503                 return 0;
    1504             }
    1505 
    1506         case WM_NOTIFY:
    1507             if(!lParam) return 0;
    1508             TipText=(LPTOOLTIPTEXT)lParam;
    1509             if(TipText->hdr.code==TTN_NEEDTEXT) ShowToolTipText(TipText);
    1510             lpnmhdr=(LPNMHDR)lParam;
    1511 
    1512             extern HWND hStandardToolbarPager;
    1513             extern HWND hDebuggerToolbarPager;
    1514             if(pobj_Rebar){
    1515                 //レバーオブジェクトが存在するとき
    1516                 if(lpnmhdr->hwndFrom==pobj_Rebar->hRebar&&lpnmhdr->code==RBN_HEIGHTCHANGE){
    1517                     ResizeOwnerWnd();
    1518                     return 0;
    1519                 }
    1520             }
    1521             if(lpnmhdr->hwndFrom==hStandardToolbarPager){
    1522                 if(lpnmhdr->code==PGN_CALCSIZE){
    1523                     lpCalcSize=(LPNMPGCALCSIZE)lParam;
    1524                     if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
    1525                         lpCalcSize->iWidth=BMPNUM_STANDARDTOOLBAR*23+SEPNUM_STANDARDTOOLBAR*8;
    1526                 }
    1527                 else if(lpnmhdr->code==PGN_SCROLL){
    1528                     lpScroll=(LPNMPGSCROLL)lParam;
    1529                     lpScroll->iScroll=20;
    1530                 }
    1531             }
    1532             else if(lpnmhdr->hwndFrom==hDebuggerToolbarPager){
    1533                 if(lpnmhdr->code==PGN_CALCSIZE){
    1534                     lpCalcSize=(LPNMPGCALCSIZE)lParam;
    1535                     if(lpCalcSize->dwFlag==PGF_CALCWIDTH)
    1536                         lpCalcSize->iWidth=BMPNUM_DEBUGGERTOOLBAR*23+SEPNUM_DEBUGGERTOOLBAR*8;
    1537                 }
    1538                 else if(lpnmhdr->code==PGN_SCROLL){
    1539                     lpScroll=(LPNMPGSCROLL)lParam;
    1540                     lpScroll->iScroll=20;
    1541                 }
    1542             }
    1543 
    1544             NMHDR *hdr;
    1545             hdr=(NMHDR *)lParam;
    1546             if(pobj_MainTab){
    1547                 if(hdr->hwndFrom==pobj_MainTab->hTab){
    1548                     if(hdr->code==TCN_SELCHANGE)
    1549                         pobj_MainTab->SelChangeEvent();
    1550 
    1551                     if(hdr->code==NM_RCLICK){
    1552 
    1553                         TCHITTESTINFO tcHitTest;
    1554                         GetCursorPos(&tcHitTest.pt);
    1555                         ScreenToClient(pobj_MainTab->hTab,&tcHitTest.pt);
    1556                         i=TabCtrl_HitTest(pobj_MainTab->hTab,&tcHitTest);
    1557                         if(i==-1) return 0;
    1558 
    1559                         TabCtrl_SetCurSel(pobj_MainTab->hTab,i);
    1560 
    1561                         pobj_MainTab->SelChangeEvent();
    1562 
    1563 
    1564                         /////////////////////
    1565                         // メニューを表示
    1566                         /////////////////////
    1567 
    1568                         hChild=GetWindow(hClient,GW_CHILD);
    1569                         WndNum=GetWndNum(hChild);
    1570 
    1571                         //保存コマンドの文字列をセット
    1572                         MENUITEMINFO mii;
    1573                         mii.cbSize=sizeof(MENUITEMINFO);
    1574                         mii.fMask=MIIM_TYPE;
    1575                         mii.dwTypeData=temporary;
    1576                         mii.fType=MFT_STRING;
    1577                         if(MdiInfo[WndNum].path[0]){
    1578                             _splitpath(MdiInfo[WndNum].path,NULL,NULL,temporary,temp2);
    1579                             lstrcat(temporary,temp2);
    1580                             lstrcat(temporary," を保存(&S)");
    1581                         }
    1582                         else{
    1583                             lstrcpy(temporary,"保存(&S)");
    1584                         }
    1585                         SetMenuItemInfo(hTabMenu,IDM_SAVE,FALSE,&mii);
    1586 
    1587                         /*「絶対パスをコピー」「フォルダを開く」「ファイルを削除」
    1588                                                         コマンドを場合によって無効化にする */
    1589                         if(MdiInfo[WndNum].path[0]){
    1590                             EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_ENABLED);
    1591                             EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_ENABLED);
    1592                             EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_ENABLED);
    1593                         }
    1594                         else{
    1595                             EnableMenuItem(hTabMenu,IDM_PATH_COPY,MF_BYCOMMAND|MF_GRAYED);
    1596                             EnableMenuItem(hTabMenu,IDM_FOLDER_OPEN,MF_BYCOMMAND|MF_GRAYED);
    1597                             EnableMenuItem(hTabMenu,IDM_DELETE_FILE,MF_BYCOMMAND|MF_GRAYED);
    1598                         }
    1599 
    1600                         POINT MousePos;
    1601                         GetCursorPos(&MousePos);
    1602                         TrackPopupMenu(hTabMenu,TPM_LEFTALIGN|TPM_RIGHTBUTTON,MousePos.x,MousePos.y,0,hOwner,NULL);
    1603                     }
    1604                 }
    1605             }
    1606             if(pobj_SideWeb){
    1607                 if(hdr->hwndFrom==pobj_SideWeb->hTab&&hdr->code==TCN_SELCHANGE){
    1608                     pobj_SideWeb->SelChangeEvent();
    1609                 }
    1610             }
    1611 
    1612             return 0;
     1423    switch(message)
     1424    {
    16131425        case WM_COMMAND:
    16141426            switch(LOWORD(wParam)){
  • trunk/ab5.0/abdev/abdev/include/MainFrame.h

    r489 r492  
    1212public:
    1313
     14    // 生成された
    1415    ::LRESULT OnCreate( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled );
     16
     17    // 「閉じる」ボタンがクリックされた
    1518    ::LRESULT OnClose( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled );
     19
     20    // リサイズされた
    1621    void OnSize(UINT nType, CSize size);
     22
     23    // 破棄された
    1724    ::LRESULT OnDestroy( ::UINT msg, ::WPARAM wParam, ::LPARAM lParam, ::BOOL& handled );
     25
     26    // タイマーイベント
     27    void OnTimer( UINT_PTR id );
     28
     29    // クリップボード内のデータが変更した
     30    void OnDrawClipboard();
     31
     32    // メニューが選択された
     33    void OnMenuSelect( UINT nItemID, UINT nFlags, CMenu menu );
     34
     35    // メニューがアクティブになる直前に送られる
     36    void OnInitMenu( CMenu menu );
     37
     38    // メニューアイテムのサイズが要求された
     39    void OnMeasureItem( int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct );
     40
     41    // メニューアイテムの描画が要求された
     42    void OnDrawItem( int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct );
     43
     44    // 拡張コントロールからメッセージが通知された
     45    LRESULT OnNotify( int idCtrl, LPNMHDR pnmh );
    1846
    1947private:
     
    2351        MESSAGE_HANDLER( WM_CLOSE, OnClose )
    2452        MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
     53        MSG_WM_TIMER( OnTimer )
     54        MSG_WM_DRAWCLIPBOARD( OnDrawClipboard )
     55        MSG_WM_MENUSELECT( OnMenuSelect )
     56        MSG_WM_INITMENU( OnInitMenu )
     57        MSG_WM_MEASUREITEM( OnMeasureItem )
     58        MSG_WM_DRAWITEM( OnDrawItem )
     59
     60        MSG_WM_NOTIFY( OnNotify );
    2561    END_MSG_MAP()
    2662};
  • trunk/ab5.0/abdev/abdev/src/MainFrame.cpp

    r489 r492  
    6565    return 0;
    6666}
     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, CMenu menu )
     97{
     98    MenuAdvice( nItemID );
     99}
     100
     101void MainFrame::OnInitMenu( CMenu 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}
  • trunk/ab5.0/abdev/abdev/stdafx.h

    r491 r492  
    2020
    2121#include <atlbase.h>
    22 #include <atlcom.h>     // ATL COM共通用ヘッダファイル
    23 #include <atlhost.h>    // ATL コンテナ機能サポート用ヘッダファイル
     22#include <atlcom.h>     // ATL COMハ用wb_t@C
     23#include <atlhost.h>    // ATL Rei@\T|[gpwb_t@C
    2424#include <atlapp.h>
    25 #include <atlframe.h>   // ATL コンテナ機能サポート用ヘッダファイル
     25#include <atlframe.h>   // ATL Rei@\T|[gpwb_t@C
    2626#include <atlcrack.h>
    2727#include <atlmisc.h>
     
    4747#include <MainFrame.h>
    4848#include <Program.h>
     49
     50#include "../res/resource.h"
     51
     52#include "Common.h"
Note: See TracChangeset for help on using the changeset viewer.