//--------------------------------------------------// // iアプリ用リソースデータ結合ツールver1.0 // //--------------------------------------------------// // CopyRight CRAYONSOFT Co,Ltd // // (C) 2006 All rights reserved // //--------------------------------------------------//------// // PCHP… // // http://game12m.hp.infoseek.co.jp/ // // MobileHP… // // http://mcgw.jp/w1.nirai.ne.jp/bluetrip/crayonsoft/ // //--------------------------------------------------//------// // 仕様… // // 選択したファイルを結合してcomp.binとして // // 出力します。さらに選択した各ファイルの、 // // サイズを配列にしてtbl.txtとして出力します。 // //--------------------------------------------------// #include #include "resource.h" #include BOOL CALLBACK dlgProc(HWND,UINT,WPARAM,LPARAM); // メイン関数 int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int) { DialogBox(hi, (const char*) IDD_DIALOG1 ,HWND_DESKTOP,(DLGPROC)dlgProc); return 0; } // ダイアログプロシージャ BOOL CALLBACK dlgProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp) { static char *buf,**fn,**fs; static int fm = 0,spos = 0,seek = 0; int i,j; if(buf==NULL) buf = new char[500*100]; if(fn==NULL){ fn = new char*[100]; fs = new char*[100]; for(int c=0;c<100;c++){ fn[c] = new char[500*100]; fs[c] = new char[100]; } } switch(msg){ // ダイアログコントロールイベント case WM_COMMAND: switch(wp){ case IDC_GET: // ファイルリスト所得 // 宣言 static char fileaddress[_MAX_PATH*50]; char filename[64*50]; OPENFILENAME fname; memset(&fname,0,sizeof(OPENFILENAME)); seek = 0; // 構造体設定 fname.lStructSize = sizeof(OPENFILENAME); fname.hwndOwner = hwnd; fname.lpstrFilter = "全てのファイル\0*.*\0\0"; fname.nFilterIndex = 1; fname.lpstrFile = fileaddress; fname.nMaxFile = sizeof(fileaddress); fname.lpstrFileTitle= filename; fname.nMaxFileTitle = sizeof( filename )-1; fname.lpstrTitle = "結合するリソースファイルを所得します"; fname.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_HIDEREADONLY; // ファイル所得 if( !GetOpenFileName(&fname) ) MessageBox(hwnd, "ファイルを所得エラー",MB_OK,MB_ICONEXCLAMATION); // バッファにファイルリストをセット for(i=0,j=0;fname.lpstrFile[i]!='\0' || fname.lpstrFile[i+1]!='\0';i++){ if(fname.lpstrFile[i]=='\0'){ // 次のファイル名に切り替わった if(j>0){ seek += wsprintf(buf+seek,"\n"); } j++; } else { // 各ファイル名を出力 if(fname.lpstrFile[i-1]=='\0' && j>0){ seek += wsprintf(buf+seek,fname.lpstrFile); seek += wsprintf(buf+seek,&fname.lpstrFile[i]); wsprintf(fn[j-1],fname.lpstrFile); wsprintf(fn[j-1]+strlen(fname.lpstrFile),"\\"); wsprintf(fn[j-1]+strlen(fname.lpstrFile)+1,&fname.lpstrFile[i]); wsprintf(fs[j-1],&fname.lpstrFile[i]); } } } fm = j; return true; case IDC_DISP: // ファイルリスト所得試算 SetDlgItemText( hwnd, IDC_FILELIST, buf ); return true; case IDC_COMP: // ファイルリスト結合 HANDLE wf = CreateFile( "comp.bin", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); HANDLE tb = CreateFile( "tbl.txt", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); DWORD getbyte; char *sysstr = NULL; sysstr = new char[50]; // 配列の先端を出力 wsprintf(sysstr,"// "); WriteFile(tb,sysstr,9,&getbyte,NULL); for(i=0;i0) WriteFile(wf,c,getbyte,&getbyte,NULL); else break; } CloseHandle(rf); } // 配列の終端を出力 wsprintf(sysstr,"};"); WriteFile(tb,sysstr,2,&getbyte,NULL); CloseHandle(wf); CloseHandle(tb); return true; } break; // スクロールバーイベント case WM_VSCROLL: switch(GetDlgCtrlID((HWND)lp)){ case IDC_FILELISTSCROLL: SCROLLINFO info; info.cbSize = sizeof(info); info.fMask = SIF_ALL; GetScrollInfo((HWND)lp,SB_CTL,&info); info.nMin = 0; if(fm > 22){ info.nMax = (fm - 22)*12; spos = info.nTrackPos; info.nPos = spos; } info.nPage = info.nMax+1; SetScrollInfo((HWND)lp,SB_CTL,&info,TRUE); return true; } break; // 破棄イベント case WM_DESTROY: // ウィンドウ破棄 PostQuitMessage(0); delete buf; delete fn; delete fs; return true; // 破棄イベント case WM_CLOSE: EndDialog( hwnd, TRUE ); return true; } return false; }