/*! テンプレディレクトリに入ってるHeaderFooterファイルの中身をゲットする */ HRESULT PreviewHeaderGet( VOID ) { TCHAR atPrevFile[MAX_PATH]; HANDLE hFile; DWORD readed; INT iByteSize; LPSTR pcText, pcNext; gpcHtmlHdr = NULL; gpcHtmlFtr = NULL; // ヘッダ・フッタを確保 StringCchCopy( atPrevFile, MAX_PATH, ExePathGet() ); PathAppend( atPrevFile, TEMPLATE_DIR ); PathAppend( atPrevFile, PREV_HEADER_FILE ); hFile = CreateFile( atPrevFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( INVALID_HANDLE_VALUE == hFile ){ return E_HANDLE; } iByteSize = GetFileSize( hFile, NULL ); pcText = (LPSTR)malloc( iByteSize + 2 ); ZeroMemory( pcText, iByteSize + 2 ); SetFilePointer( hFile, 0, NULL, FILE_BEGIN ); ReadFile( hFile, pcText, iByteSize, &readed, NULL ); CloseHandle( hFile ); // 内容全部取り込んだから開放 gpcHtmlHdr = pcText; // HEADER部分・freeにもつかう pcNext = StrStrA( pcText, SEPARATE_TAG ); pcNext[0] = NULL; // HEADERとFOOTERの境界にヌルターミネータ pcNext++; gpcHtmlFtr = NextLineA( pcNext ); // 次の行からが本番 return S_OK; }
/*! ユーザ定義のアレを読み込む @param[in] hWnd メインウインドウハンドル @param[in] bFirst 今回が最初であるか @return 非0中身取った処理した 0ファイルなかった */ INT UserDefInitialise( HWND hWnd, UINT bFirst ) { CONST WCHAR rtHead = 0xFEFF; // ユニコードテキストヘッダ WCHAR rtUniBuf; HANDLE hFile; DWORD readed; LPVOID pBuffer; // 文字列バッファ用ポインター INT iByteSize; LPTSTR ptString; LPSTR pcText; UINT cchSize; if( bFirst ) // 最初ならパス作っておく { ZeroMemory( gatUsDfPath, sizeof(gatUsDfPath) ); StringCchCopy( gatUsDfPath, MAX_PATH, ExePathGet() ); PathAppend( gatUsDfPath, TEMPLATE_DIR ); PathAppend( gatUsDfPath, USER_ITEM_FILE ); } hFile = CreateFile( gatUsDfPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if( INVALID_HANDLE_VALUE == hFile ){ return 0; } // 今の内容破棄 UserDefObliterate( hWnd ); iByteSize = GetFileSize( hFile, NULL ); pBuffer = malloc( iByteSize + 2 ); ZeroMemory( pBuffer, iByteSize + 2 ); // 中身をいただく SetFilePointer( hFile, 0, NULL, FILE_BEGIN ); ReadFile( hFile, pBuffer, iByteSize, &readed, NULL ); CloseHandle( hFile ); // 内容全部取り込んだから開放 // ユニコードチャック CopyMemory( &rtUniBuf, pBuffer, 2 ); if( rtHead == rtUniBuf ) // ユニコードヘッダがあれば { ptString = (LPTSTR)pBuffer; ptString++; // ユニコードヘッダ分進めておく } else { pcText = (LPSTR)pBuffer; // シフトJISを開く場合、�の部分をどうにかせんといかん ptString = SjisDecodeAlloc( pcText ); // SJISの内容をユニコードにする FREE( pBuffer ); // こっちで開放 pBuffer = ptString; // ポイントするところを変更 } StringCchLength( ptString, STRSAFE_MAX_CCH, &cchSize ); // ASTじゃなきゃダメ if( !( StrCmpN( AST_SEPARATERW, ptString, 4 ) ) ) { DocStringSplitAST( ptString , cchSize, UserDefItemLoad ); } FREE( pBuffer ); UserDefAppendMenu( hWnd ); return 1; }