Changeset 629 in dev for trunk/ab5.0/abdev/abdev/abdev.cpp


Ignore:
Timestamp:
Jun 2, 2008, 11:50:24 PM (16 years ago)
Author:
dai_9181
Message:

MDIINFO構造体をリファクタリング。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ab5.0/abdev/abdev/abdev.cpp

    r626 r629  
    100100    if(!IsWindow(hChild)) return -1;
    101101    for(i=0;i<MdiInfo.size();i++){
    102         if(hChild==MdiInfo[i].hwnd) break;
     102        if(hChild==MdiInfo[i]->hwnd) break;
    103103    }
    104104    if(i==MdiInfo.size()) i=-1;
     
    119119        projectInfo.pobj_DBFileInfo->ppobj_FileInfo[i]->GetFullPath(temporary);
    120120
    121         if(lstrcmpi(MdiInfo[WndNum].path.c_str(),temporary)==0) return i;
     121        if(lstrcmpi(MdiInfo[WndNum]->path.c_str(),temporary)==0) return i;
    122122    }
    123123    return -1;
     
    139139        if(WndNum==-1) break;
    140140
    141         if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
     141        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    142142            //コントロールタブスペースの幅と行番号の文字数を更新
    143             MdiInfo[WndNum].pMdiTextEdit->iWidth_ControlTabSpace=
    144                 GetControlTabSpace(WndNum,&MdiInfo[WndNum].pMdiTextEdit->iLineNumberTextCount);
    145 
    146             InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->hEdit,NULL,0);
    147             InvalidateRect(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
    148 
    149             SendTextEditResizeEvent(MdiInfo[WndNum].hwnd);
     143            MdiInfo[WndNum]->pMdiTextEdit->iWidth_ControlTabSpace=
     144                GetControlTabSpace(WndNum,&MdiInfo[WndNum]->pMdiTextEdit->iLineNumberTextCount);
     145
     146            InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->hEdit,NULL,0);
     147            InvalidateRect(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,NULL,0);
     148
     149            SendTextEditResizeEvent(MdiInfo[WndNum]->hwnd);
    150150        }
    151151        else{
     
    165165    WndNum=GetWndNum(hChild);
    166166    sw=0;
    167     if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
    168         if( MdiInfo[WndNum].pMdiTextEdit->IsModified() ) sw=1;
    169     }
    170     else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
    171         if(MdiInfo[WndNum].MdiIconEditInfo->bModify) sw=1;
     167    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
     168        if( MdiInfo[WndNum]->pMdiTextEdit->IsModified() ) sw=1;
     169    }
     170    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
     171        if(MdiInfo[WndNum]->MdiIconEditInfo->bModify) sw=1;
    172172    }
    173173
     
    205205    if(WndNum==-1) return;
    206206    hChild=GetWindow(hChild,GW_CHILD);
    207     if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
     207    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    208208        //////////////////////
    209209        // テキストエディタ
     
    211211
    212212        //サイズ
    213         BufSize=(double)lstrlen(MdiInfo[WndNum].pMdiTextEdit->buffer);
     213        BufSize=(double)lstrlen(MdiInfo[WndNum]->pMdiTextEdit->buffer);
    214214        if(IsWindow(hChild)){
    215215            if(BufSize<1024) sprintf(temporary,"%s: %.0fByte",STRING_SIZE,BufSize);
     
    231231            //日本語
    232232            sprintf(temporary,"%d 行、%d 列",
    233                 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
    234                 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
     233                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1,
     234                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1);
    235235#else
    236236            //英語
    237237            sprintf(temporary,"%d : %d",
    238                 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y+1,
    239                 MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x+1);
     238                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y+1,
     239                MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x+1);
    240240#endif
    241241        }
     
    244244
    245245        //文字コード
    246         nkf.GetCharCodeName(MdiInfo[WndNum].pMdiTextEdit->iCharCode,temporary);
     246        nkf.GetCharCodeName(MdiInfo[WndNum]->pMdiTextEdit->iCharCode,temporary);
    247247        SendMessage(hStatusBar,SB_SETTEXT,3,(LPARAM)temporary);
    248248
    249249        //文字コード
    250         nkf.GetLfCodeName(MdiInfo[WndNum].pMdiTextEdit->iLfCode,temporary);
     250        nkf.GetLfCodeName(MdiInfo[WndNum]->pMdiTextEdit->iLfCode,temporary);
    251251        SendMessage(hStatusBar,SB_SETTEXT,4,(LPARAM)temporary);
    252252    }
    253     else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
     253    else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
    254254        ////////////////
    255255        // RADツール
    256256        ////////////////
    257257
    258         ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum].path);
     258        ActiveBasic::PM::WindowInfo *pWindowInfo = GetWndInfo(MdiInfo[WndNum]->path);
    259259        if(RadInfo.NowDragging>=FRAME_CHANGEPOS_START&&RadInfo.NowDragging<=FRAME_CHANGEPOS_END){
    260260            sprintf(temporary,"pos %d, %d",
    261                 RadInfo.DraggingRect[0].left-MdiInfo[WndNum].MdiRadInfo->ClientPos.x,
    262                 RadInfo.DraggingRect[0].top-MdiInfo[WndNum].MdiRadInfo->ClientPos.y);
     261                RadInfo.DraggingRect[0].left-MdiInfo[WndNum]->MdiRadInfo->ClientPos.x,
     262                RadInfo.DraggingRect[0].top-MdiInfo[WndNum]->MdiRadInfo->ClientPos.y);
    263263            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
    264264            sprintf(temporary,"size %d * %d",
     
    267267            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
    268268        }
    269         else if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
     269        else if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
    270270            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)"pos 0, 0");
    271271            sprintf(temporary,"size %d * %d",pWindowInfo->size.cx,pWindowInfo->size.cy);
     
    274274        else{
    275275            sprintf(temporary,"pos %d, %d",
    276                 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.x,
    277                 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->pos.y);
     276                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.x,
     277                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->pos.y);
    278278            SendMessage(hStatusBar,SB_SETTEXT,1,(LPARAM)temporary);
    279279            sprintf(temporary,"size %d * %d",
    280                 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->size.cx,
    281                 pWindowInfo->childWindowInfos[MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]]->size.cy);
     280                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cx,
     281                pWindowInfo->childWindowInfos[MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]]->size.cy);
    282282            SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)temporary);
    283283        }
    284284    }
    285     else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
     285    else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
    286286        //////////////////
    287287        // MENU エディタ
     
    291291        SendMessage(hStatusBar,SB_SETTEXT,2,(LPARAM)"");
    292292    }
    293     else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
     293    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
    294294        //////////////////
    295295        // ICON エディタ
     
    314314        pobj_StandardToolbar->EnableItem(IDM_REDO,0);
    315315    }
    316     else if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
    317         i2=MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos-1;
     316    else if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){
     317        i2=MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos-1;
    318318        if(i2==-1) i2=MAX_UNDONUM-1;
    319         if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[i2]){
     319        if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[i2]){
    320320            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
    321321            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
     
    327327            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
    328328        }
    329         if(!MdiInfo[i].pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i].pMdiTextEdit->pTextEditUndoState->NowPos]){
     329        if(!MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->Command[MdiInfo[i]->pMdiTextEdit->pTextEditUndoState->NowPos]){
    330330            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
    331331            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
     
    338338        }
    339339    }
    340     else if(MdiInfo[i].DocType==WNDTYPE_RAD){
    341         i2=MdiInfo[i].MdiRadInfo->undo.NowPos-1;
     340    else if(MdiInfo[i]->DocType==WNDTYPE_RAD){
     341        i2=MdiInfo[i]->MdiRadInfo->undo.NowPos-1;
    342342        if(i2==-1) i2=MAX_UNDONUM-1;
    343         if(!MdiInfo[i].MdiRadInfo->undo.Command[i2]){
     343        if(!MdiInfo[i]->MdiRadInfo->undo.Command[i2]){
    344344            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
    345345            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
     
    351351            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
    352352        }
    353         if(!MdiInfo[i].MdiRadInfo->undo.Command[MdiInfo[i].MdiRadInfo->undo.NowPos]){
     353        if(!MdiInfo[i]->MdiRadInfo->undo.Command[MdiInfo[i]->MdiRadInfo->undo.NowPos]){
    354354            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
    355355            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
     
    362362        }
    363363    }
    364     else if(MdiInfo[i].DocType==WNDTYPE_MENU){
     364    else if(MdiInfo[i]->DocType==WNDTYPE_MENU){
    365365        pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
    366366        EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
     
    371371        pobj_StandardToolbar->EnableItem(IDM_REDO,0);
    372372    }
    373     else if(MdiInfo[i].DocType==WNDTYPE_ICONEDIT){
    374         i2=MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos-1;
     373    else if(MdiInfo[i]->DocType==WNDTYPE_ICONEDIT){
     374        i2=MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos-1;
    375375        if(i2==-1) i2=MAX_ICONEDIT_UNDONUM-1;
    376         if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[i2]){
     376        if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[i2]){
    377377            pobj_MainMenu->EnableItem(IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
    378378            EnableMenuItem(hEditMenu,IDM_UNDO,MF_BYCOMMAND|MF_GRAYED);
     
    384384            pobj_StandardToolbar->EnableItem(IDM_UNDO,1);
    385385        }
    386         if(!MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i].MdiIconEditInfo->undo[MdiInfo[i].MdiIconEditInfo->SelectIconNum].NowPos]){
     386        if(!MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].lpData[MdiInfo[i]->MdiIconEditInfo->undo[MdiInfo[i]->MdiIconEditInfo->SelectIconNum].NowPos]){
    387387            pobj_MainMenu->EnableItem(IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
    388388            EnableMenuItem(hEditMenu,IDM_REDO,MF_BYCOMMAND|MF_GRAYED);
     
    454454    WndNum=GetWndNum(hChild);
    455455    if(WndNum==-1) return;
    456     if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
     456    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    457457        pobj_MainMenu->EnableItem(IDM_ALLSELECT,MF_BYCOMMAND|MF_ENABLED);
    458458        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_ENABLED);
     
    466466        hChild=GetWindow(hChild,GW_CHILD);
    467467        if(!(
    468             MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.x&&
    469             MdiInfo[WndNum].pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum].pMdiTextEdit->EndCaretPos.y
     468            MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.x==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.x&&
     469            MdiInfo[WndNum]->pMdiTextEdit->StartCaretPos.y==MdiInfo[WndNum]->pMdiTextEdit->EndCaretPos.y
    470470            )){
    471471            MenuMsg=MF_BYCOMMAND|MF_ENABLED;
     
    502502        ResetState_ConvMenu(bConvEnable);
    503503    }
    504     else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
     504    else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
    505505        //検索、置換、文字カウントを無効化
    506506        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
     
    511511        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
    512512
    513         if(MdiInfo[WndNum].MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
     513        if(MdiInfo[WndNum]->MdiRadInfo->SelectingItem[0]==SELECT_WINDOW){
    514514            //切り取り、コピー、削除を有効化
    515515            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
     
    548548        ResetState_ConvMenu(0);
    549549    }
    550     else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
     550    else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
    551551        //検索、置換、文字カウントを無効化
    552552        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
     
    571571        ResetState_ConvMenu(0);
    572572    }
    573     else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
     573    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
    574574        //検索、置換、文字カウントを無効化
    575575        pobj_MainMenu->EnableItem(IDM_FIND,MF_BYCOMMAND|MF_GRAYED);
     
    580580        pobj_StandardToolbar->EnableItem(IDM_FIND,0);
    581581
    582         if(MdiInfo[WndNum].MdiIconEditInfo->SelectLevel==0){
     582        if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==0){
    583583            //切り取り、コピー、削除を無効化
    584584            pobj_MainMenu->EnableItem(IDM_CUT,MF_BYCOMMAND|MF_GRAYED);
     
    645645    if( WndNum != -1 )
    646646    {
    647         if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
     647        if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    648648            pobj_MainMenu->EnableItem(IDM_PAGESET,MF_BYCOMMAND|MF_ENABLED);
    649649
     
    726726    int i;
    727727    for(i=0;i<MdiInfo.size();i++){
    728         if(MdiInfo[i].hwnd){
    729             if(lstrcmpi(MdiInfo[i].title.c_str(),lpszTitle)==0){
     728        if(MdiInfo[i]->hwnd){
     729            if(lstrcmpi(MdiInfo[i]->title.c_str(),lpszTitle)==0){
    730730                lstrcat(lpszTitle,"_");
    731731                DuplicateTitleCheck(lpszTitle);
     
    735735    }
    736736}
    737 HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor){
     737HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor)
     738{
    738739    int i;
    739740    char str[MAX_PATH],str2[32],*buffer;
     
    746747
    747748        //すでに指定されたファイルが開かれている場合
    748         hChild=GetWindow(hClient,GW_CHILD);
     749        hChild=::GetWindow(hClient,GW_CHILD);
    749750        while(hChild){
    750751            i=GetWndNum(hChild);
    751             if(IS_DOCUMENT_TEXT(MdiInfo[i].DocType)){
    752                 if(lstrcmpi(MdiInfo[i].path.c_str(),filepath)==0) break;
    753             }
    754             hChild=GetNextWindow(hChild,GW_HWNDNEXT);
     752            if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){
     753                if(lstrcmpi(MdiInfo[i]->path.c_str(),filepath)==0) break;
     754            }
     755            hChild=::GetNextWindow(hChild,GW_HWNDNEXT);
    755756        }
    756757        if(hChild){
    757758            //前面に表示して終了
    758             BringWindowToTop(hChild);
     759            ::BringWindowToTop(hChild);
    759760            return hChild;
    760761        }
     
    769770        if(hFile==INVALID_HANDLE_VALUE){
    770771            sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);
    771             MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
     772            ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);
    772773            return 0;
    773774        }
     
    853854    else{
    854855        buffer=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,1);
     856        extern int DocumentCounter;
    855857        DocumentCounter++;
    856858        sprintf(str,"Document[%d]",DocumentCounter);
     
    866868    mdic.szTitle=str;
    867869
    868     hChild=GetWindow(hClient,GW_CHILD);
    869     if(IsWindow(hChild)){
    870         if(IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
     870    hChild=::GetWindow(hClient,GW_CHILD);
     871    if(::IsWindow(hChild)){
     872        if(::IsZoomed(hChild)) mdic.style=WS_MAXIMIZE;
    871873        else mdic.style=0;
    872874    }
     
    883885    mdic.lParam=(LPARAM)shfi.hIcon;
    884886
    885     mdic.style|=WS_CLIPCHILDREN;
     887    mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX;
    886888    hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,(long)&mdic);   //ウィンドウ作成
    887889
    888890    //TextEditorコントロールを設置
    889     GetClientRect(hChild,&rect);
     891    ::GetClientRect(hChild,&rect);
    890892    hEdit=CreateWindow("TextEditor",NULL,
    891893        WS_CHILD|WS_HSCROLL|WS_VSCROLL|WS_VISIBLE,
     
    895897
    896898    //ウィンドウのID登録
    897     MdiInfo.push_back( MDIINFO() );
     899    MdiInfo.push_back( new MDIINFO() );
    898900    i = MdiInfo.size()-1;
    899     MdiInfo[i].hwnd=hChild;
    900     MdiInfo[i].DocType=DocumentType;
     901    MdiInfo[i]->hwnd=hChild;
     902    MdiInfo[i]->DocType=DocumentType;
    901903    DuplicateTitleCheck(str);
    902     MdiInfo[i].title = str;
     904    MdiInfo[i]->title = str;
    903905    if(filepath)
    904906    {
    905         MdiInfo[i].path = filepath;
     907        MdiInfo[i]->path = filepath;
    906908    }
    907909    else
    908910    {
    909         MdiInfo[i].path = "";
    910     }
    911 
    912     MdiInfo[i].pMdiTextEdit = new CMdiTextEdit( &MdiInfo[i] );
    913 
    914     MdiInfo[i].pMdiTextEdit->hEdit=hEdit;
    915     MdiInfo[i].pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
    916     MdiInfo[i].pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
    917     MdiInfo[i].pMdiTextEdit->hIcon=shfi.hIcon;
    918     MdiInfo[i].pMdiTextEdit->buffer=buffer;
    919     MdiInfo[i].pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
    920     MdiInfo[i].pMdiTextEdit->iUnderStart=-1;
    921     MdiInfo[i].pMdiTextEdit->iUnderEnd=-1;
    922     MdiInfo[i].pMdiTextEdit->StartCaretPos.x=0;
    923     MdiInfo[i].pMdiTextEdit->StartCaretPos.y=0;
    924     MdiInfo[i].pMdiTextEdit->EndCaretPos.x=0;
    925     MdiInfo[i].pMdiTextEdit->EndCaretPos.y=0;
    926     MdiInfo[i].pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
    927     MdiInfo[i].pMdiTextEdit->bAutoScroll=0;
    928     MdiInfo[i].pMdiTextEdit->iWidth_ControlTabSpace=
    929         GetControlTabSpace(i,&MdiInfo[i].pMdiTextEdit->iLineNumberTextCount);
    930     MdiInfo[i].pMdiTextEdit->iCharCode=iCharCode;
    931     MdiInfo[i].pMdiTextEdit->iLfCode=iLfCode;
    932     MdiInfo[i].IndentStr=0;
     911        MdiInfo[i]->path = "";
     912    }
     913
     914    MdiInfo[i]->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] );
     915
     916    MdiInfo[i]->pMdiTextEdit->hEdit=hEdit;
     917    MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);
     918    MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,i);
     919    MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon;
     920    MdiInfo[i]->pMdiTextEdit->buffer=buffer;
     921    MdiInfo[i]->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));
     922    MdiInfo[i]->pMdiTextEdit->iUnderStart=-1;
     923    MdiInfo[i]->pMdiTextEdit->iUnderEnd=-1;
     924    MdiInfo[i]->pMdiTextEdit->StartCaretPos.x=0;
     925    MdiInfo[i]->pMdiTextEdit->StartCaretPos.y=0;
     926    MdiInfo[i]->pMdiTextEdit->EndCaretPos.x=0;
     927    MdiInfo[i]->pMdiTextEdit->EndCaretPos.y=0;
     928    MdiInfo[i]->pMdiTextEdit->Temp_UpDown_CaretXPos=-1;
     929    MdiInfo[i]->pMdiTextEdit->bAutoScroll=0;
     930    MdiInfo[i]->pMdiTextEdit->iWidth_ControlTabSpace=
     931        GetControlTabSpace(i,&MdiInfo[i]->pMdiTextEdit->iLineNumberTextCount);
     932    MdiInfo[i]->pMdiTextEdit->iCharCode=iCharCode;
     933    MdiInfo[i]->pMdiTextEdit->iLfCode=iLfCode;
     934    MdiInfo[i]->IndentStr=0;
    933935
    934936
     
    944946    //Docコンボボックスに追加
    945947    extern HWND hDocCombo;
    946     i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
    947     SendMessage(hDocCombo,CB_SETCURSEL,i,0);
     948    if( hDocCombo )
     949    {
     950        i=SendMessage(hDocCombo,CB_ADDSTRING,0,(long)str);
     951        SendMessage(hDocCombo,CB_SETCURSEL,i,0);
     952    }
    948953
    949954    //タブに追加
    950955    pobj_MainTab->InsertItem( str, true, TabColor );
    951956
    952     SetFocus(hEdit);
     957    ::SetFocus(hEdit);
    953958    SetStatusText(NULL);
    954959
     
    958963    if( DocumentType == WNDTYPE_BASIC && !projectInfo.IsOpened() ){
    959964        // 単体ソースコードを開いたとき
    960         if( !IsWindowVisible( hProjectView ) ){
     965        extern HWND hProjectView;
     966        if( !::IsWindowVisible( hProjectView ) ){
    961967            // クラスビューを表示する
    962968            SendMessage(hOwner,WM_COMMAND,IDM_PROJECTVIEW,0);
     
    973979    int i2,i3;
    974980
    975     MdiInfo[WndNum].hwnd=0;
     981    MdiInfo[WndNum]->hwnd=0;
    976982
    977983    //ドキュメントコンボボックスから文字列を消去
    978984    extern HWND hDocCombo;
    979     i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum].title.c_str());
     985    i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
    980986    SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
    981987
    982988    //タブコントロールからアイテムを消去
    983     if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum].title.c_str(), true );
    984 
    985 
    986     if(IS_DOCUMENT_TEXT(MdiInfo[WndNum].DocType)){
     989    if(pobj_MainTab) pobj_MainTab->DeleteItem( MdiInfo[WndNum]->title.c_str(), true );
     990
     991
     992    if(IS_DOCUMENT_TEXT(MdiInfo[WndNum]->DocType)){
    987993        ////////////////////////////
    988994        // テキストエディタを閉じる
     
    9961002        }
    9971003
    998         HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->buffer);
    999         HeapDefaultFree(MdiInfo[WndNum].pMdiTextEdit->pColorRef);
    1000 
    1001         if(MdiInfo[WndNum].IndentStr) HeapDefaultFree(MdiInfo[WndNum].IndentStr);
     1004        HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->buffer);
     1005        HeapDefaultFree(MdiInfo[WndNum]->pMdiTextEdit->pColorRef);
     1006
     1007        if(MdiInfo[WndNum]->IndentStr) HeapDefaultFree(MdiInfo[WndNum]->IndentStr);
    10021008
    10031009        //エディットコントロールを破棄
    1004         DestroyWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit);
     1010        DestroyWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit);
    10051011
    10061012        //Web検索ウィンドウを破棄
    1007         delete MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult;
    1008         MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult=0;
     1013        delete MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult;
     1014        MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult=0;
    10091015
    10101016        //ルーラーウィンドウを破棄
    1011         delete MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler;
    1012         MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler=0;
     1017        delete MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler;
     1018        MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler=0;
    10131019
    10141020        //アイコンを破棄
    1015         if(MdiInfo[WndNum].pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum].pMdiTextEdit->hIcon);
    1016 
    1017         delete MdiInfo[WndNum].pMdiTextEdit;
    1018         MdiInfo[WndNum].pMdiTextEdit=0;
    1019     }
    1020     else if(MdiInfo[WndNum].DocType==WNDTYPE_RAD){
     1021        if(MdiInfo[WndNum]->pMdiTextEdit->hIcon) DestroyIcon(MdiInfo[WndNum]->pMdiTextEdit->hIcon);
     1022
     1023        delete MdiInfo[WndNum]->pMdiTextEdit;
     1024        MdiInfo[WndNum]->pMdiTextEdit=0;
     1025    }
     1026    else if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD){
    10211027        /////////////////////
    10221028        // RADツールを閉じる
     
    10241030
    10251031        for(i2=0;i2<MAX_UNDONUM;i2++){
    1026             if(MdiInfo[WndNum].MdiRadInfo->undo.Command[i2])
     1032            if(MdiInfo[WndNum]->MdiRadInfo->undo.Command[i2])
    10271033                Rad_DeleteUndoData(WndNum,i2);
    10281034        }
    1029         DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hTools);
    1030         DestroyWindow(MdiInfo[WndNum].MdiRadInfo->hRad);
    1031         SelectObject(MdiInfo[WndNum].MdiRadInfo->hMemDC,MdiInfo[WndNum].MdiRadInfo->hOldBitmap);
    1032         DeleteDC(MdiInfo[WndNum].MdiRadInfo->hMemDC);
    1033         DeleteObject(MdiInfo[WndNum].MdiRadInfo->hBitmap);
    1034         GlobalFree(MdiInfo[WndNum].MdiRadInfo);
    1035     }
    1036     else if(MdiInfo[WndNum].DocType==WNDTYPE_MENU){
     1035        DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hTools);
     1036        DestroyWindow(MdiInfo[WndNum]->MdiRadInfo->hRad);
     1037        SelectObject(MdiInfo[WndNum]->MdiRadInfo->hMemDC,MdiInfo[WndNum]->MdiRadInfo->hOldBitmap);
     1038        DeleteDC(MdiInfo[WndNum]->MdiRadInfo->hMemDC);
     1039        DeleteObject(MdiInfo[WndNum]->MdiRadInfo->hBitmap);
     1040        GlobalFree(MdiInfo[WndNum]->MdiRadInfo);
     1041    }
     1042    else if(MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
    10371043        ////////////////////////////
    10381044        // メニューエディタを閉じる
    10391045        ////////////////////////////
    10401046
    1041         DestroyWindow(MdiInfo[WndNum].MdiMenuInfo->hList);
    1042         GlobalFree(MdiInfo[WndNum].MdiMenuInfo);
    1043     }
    1044     else if(MdiInfo[WndNum].DocType==WNDTYPE_ICONEDIT){
     1047        DestroyWindow(MdiInfo[WndNum]->MdiMenuInfo->hList);
     1048        GlobalFree(MdiInfo[WndNum]->MdiMenuInfo);
     1049    }
     1050    else if(MdiInfo[WndNum]->DocType==WNDTYPE_ICONEDIT){
    10451051        ////////////////////////////
    10461052        // アイコンエディタを閉じる
    10471053        ////////////////////////////
    10481054
    1049         for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
     1055        for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){
    10501056            for(i3=0;i3<MAX_ICONEDIT_UNDONUM;i3++){
    1051                 if(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3])
    1052                     HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->undo[i2].lpData[i3]);
    1053             }
    1054         }
    1055 
    1056         DeleteDC(MdiInfo[WndNum].MdiIconEditInfo->memdc);
    1057         DeleteObject(MdiInfo[WndNum].MdiIconEditInfo->hMemBmp);
    1058         DestroyWindow(MdiInfo[WndNum].MdiIconEditInfo->hMain);
    1059         for(i2=0;i2<MdiInfo[WndNum].MdiIconEditInfo->num;i2++){
    1060             HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo->pIconImage[i2]);
    1061         }
    1062         HeapDefaultFree(MdiInfo[WndNum].MdiIconEditInfo);
     1057                if(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3])
     1058                    HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->undo[i2].lpData[i3]);
     1059            }
     1060        }
     1061
     1062        DeleteDC(MdiInfo[WndNum]->MdiIconEditInfo->memdc);
     1063        DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hMemBmp);
     1064        DestroyWindow(MdiInfo[WndNum]->MdiIconEditInfo->hMain);
     1065        for(i2=0;i2<MdiInfo[WndNum]->MdiIconEditInfo->num;i2++){
     1066            HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[i2]);
     1067        }
     1068        HeapDefaultFree(MdiInfo[WndNum]->MdiIconEditInfo);
    10631069    }
    10641070    else
     
    10671073    }
    10681074
    1069     Jenga::Common::EraseVectorItem<std::vector<MDIINFO>>( MdiInfo, WndNum );
     1075    delete MdiInfo[WndNum];
     1076    Jenga::Common::EraseVectorItem<std::vector<MDIINFO *>>( MdiInfo, WndNum );
    10701077}
    10711078void ResizeTextEditWnd(HWND hwnd,int cx,int cy){
     
    10821089    if(pobj_nv->bEditor_Ruler){
    10831090        //ルーラー
    1084         MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->resize(
     1091        MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->resize(
    10851092            0,
    10861093            0,
     
    10901097        iHeightRuler=HEIGHT_RULER;
    10911098
    1092         ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
     1099        ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_SHOW);
    10931100    }
    10941101    else{
    10951102        iHeightRuler=0;
    10961103
    1097         ShowWindow(MdiInfo[WndNum].pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
     1104        ShowWindow(MdiInfo[WndNum]->pMdiTextEdit->pobj_Ruler->hRulerWnd,SW_HIDE);
    10981105    }
    10991106
    11001107    //エディットウィンドウ
    1101     MoveWindow(MdiInfo[WndNum].pMdiTextEdit->hEdit,
     1108    MoveWindow(MdiInfo[WndNum]->pMdiTextEdit->hEdit,
    11021109        0,
    11031110        iHeightRuler,
     
    11071114
    11081115    //Web検索ウィンドウ
    1109     MdiInfo[WndNum].pMdiTextEdit->pobj_WebResult->resize(
     1116    MdiInfo[WndNum]->pMdiTextEdit->pobj_WebResult->resize(
    11101117        0,
    11111118        cy-WebResultWndHeight,
     
    11491156            //ドキュメント セレクト コンボボックス
    11501157            extern HWND hDocCombo;
    1151             i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i].title.c_str());
     1158            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[i]->title.c_str());
    11521159            SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
    11531160
    11541161            //タブコントロール
    1155             pobj_MainTab->MdiActiveEvent(MdiInfo[i].title.c_str());
     1162            pobj_MainTab->MdiActiveEvent(MdiInfo[i]->title.c_str());
    11561163
    11571164            if( !projectInfo.IsOpened() ){
     
    11831190    return DefMDIChildProc(hwnd,message,wParam,lParam);
    11841191}
    1185 void ResizeOwnerWnd(void){
    1186     int width_owner,height_owner;
    1187     int height_Rebar;
    1188     int height_MdiClient;
    1189     RECT rect,StatusRect,RebarRect;
    1190 
    1191     GetClientRect(hOwner,&rect);
    1192     width_owner=rect.right;
    1193     height_owner=rect.bottom;
    1194 
    1195     //Rebar
    1196     SendMessage(pobj_Rebar->hRebar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
    1197     UpdateWindow(pobj_Rebar->hRebar);
    1198 
    1199     //Status bar
    1200 #define STATUSBAR_PARTS_NUM 5
    1201     int sb_size[STATUSBAR_PARTS_NUM];
    1202     sb_size[0]=width_owner-340;
    1203     sb_size[1]=width_owner-220;
    1204     sb_size[2]=width_owner-120;
    1205     sb_size[3]=width_owner-50;
    1206     sb_size[4]=width_owner;
    1207     SendMessage(hStatusBar,SB_SETPARTS,STATUSBAR_PARTS_NUM,(LPARAM)sb_size);
    1208     SendMessage(hStatusBar,WM_SIZE,0,MAKELONG(width_owner,height_owner));
    1209     UpdateWindow(hStatusBar);
    1210 
    1211     //Status bar
    1212     int height_Statusbar;
    1213     SendMessage(hStatusBar,SB_GETRECT,0,(long)&StatusRect);
    1214     height_Statusbar=StatusRect.bottom;
    1215 
    1216     GetWindowRect(pobj_Rebar->hRebar,&RebarRect);
    1217     height_Rebar=RebarRect.bottom-RebarRect.top+2;
    1218 
    1219     int height_dv;  //Width of Debugger View
    1220     int height_cv;  //Width of Compiler View
    1221     height_dv=0;
    1222     height_cv=0;
    1223 #ifndef THETEXT
    1224     if(bClipCompileView){
    1225         if(pobj_Debugger->IsDebuggerView()){
    1226             //デバッガビューが表示されているとき
    1227             height_dv=pobj_nv->height_ClipDebuggerView+LEVER_THICK;
    1228         }
    1229         if(hCompileView){
    1230             //コンパイラビューが表示されているとき
    1231             height_cv=pobj_nv->height_ClipCompileView+LEVER_THICK;
    1232         }
    1233     }
    1234 #endif
    1235 
    1236     int width_pjv=0;    //Width of Project View
    1237     if(pobj_nv->bClipProjectView){
    1238         if(IsWindowVisible(hProjectView)){
    1239             //プロジェクトビューが表示されているとき
    1240             width_pjv=pobj_nv->width_ClipProjectView+LEVER_THICK;
    1241         }
    1242     }
    1243 
    1244     int width_SideWeb=0;
    1245     if( pobj_SideWeb )
    1246     {
    1247         if(pobj_SideWeb->bShow){
    1248             width_SideWeb=pobj_nv->width_WebSearchView+LEVER_THICK;
    1249         }
    1250     }
    1251 
    1252     //MDIクライアントの高さ
    1253     height_MdiClient=height_owner-(
    1254         height_Rebar+
    1255         height_dv+
    1256         height_cv+
    1257         height_Statusbar
    1258         );
    1259 
    1260     //タブコントロール
    1261     int tab_height;
    1262     if(TabCtrl_GetItemCount(pobj_MainTab->hTab)==0) tab_height=0;
    1263     else{
    1264         RECT rc;
    1265         TabCtrl_GetItemRect(pobj_MainTab->hTab,0,&rc);
    1266         tab_height=rc.bottom-rc.top;
    1267     }
    1268     MoveWindow(pobj_MainTab->hTab,
    1269         width_pjv,
    1270         height_Rebar,
    1271         width_owner-width_pjv-width_SideWeb,
    1272         tab_height,
    1273         1);
    1274 
    1275     //MDIクライアント
    1276     MoveWindow(hClient,
    1277         width_pjv,
    1278         height_Rebar+tab_height,
    1279         width_owner-width_pjv-width_SideWeb,
    1280         height_MdiClient-tab_height,
    1281         1);
    1282 
    1283     if( pobj_SideWeb )
    1284     {
    1285         if(pobj_SideWeb->bShow){
    1286             //SideWeb
    1287             pobj_SideWeb->resize(
    1288                 width_owner - pobj_nv->width_WebSearchView,
    1289                 height_Rebar,
    1290                 pobj_nv->width_WebSearchView,
    1291                 height_MdiClient);
    1292         }
    1293         else pobj_SideWeb->resize(0,0,0,0);
    1294     }
    1295 
    1296     if(width_pjv){
    1297         //プロジェクトビュー
    1298         MoveWindow(hProjectView,
    1299             0,
    1300             height_Rebar,
    1301             pobj_nv->width_ClipProjectView,
    1302             height_MdiClient,
    1303             1);
    1304         InvalidateRect(hProjectView,NULL,0);
    1305     }
    1306 
    1307     if(height_dv){
    1308 #ifndef THETEXT
    1309         //デバッガビュー
    1310         pobj_Debugger->resize(
    1311             0,
    1312             height_Rebar+height_MdiClient+LEVER_THICK,
    1313             width_owner,
    1314             pobj_nv->height_ClipDebuggerView);
    1315 #endif
    1316     }
    1317     if(height_cv){
    1318         //コンパイラビュー
    1319         MoveWindow(hCompileView,
    1320             0,
    1321             height_Rebar+height_MdiClient+height_dv+LEVER_THICK,
    1322             width_owner,
    1323             pobj_nv->height_ClipCompileView,
    1324             1);
    1325     }
    1326 }
    13271192
    13281193WNDPROC oldMainFrameWndProc;
     
    13531218            //コンパイラウィンドウ(埋め込み型)が表示されたとき
    13541219            hCompileView=(HWND)lParam;
    1355             ResizeOwnerWnd();
     1220            ActiveBasic::IDE::Program::mainFrame.Resized();
    13561221            return 0;
    13571222        case WM_DESTROYCOMPILEVIEW:
     
    13651230                hCompileView=0;
    13661231               
    1367                 ResizeOwnerWnd();
     1232                ActiveBasic::IDE::Program::mainFrame.Resized();
    13681233            }
    13691234            return 0;
     
    13891254            //デバッガウィンドウ(埋め込み型)が表示されたとき
    13901255            pobj_Debugger->watch_start((HWND)lParam);
    1391             ResizeOwnerWnd();
     1256            ActiveBasic::IDE::Program::mainFrame.Resized();
    13921257            return 0;
    13931258        case WM_DESTROYDEBUGGERVIEW:
    13941259            //デバッガウィンドウ(埋め込み型)が破棄されたとき
    13951260            pobj_Debugger->watch_quit();
    1396             ResizeOwnerWnd();
     1261            ActiveBasic::IDE::Program::mainFrame.Resized();
    13971262            return 0;
    13981263#endif
    1399 
    1400         case WM_SIZE:
    1401             ResizeOwnerWnd();
    1402             return 0;
    14031264
    14041265
     
    14421303                }
    14431304
    1444                 ResizeOwnerWnd();
     1305                ActiveBasic::IDE::Program::mainFrame.Resized();
    14451306                UpdateWindow(hwnd);
    14461307            }
     
    17171578            if( projectInfo.IsOpened() ){
    17181579                for(i=0,i2=0;i<MdiInfo.size();i++){
    1719                     if(MdiInfo[i].hwnd&&MdiInfo[i].DocType==WNDTYPE_RAD){
    1720                         if(IsDialogMessage(MdiInfo[i].MdiRadInfo->hProp_Dlg,&msg)) i2=1;
     1580                    if(MdiInfo[i]->hwnd&&MdiInfo[i]->DocType==WNDTYPE_RAD){
     1581                        if(IsDialogMessage(MdiInfo[i]->MdiRadInfo->hProp_Dlg,&msg)) i2=1;
    17211582                    }
    17221583                }
Note: See TracChangeset for help on using the changeset viewer.