Changeset 697 in dev for trunk/ab5.0/abdev/abdev/abdev.cpp
- Timestamp:
- Jul 19, 2008, 9:03:01 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ab5.0/abdev/abdev/abdev.cpp
r655 r697 3 3 #include "abdev.h" 4 4 5 #ifdef _DEBUG 6 #include <crtdbg.h> 7 #endif 5 8 6 9 #if defined HeapAlloc … … 731 734 } 732 735 } 733 HWND NewTextEditWindow(char *filepath,_int8 DocumentType,COLORREF TabColor) 736 737 //たぶんこれでは全然足りない 738 inline void PathNormalize(char *buf, size_t bufSize, const char *path) 739 { 740 DWORD shortFilepathLen = GetShortPathName(path, buf, bufSize); 741 std::replace(buf, buf + shortFilepathLen, '/', '\\'); 742 } 743 744 HWND NewTextEditWindow(const char *filepath,_int8 DocumentType,COLORREF TabColor) 734 745 { 735 746 int i; … … 739 750 int iCharCode=NKF_SHIFT_JIS; 740 751 int iLfCode=LFCODE_CRLF; 752 FILEIDENTITY fileIdentity = {0}; 741 753 742 754 if(filepath){ 755 HANDLE hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 756 if(hFile==INVALID_HANDLE_VALUE){ 757 sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath); 758 ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION); 759 return 0; 760 } 761 DWORD length; 762 763 typedef BOOL WINAPI GFIBH(HANDLE, LPBY_HANDLE_FILE_INFORMATION); 764 BY_HANDLE_FILE_INFORMATION fi; 765 GFIBH *const pgfibh = reinterpret_cast<GFIBH*>( 766 GetProcAddress(GetModuleHandle("kernel32"), "GetFileInformationByHandle")); 767 if(pgfibh && pgfibh(hFile, &fi)){ 768 fileIdentity.VolumeSerialNumber = fi.dwVolumeSerialNumber; 769 fileIdentity.FileIndexHigh = fi.nFileIndexHigh; 770 fileIdentity.FileIndexLow = fi.nFileIndexLow; 771 length=fi.nFileSizeLow; 772 } 773 else{ 774 length=GetFileSize(hFile,NULL); 775 } 743 776 744 777 //すでに指定されたファイルが開かれている場合 745 778 hChild=::GetWindow(hClient,GW_CHILD); 779 char shortFilepath[MAX_PATH]; 780 PathNormalize(shortFilepath, MAX_PATH, filepath); 746 781 while(hChild){ 747 782 i=GetWndNum(hChild); 748 783 if(IS_DOCUMENT_TEXT(MdiInfo[i]->DocType)){ 749 if(lstrcmpi(MdiInfo[i]->path.c_str(),filepath)==0) break; 784 if(IsFileIdentityValid(fileIdentity)&&IsFileIdentityValid(MdiInfo[i]->FileIdentity) 785 && fileIdentity==MdiInfo[i]->FileIdentity) 786 { 787 break; 788 } 789 else{ 790 char shortPathnameDoc[MAX_PATH]; 791 PathNormalize(shortPathnameDoc, MAX_PATH, MdiInfo[i]->path.c_str()); 792 if(_strcmpi(shortFilepath,shortPathnameDoc)==0) 793 break; 794 } 750 795 } 751 796 hChild=::GetNextWindow(hChild,GW_HWNDNEXT); … … 761 806 //ファイル読み込み(正常に読み込めるかの確認も含む) 762 807 ////////////////////////////////////////////////////// 763 764 HANDLE hFile;765 hFile=CreateFile(filepath,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);766 if(hFile==INVALID_HANDLE_VALUE){767 sprintf(str,STRING_ERROR_CANT_FILEOPEN,filepath);768 ::MessageBox(hOwner,str,STRING_ERROR,MB_OK|MB_ICONEXCLAMATION);769 return 0;770 }771 int length;772 length=GetFileSize(hFile,NULL);773 808 774 809 char *temp; … … 882 917 883 918 mdic.style |= WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX; 884 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0, (long)&mdic); //ウィンドウ作成919 hChild=(HWND)SendMessage(hClient,WM_MDICREATE,0,reinterpret_cast<LPARAM>(&mdic)); //ウィンドウ作成 885 920 886 921 //TextEditorコントロールを設置 … … 893 928 894 929 //ウィンドウのID登録 895 MdiInfo.push_back( new MDIINFO() ); 930 MDIINFO *pmi = new MDIINFO(); 931 MdiInfo.push_back( pmi ); 896 932 i = MdiInfo.size()-1; 897 MdiInfo[i]->hwnd=hChild;898 MdiInfo[i]->DocType=DocumentType;933 pmi->hwnd=hChild; 934 pmi->DocType=DocumentType; 899 935 DuplicateTitleCheck(str); 900 MdiInfo[i]->title = str; 936 pmi->title = str; 937 pmi->FileIdentity = fileIdentity; 901 938 if(filepath) 902 939 { 903 MdiInfo[i]->path = filepath;940 pmi->path = filepath; 904 941 } 905 942 else 906 943 { 907 MdiInfo[i]->path = "";908 } 909 910 MdiInfo[i]->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] );911 912 MdiInfo[i]->pMdiTextEdit->hEdit=hEdit;913 MdiInfo[i]->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild);914 MdiInfo[i]->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,MdiInfo[i]);915 MdiInfo[i]->pMdiTextEdit->hIcon=shfi.hIcon;916 MdiInfo[i]->pMdiTextEdit->buffer=buffer;917 MdiInfo[i]->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer));918 MdiInfo[i]->pMdiTextEdit->iUnderStart=-1;919 MdiInfo[i]->pMdiTextEdit->iUnderEnd=-1;920 MdiInfo[i]->pMdiTextEdit->StartCaretPos.x=0;921 MdiInfo[i]->pMdiTextEdit->StartCaretPos.y=0;922 MdiInfo[i]->pMdiTextEdit->EndCaretPos.x=0;923 MdiInfo[i]->pMdiTextEdit->EndCaretPos.y=0;924 MdiInfo[i]->pMdiTextEdit->Temp_UpDown_CaretXPos=-1;925 MdiInfo[i]->pMdiTextEdit->bAutoScroll=0;926 MdiInfo[i]->pMdiTextEdit->iWidth_ControlTabSpace=927 GetControlTabSpace(i,& MdiInfo[i]->pMdiTextEdit->iLineNumberTextCount);928 MdiInfo[i]->pMdiTextEdit->iCharCode=iCharCode;929 MdiInfo[i]->pMdiTextEdit->iLfCode=iLfCode;930 MdiInfo[i]->IndentStr=0;944 pmi->path = ""; 945 } 946 947 pmi->pMdiTextEdit = new CMdiTextEdit( MdiInfo[i] ); 948 949 pmi->pMdiTextEdit->hEdit=hEdit; 950 pmi->pMdiTextEdit->pobj_WebResult=new CWebResult(hChild); 951 pmi->pMdiTextEdit->pobj_Ruler=new CRuler(hChild,pmi); 952 pmi->pMdiTextEdit->hIcon=shfi.hIcon; 953 pmi->pMdiTextEdit->buffer=buffer; 954 pmi->pMdiTextEdit->pColorRef=(COLORREF *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,sizeof(COLORREF)*lstrlen(buffer)); 955 pmi->pMdiTextEdit->iUnderStart=-1; 956 pmi->pMdiTextEdit->iUnderEnd=-1; 957 pmi->pMdiTextEdit->StartCaretPos.x=0; 958 pmi->pMdiTextEdit->StartCaretPos.y=0; 959 pmi->pMdiTextEdit->EndCaretPos.x=0; 960 pmi->pMdiTextEdit->EndCaretPos.y=0; 961 pmi->pMdiTextEdit->Temp_UpDown_CaretXPos=-1; 962 pmi->pMdiTextEdit->bAutoScroll=0; 963 pmi->pMdiTextEdit->iWidth_ControlTabSpace= 964 GetControlTabSpace(i,&pmi->pMdiTextEdit->iLineNumberTextCount); 965 pmi->pMdiTextEdit->iCharCode=iCharCode; 966 pmi->pMdiTextEdit->iLfCode=iLfCode; 967 pmi->IndentStr=0; 931 968 932 969 … … 1453 1490 return RegisterClassEx(&wcl); 1454 1491 } 1455 int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int ShowCmd){ 1492 int PASCAL WinMain(HINSTANCE hThisInst,HINSTANCE,LPSTR lpCmdLine,int ShowCmd){ 1493 #ifdef _DEBUG 1494 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_DELAY_FREE_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 1495 #endif 1456 1496 int i,i2,IsStr; 1457 1497 char str[MAX_PATH],str2[MAX_PATH],dummy[1024];
Note:
See TracChangeset
for help on using the changeset viewer.