Ignore:
Timestamp:
Jul 21, 2008, 1:04:12 AM (16 years ago)
Author:
イグトランス (egtra)
Message:

CRequireFilesの管理をhash_setベースへ。保存時にFileIndexの記録を行っていなかった問題を修正。rev.669でコミットし忘れのcompiler_x86/NumOpe.cppを追加。

File:
1 edited

Legend:

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

    r697 r700  
    1616            return;
    1717        }
     18    }
     19    else{
     20        FindClose(hFind);
    1821    }
    1922}
     
    334337    return NewTextEditWindow(OpenFileName,DocumentType,TabColor);
    335338}
     339
     340BOOL GetFileInformationByHandleWrap(HANDLE hFile, BY_HANDLE_FILE_INFORMATION& fi){
     341    typedef BOOL WINAPI GFIBH(HANDLE, LPBY_HANDLE_FILE_INFORMATION);
     342    GFIBH *const pgfibh = reinterpret_cast<GFIBH*>(
     343        GetProcAddress(GetModuleHandle("kernel32"), "GetFileInformationByHandle"));
     344    if(pgfibh){
     345        return pgfibh(hFile, &fi);
     346    }
     347    else{
     348        SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
     349        return FALSE;
     350    }
     351}
     352
     353//重複チェック用のデータを設定
     354void SetFileIdentity(FILEIDENTITY &fi, BY_HANDLE_FILE_INFORMATION const &bhfi){
     355    fi.VolumeSerialNumber = bhfi.dwVolumeSerialNumber;
     356    fi.FileIndexHigh = bhfi.nFileIndexHigh;
     357    fi.FileIndexLow = bhfi.nFileIndexLow;
     358}
     359
     360void SetFileIdentityFromFile(MDIINFO &mi, HANDLE hFile){
     361    BY_HANDLE_FILE_INFORMATION fi;
     362    if(GetFileInformationByHandleWrap(hFile, fi)){
     363        SetFileIdentity(mi.FileIdentity, fi);
     364    }
     365}
     366
    336367BOOL SaveDocument(HWND hChild,char *SaveFileName){  //ウィンドウからバッファを読み取り、ファイルに保存
     368    //SaveFileNameがNULLのときは上書き保存を試みる。
    337369    extern LPSTR IconFileFilter;
    338370    extern HWND hClient,hDocCombo;
     
    344376    WndNum=GetWndNum(hChild);
    345377
    346     char szOldTitle[MAX_PATH];
    347     lstrcpy(szOldTitle,MdiInfo[WndNum]->title.c_str());
     378    std::string oldTitle = MdiInfo[WndNum]->title;
    348379
    349380    if(MdiInfo[WndNum]->DocType==WNDTYPE_RAD||MdiInfo[WndNum]->DocType==WNDTYPE_MENU){
     
    353384
    354385        if(projectInfo.ModifyOfMaterial){
    355             sprintf(temporary,"%s%s.wnd",projectInfo.GetWorkDir().GetPath().c_str(),projectInfo.GetName().c_str());
    356             SaveWindowFile( temporary, projectInfo.windowInfos );
     386            std::string const& workDir = projectInfo.GetWorkDir().GetPath();
     387            std::string const& projName = projectInfo.GetName();
     388            std::string t;
     389            t.reserve( workDir.size() + projName.size() + 4 );
     390            t += workDir;
     391            t += projName;
     392            t += ".wnd";
     393            SaveWindowFile( t.c_str(), projectInfo.windowInfos );
    357394
    358395            //.wbpファイルを生成
     
    370407                sprintf(str,STRING_FILE_OVERWRIDE,temporary);
    371408                if(MessageBox(hOwner,str,APPLICATION_NAME,MB_YESNO|MB_ICONINFORMATION)==IDNO){
    372                     CloseHandle(fh);
    373409                    return 0;
    374410                }
     
    377413
    378414            //ドキュメント セレクト コンボボックスから消去
    379             i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
     415            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
    380416            SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
    381417
     
    387423            lstrcat(str,str2);
    388424            MdiInfo[WndNum]->title = str;
    389             SendMessage(hDocCombo,CB_ADDSTRING,0,(long)MdiInfo[WndNum]->title.c_str());
    390             i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
     425            SendMessage(hDocCombo,CB_ADDSTRING,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
     426            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
    391427            SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
    392428
     
    448484            return 0;
    449485        }
    450         WriteFile(fh,pBuf,lstrlen(pBuf),&dummy,NULL);
     486        WriteFile(fh,pBuf,strlen(pBuf),&dummy,NULL);
     487        SetFileIdentityFromFile(*MdiInfo[WndNum], fh);
    451488        CloseHandle(fh);
    452489
     
    473510            CloseHandle(fh);
    474511            MdiInfo[WndNum]->path = temporary;
    475             i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
     512            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
    476513            SendMessage(hDocCombo,CB_DELETESTRING,i2,0);
    477514            _splitpath(temporary,NULL,NULL,str,str2);
    478515            lstrcat(str,str2);
    479516            MdiInfo[WndNum]->title = str;
    480             SendMessage(hDocCombo,CB_ADDSTRING,0,(long)MdiInfo[WndNum]->title.c_str());
    481             i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(long)MdiInfo[WndNum]->title.c_str());
     517            SendMessage(hDocCombo,CB_ADDSTRING,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
     518            i2=SendMessage(hDocCombo,CB_FINDSTRINGEXACT,0,(LONG_PTR)MdiInfo[WndNum]->title.c_str());
    482519            SendMessage(hDocCombo,CB_SETCURSEL,i2,0);
    483520            SetWindowText(hChild,MdiInfo[WndNum]->title.c_str());
     
    501538    if(pobj_nv->bSaveTabToHead){
    502539        COLORREF color;
    503         color=pobj_MainTab->GetItemColor(szOldTitle);
    504         pobj_MainTab->DeleteItem( szOldTitle, false );
     540        color=pobj_MainTab->GetItemColor(oldTitle.c_str());
     541        pobj_MainTab->DeleteItem( oldTitle.c_str(), false );
    505542        pobj_MainTab->InsertItem( MdiInfo[WndNum]->title.c_str(), false, color );
    506543    }
    507544    else{
    508         pobj_MainTab->RenameItem( szOldTitle, MdiInfo[WndNum]->title.c_str() );
     545        pobj_MainTab->RenameItem( oldTitle.c_str(), MdiInfo[WndNum]->title.c_str() );
    509546    }
    510547
Note: See TracChangeset for help on using the changeset viewer.