最後は解説付きのIDListProc.hとIDList.bdpです。
【IDListProc.h】
//////////////////////////////////////////
// IDListProc.h
// Copyright (c) 09/29/2021 by BCCSkelton
//////////////////////////////////////////
/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//ウィンドウメッセージ関数
/////////////////////////////////
bool CMyWnd::OnCreate(WPARAM wParam, LPARAM lParam) {
//コモンコントロールの初期化
InitCommonControls();
//ツールバー登録-Init(hWnd, hIinstance, ID, Style)
TBar.Init(m_hWnd, m_hInstance, TOOLBAR, WS_CHILD | WS_VISIBLE | TBSTYLE_TOOLTIPS);
//ツールバーボタン用カスタムビットマップ追加
TBar.AddBmp(m_hInstance, MAKEINTRESOURCE(IDI_TOOLBAR), 10);
//ツールバーボタン追加
TBBUTTON tbb[14];
ZeroMemory(tbb, sizeof(tbb));
tbb[0].iBitmap = TBar.m_id;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].idCommand = IDM_OPEN;
tbb[1].iBitmap = TBar.m_id + 1;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].idCommand = IDM_SAVE;
tbb[2].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[3].iBitmap = TBar.m_id + 2;
tbb[3].fsState = TBSTATE_ENABLED;
tbb[3].fsStyle = TBSTYLE_BUTTON;
tbb[3].idCommand = IDM_EXIT;
tbb[4].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[5].iBitmap = TBar.m_id + 3;
tbb[5].fsState = TBSTATE_ENABLED;
tbb[5].fsStyle = TBSTYLE_BUTTON;
tbb[5].idCommand = IDM_ADD;
tbb[6].iBitmap = TBar.m_id + 4;
tbb[6].fsState = TBSTATE_ENABLED;
tbb[6].fsStyle = TBSTYLE_BUTTON;
tbb[6].idCommand = IDM_SEARCH;
tbb[7].iBitmap = TBar.m_id + 5;
tbb[7].fsState = TBSTATE_ENABLED;
tbb[7].fsStyle = TBSTYLE_BUTTON;
tbb[7].idCommand = IDM_EDIT;
tbb[8].iBitmap = TBar.m_id + 6;
tbb[8].fsState = TBSTATE_ENABLED;
tbb[8].fsStyle = TBSTYLE_BUTTON;
tbb[8].idCommand = IDM_DELETE;
tbb[9].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[10].iBitmap = TBar.m_id + 7;
tbb[10].fsState = TBSTATE_ENABLED;
tbb[10].fsStyle = TBSTYLE_BUTTON;
tbb[10].idCommand = IDM_SORT;
tbb[11].fsStyle = TBSTYLE_SEP; //セパレーター
tbb[12].iBitmap = TBar.m_id + 8;
tbb[12].fsState = TBSTATE_ENABLED;
tbb[12].fsStyle = TBSTYLE_BUTTON;
tbb[12].idCommand = IDM_HELP;
tbb[13].iBitmap = TBar.m_id + 9;
tbb[13].fsState = TBSTATE_ENABLED;
tbb[13].fsStyle = TBSTYLE_BUTTON;
tbb[13].idCommand = IDM_VERSION;
TBar.AddButtons(14, tbb);
//ステータスバー登録-Init(hWnd, hIinstance, ID, (以下省略可)Style)
SBar.Init(m_hWnd, m_hInstance, STATUSBAR);
//ステータスバー区画設定
int sec[2] = {100, 400};
SBar.SetSection(2, sec);
//ステータスバー文字列設定
SBar.SetText(0, "IDList Version 1.0");
SBar.SetText(1, "選択メンバーシップ");
//リストビューコントロールの作成
//複数選択を許さない場合、スタイルにLVS_SINGLESELを加える
g_ListView.Create(m_hWnd, m_hInstance, IDC_LISTVIEW);
g_ListView.InsertColumn(0, 240, "メンバーシップ");
g_ListView.InsertColumn(1, 160, "ログインID", LVCFMT_CENTER);
g_ListView.InsertColumn(2, 160, "パスワード", LVCFMT_CENTER);
g_ListView.InsertColumn(3, 240, "備考");
//メニューハンドルの取得
g_hPopup = GetSubMenu(GetMenu(m_hWnd), 1);
//リストビューは項目未選択なので「編集」と「削除」を無効にする
EnableMenuItem(GetSubMenu(GetMenu(m_hWnd), 1), IDM_EDIT, MF_GRAYED | MF_BYCOMMAND);
EnableMenuItem(GetSubMenu(GetMenu(m_hWnd), 1), IDM_DELETE, MF_GRAYED | MF_BYCOMMAND);
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_EDIT, FALSE);
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_DELETE, FALSE);
//CHMヘルプファイルの準備
CARG arg;
g_HelpFile = "hh \"";
g_HelpFile = g_HelpFile + arg.Path();
g_HelpFile = g_HelpFile + "\\IDListHelp.chm";
//データファイルパス、名
g_File = arg.Path();
g_File = g_File + "\\IDList.dat";
//起動時ファイル読込処理
if(!DataLoad(m_hWnd, g_File.ToChar()))
MessageBox(m_hWnd, "まだIDList.datがつくられていないか\n読み込み処理が中断されました。", "注意", MB_OK | MB_ICONWARNING);
(解説:g_FileにIDList.datのファイルパス、名を入れ、暗号化ファイル(DataLoadの第3引数を省略するとTRUE)を読み込みます。)
return TRUE;
}
bool CMyWnd::OnNotify(WPARAM wParam, LPARAM lParam) {
if((int)wParam == IDC_LISTVIEW) { //リストビューからのメッセージ
int n = g_ListView.GetNextItem(-1, LVNI_ALL | LVIS_SELECTED);
if(n == -1) { //未選択なら
//「編集」と「削除」を無効にする
EnableMenuItem(GetSubMenu(GetMenu(m_hWnd), 1), IDM_EDIT, MF_GRAYED | MF_BYCOMMAND);
EnableMenuItem(GetSubMenu(GetMenu(m_hWnd), 1), IDM_DELETE, MF_GRAYED | MF_BYCOMMAND);
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_EDIT, FALSE);
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_DELETE, FALSE);
}
else {
//「編集」と「削除」を有効にする
EnableMenuItem(GetSubMenu(GetMenu(m_hWnd), 1), IDM_EDIT, MF_UNCHECKED | MF_BYCOMMAND);
EnableMenuItem(GetSubMenu(GetMenu(m_hWnd), 1), IDM_DELETE, MF_UNCHECKED | MF_BYCOMMAND);
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_EDIT, TRUE);
SendMessage(TBar.GetHandle(), TB_ENABLEBUTTON, IDM_DELETE, TRUE);
//選択メンバーシップステータスバーに表示
char buff[MAX_PATH];
g_ListView.GetItemText(n, 0, buff, MAX_PATH);
SBar.SetText(1, buff);
}
//リストビューの通知メッセージによる処理
switch(((LPNMLISTVIEW)lParam)->hdr.code) {
case LVN_COLUMNCLICK: //列見出しがクリックされたら
if(sortsubno[((LPNMLISTVIEW)lParam)->iSubItem] == UP)
sortsubno[((LPNMLISTVIEW)lParam)->iSubItem] = DOWN;
else
sortsubno[((NM_LISTVIEW*)lParam)->iSubItem] = UP;
g_ListView.SortItem(CompProc, ((LPNMLISTVIEW)lParam)->iSubItem);
break;
case NM_DBLCLK: //左ダブルクリックしたら
if(g_ListView.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED) == -1)
OnAdd();
else
OnEdit();
break;
case NM_RCLICK: //右クリックしたら
//ウインドウの位置情報を取得
RECT rec;
GetWindowRect(m_hWnd, &rec);
//ポップアップメニューの表示場所を設定
POINT pt;
GetCursorPos(&pt);
//ポップアップメニューの表示
TrackPopupMenu(g_hPopup, TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON, pt.x, pt.y, 0, m_hWnd, &rec);
break;
}
return TRUE;
}
//ツールバーツールチップ-因みにこの時のidCtrl(wParam)はメニューアイテムになる(例:IDM_OPEN)
if(((LPNMHDR)lParam)->code == TTN_NEEDTEXT) { //TTN_GETDISPINFOと同じ
((LPTOOLTIPTEXT)lParam)->hinst = m_hInstance;
char* tag;
switch(((LPTOOLTIPTEXT)lParam)->hdr.idFrom) {
case IDM_OPEN:
tag = "データを開く";
break;
case IDM_SAVE:
tag = "データの保存";
break;
case IDM_EXIT:
tag = "終了";
break;
case IDM_ADD:
tag = "追加";
break;
case IDM_SEARCH:
tag = "検索";
break;
case IDM_EDIT:
tag = "編集";
break;
case IDM_DELETE:
tag = "削除";
break;
case IDM_SORT:
tag = "並び替え";
break;
case IDM_HELP:
tag = "本ソフトの使い方";
break;
case IDM_VERSION:
tag = "バージョン情報";
break;
}
((LPTOOLTIPTEXT)lParam)->lpszText = tag;
return TRUE;
}
return FALSE;
}
bool CMyWnd::OnSize(WPARAM wParam, LPARAM lParam) {
//ツールバー、ステータスバーをクライアント領域に合わせる
TBar.AutoSize();
SBar.AutoSize();
//最後の「備考」幅を調整してg_ListViewをクライアント領域に合わせる
RECT rec;
GetClientRect(m_hWnd, &rec);
g_ListView.m_x = rec.left;
g_ListView.m_Width = rec.right - rec.left;
g_ListView.m_Height = rec.bottom - rec.top;
GetWindowRect(TBar.GetHandle(), &rec);
g_ListView.m_y = rec.bottom - rec.top;
g_ListView.m_Height -= g_ListView.m_y;
GetWindowRect(SBar.GetHandle(), &rec);
g_ListView.m_Height -= rec.bottom - rec.top;
g_ListView.Move(g_ListView.m_x, g_ListView.m_y, g_ListView.m_Width, g_ListView.m_Height);
g_ListView.SetColumn(3, LVCFMT_LEFT, g_ListView.m_Width - 560, "備考");
return TRUE;
}
bool CMyWnd::OnClose(WPARAM wParam, LPARAM lParam) {
if(MessageBox(m_hWnd, "終了しますか", "終了確認",
MB_YESNO | MB_ICONINFORMATION) == IDYES) {
//処理をするとDestroyWindow、PostQuitMessageが呼ばれる
//終了時ファイル書込処理
DataSave(m_hWnd, g_File.ToChar());
//データファイル属性を隠しファイルとする
DWORD attrib = GetFileAttributes(g_File.ToChar()); //属性を取得
attrib |= FILE_ATTRIBUTE_HIDDEN; //隠しファイル属性を追加
SetFileAttributes(g_File.ToChar(), attrib);
(解説:暗号化(第3引数省略でTRUE)ファイルを書き込みます。なお、パスワード等特に書き換える必要が無ければダイアログはキャンセルしてください。)
return TRUE;
}
else
//そうでなければウィンドウではDefWindowProc関数をreturn、ダイアログではreturn FALSEとなる。
return FALSE;
}
/////////////////////////////////
//主ウィンドウCMyWndの関数の定義
//メニュー項目、コントロール関数
/////////////////////////////////
bool CMyWnd::OnOpen() {
//データファイルの読み込み
char* cp = cmndlg.GetFileName(m_hWnd, "datファイル(*.dat)\0*.dat\0全てのファイル(*.*)\0*.*\0\0", TRUE, "dat", ".");
if(cp) {
bool cyph = (MessageBox(m_hWnd, "復号化しますか?", "復号化", MB_YESNO | MB_ICONQUESTION) == IDYES);
DataLoad(m_hWnd, cp, cyph);
(解説:至極あっさりとしました。)
return TRUE;
}
else {
MessageBox(m_hWnd, "ファイルが選択されていません", "エラー", MB_OK | MB_ICONERROR);
return FALSE;
}
}
bool CMyWnd::OnSave() {
//ファイルの保存場所を指定する
char* cp = cmndlg.GetFileName(m_hWnd, "datファイル(*.dat)\0*.dat\00",
FALSE, "dat", ".");
if(cp) {
//ファイルの書き込み
bool cyph = (MessageBox(m_hWnd, "暗号化しますか?", "暗号化", MB_YESNO | MB_ICONQUESTION) == IDYES);
DataSave(m_hWnd, cp, cyph);
(解説:至極あっさりとしました。)
return TRUE;
}
else {
MessageBox(m_hWnd, "キャンセルされました", "エラー", MB_OK | MB_ICONERROR);
return FALSE;
}
}
bool CMyWnd::OnExit() {
SendMsg(WM_CLOSE, 0, 0);
return TRUE;
}
bool CMyWnd::OnAdd() {
//追加の場合は、データ受け渡し用のg_Data(CSTR)を空(NULL)にする
g_Data = "";
//編集用ダイアログを追加用ダイアログとして使う
if(!editdlg.DoModal(m_hWnd, "IDD_EDIT", editdlgProc) ||
!*g_Data.ToChar()) //キャンセルされた場合、または
return FALSE; //データが空の場合
int n = g_ListView.GetItemCount(); //リストの最後尾を確認
//CSTR g_Dataのカンマ区切り文字列をEdit1~4までに格納
char *cp = GetDelimtStr(g_Data.ToChar());
g_ListView.InsertItem(n, cp, -1, n); //LVIF_PARAMをソートの為に追加
SBar.SetText(1, cp); //ステータスバーにメンバーシップ表示
cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItem(n, 1, cp);
cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItem(n, 2, cp);
cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItem(n, 3, cp);
return TRUE;
}
bool CMyWnd::OnSearch() {
static CSTR ToFind; //検索文字列保存用変数
static int found = 0; //初期値は最初から
char buff[MAX_PATH]; //リストボックス文字列取得用バッファ
int n = g_ListView.GetItemCount(); //リストボックスの行数確認
//検索文字列取得ダイアログ
SBar.SetText(1, "検索する項目に含まれる文字列を入力してください");
searchdlg.DoModal(m_hWnd, "IDD_SEARCH", searchdlgProc);
//前回の検索と同じ検索文字列であれば検索を継続
if(g_Data != ToFind) { //異なれば
ToFind = g_Data; //検索文字列を更新し
found = 0; //最初から検索する
g_ListView.SetItemState(-1, 0, LVIS_SELECTED); //全行の選択状態の解除
}
for(int i = found; i < n; i++) { //行
for(int j = 0; j < 4; j++) { //列
g_ListView.GetItemText(i, j, buff, MAX_PATH); //文字列取得
if(strstr(buff, ToFind.ToChar())) { //検索文字列が含まれれば
found = i + 1; //次の検索のために、見つかった行の次を指す
SetFocus(g_ListView.m_hWnd); //g_ListViewにフォーカスがないと選択状態が表示されない
g_ListView.SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); //選択状態にする
return TRUE;
}
}
}
MessageBox(m_hWnd, "検索文字は見当たりませんでした", "検索結果", MB_OK | MB_ICONINFORMATION);
g_ListView.SetItemState(-1, 0, LVIS_SELECTED); //全行の選択状態の解除
return TRUE;
}
bool CMyWnd::OnEdit() {
int n = g_ListView.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if (n == -1) {
MessageBox(m_hWnd, "項目が選択されていません", "警告", MB_OK);
return FALSE;
}
//CSTR g_Dataに4列の項目データをカンマ区切りで格納
char buff[MAX_PATH];
g_ListView.GetItemText(n, 0, buff, MAX_PATH);
g_Data = buff;
g_Data = g_Data + ",";
g_ListView.GetItemText(n, 1, buff, MAX_PATH);
g_Data = g_Data + buff;
g_Data = g_Data + ",";
g_ListView.GetItemText(n, 2, buff, MAX_PATH);
g_Data = g_Data + buff;
g_Data = g_Data + ",";
g_ListView.GetItemText(n, 3, buff, MAX_PATH);
g_Data = g_Data + "\""; //最終項目は
g_Data = g_Data + buff; //文字列中に'\n'があるので
g_Data = g_Data + "\""; //「""」で囲う
//編集用ダイアログを呼び出す
if(!editdlg.DoModal(m_hWnd, "IDD_EDIT", editdlgProc))
return FALSE;;
//CSTR g_Dataに格納されたカンマ区切りデータを4列の項目に格納
char *cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItemText(n, 0, cp);
SBar.SetText(1, cp);
cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItemText(n, 1, cp);
cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItemText(n, 2, cp);
cp = GetDelimtStr(g_Data.ToChar());
g_ListView.SetItemText(n, 3, cp);
return TRUE;
}
bool CMyWnd::OnDelete() {
//複数選択に対応
int n = g_ListView.GetNextItem(-1, LVNI_ALL | LVIS_SELECTED);
while(n != -1) {
g_ListView.DeleteItem(n);
n = g_ListView.GetNextItem(n - 1, LVNI_ALL | LVIS_SELECTED);
}
SBar.SetText(1, "選択メンバーシップ"); //ステータスバー表示変更
return TRUE;
}
bool CMyWnd::OnSort() {
sortdlg.DoModal(m_hWnd, "IDD_SORT", sortdlgProc);
return TRUE;
}
bool CMyWnd::OnHelp() {
WinExec(g_HelpFile.ToChar(), SW_SHOWNORMAL); //g_HelpFileがコマンドライン
return TRUE;
}
bool CMyWnd::OnVersion() {
versiondlg.DoModal(m_hWnd, "IDD_VERSION", versiondlgProc);
return TRUE;
}
///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
bool EDITDLG::OnInit(WPARAM wParam, LPARAM lParam) {
if(!*g_Data.ToChar()) {
SendMsg(WM_SETTEXT, 0, (LPARAM)"IDとパスワードの追加");
SendItemMsg(IDOK, WM_SETTEXT, 0, (LPARAM)"登録終了");
return TRUE;
}
//GetDelimitStrはソースを短縮してしまうのでg_Dataは保護する
CSTR Data = g_Data;
//CSTR g_Dataのカンマ区切り文字列をEdit1~4までに格納
char *cp = GetDelimtStr(Data.ToChar());
SendItemMsg(IDC_EDIT1, WM_SETTEXT, NULL, (LPARAM)cp);
cp = GetDelimtStr(Data.ToChar());
SendItemMsg(IDC_EDIT2, WM_SETTEXT, NULL, (LPARAM)cp);
cp = GetDelimtStr(Data.ToChar());
SendItemMsg(IDC_EDIT3, WM_SETTEXT, NULL, (LPARAM)cp);
cp = GetDelimtStr(Data.ToChar());
SendItemMsg(IDC_EDIT4, WM_SETTEXT, NULL, (LPARAM)cp);
return TRUE;
}
bool EDITDLG::OnIdok() {
//CSTR g_Dataにカンマ区切りでEdit1~4までの文字列を格納
char buff[MAX_PATH];
SendItemMsg(IDC_EDIT1, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)buff);
g_Data = buff;
g_Data = g_Data + ",";
SendItemMsg(IDC_EDIT2, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)buff);
g_Data = g_Data + buff;
g_Data = g_Data + ",";
SendItemMsg(IDC_EDIT3, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)buff);
g_Data = g_Data + buff;
g_Data = g_Data + ",";
SendItemMsg(IDC_EDIT4, WM_GETTEXT, (WPARAM)MAX_PATH, (LPARAM)buff);
g_Data = g_Data + "\""; //最終項目は
g_Data = g_Data + buff; //文字列中に'\n'があるので
g_Data = g_Data + "\""; //「""」で囲う
EndModal(TRUE);
return TRUE;
}
bool EDITDLG::OnIdcancel() {
EndModal(FALSE);
return TRUE;
}
///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
bool SEARCHDLG::OnInit(WPARAM wParam, LPARAM lParam) {
SendItemMsg(IDC_EDIT1, WM_SETTEXT, 0, (LPARAM)m_ToFind);
return TRUE;
}
bool SEARCHDLG::OnIdok() {
SendItemMsg(IDC_EDIT1, WM_GETTEXT, MAX_PATH, (LPARAM)m_ToFind);
g_Data = m_ToFind;
EndModal(TRUE);
return TRUE;
}
bool SEARCHDLG::OnIdcancel() {
EndModal(FALSE);
return TRUE;
}
///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
bool SORTDLG::OnInit(WPARAM wParam, LPARAM lParam) {
//コンボボックスに文字列を登録
SendItemMsg(IDC_COMBOBOX1, CB_ADDSTRING, 0, (LPARAM)"メンバーシップ");
SendItemMsg(IDC_COMBOBOX1, CB_ADDSTRING, 0, (LPARAM)"ログインID");
SendItemMsg(IDC_COMBOBOX1, CB_ADDSTRING, 0, (LPARAM)"パスワード");
SendItemMsg(IDC_COMBOBOX1, CB_ADDSTRING, 0, (LPARAM)"備考");
SendItemMsg(IDC_COMBOBOX1, CB_SETCURSEL, 0, 0); //一番目を選択状態にする
SendItemMsg(IDC_COMBOBOX2, CB_ADDSTRING, 0, (LPARAM)"昇順");
SendItemMsg(IDC_COMBOBOX2, CB_ADDSTRING, 0, (LPARAM)"降順");
SendItemMsg(IDC_COMBOBOX2, CB_SETCURSEL, 0, 0); //一番目を選択状態にする
return TRUE;
}
bool SORTDLG::OnIdok() {
//選択番号の取得
int col = SendItemMsg(IDC_COMBOBOX1, CB_GETCURSEL, 0, 0);
int dir = SendItemMsg(IDC_COMBOBOX2, CB_GETCURSEL, 0, 0);
//ソート対象項目に昇順、降順のデータを書込む
sortsubno[col] = dir;
//ソート処理
g_ListView.SortItem(CompProc, col);
EndModal(TRUE);
return TRUE;
}
bool SORTDLG::OnIdcancel() {
EndModal(FALSE);
return TRUE;
}
///////////////////////////////
//ユーザーダイアログの関数定義
//コントロール関数
///////////////////////////////
bool VERSIONDLG::OnInit(WPARAM wParam, LPARAM lParam) {
//スタティックコントロールに文字列を表示
SendItemMsg(IDC_VERTXT, WM_SETTEXT,
0, (LPARAM)"IDList\nVersion 1.0 by YSAMA");
return TRUE;
}
bool VERSIONDLG::OnIdok() {
EndModal(TRUE);
return TRUE;
}
【IDList.bdp】
[Project]
Version=1.2.21
Count=5
Filename1=IDList.h,1,IDList.bdp,1,IDList.h
Filename2=User.h,1,IDList.bdp,1,User.h
Filename3=IDListProc.h,1,IDList.bdp,1,IDListProc.h
Filename4=IDList.cpp,1,IDList.bdp,1,IDList.cpp
Filename5=ResIDList.h,1,IDList.bdp,1,ResIDList.h
[Compile]
ResourceName=IDList.rc
RunParam=
Count=2
Current=2
[Compile1]
DefName=Debug
ExeName=IDList.exe
MakeName=IDList.mak
NoMakefile=0
UseMakefileEx=0
Target=-WC
TargetSub=
InstructionSet=-6
Optimize=-Od
Warnning=-w-
Debug=-v -y
Compiler=-k -b
PreHeader=-H-
Call=-pc
Language=-AT
Option=
IncludePath=C:\Borland\bcc55\Lib
LibraryFile=
Define=DEBUG
ResIncludePath=
OutputDir=Debug
MakeBefore=
MakeAfter=
[Compile2]
DefName=Release
ExeName=IDList.exe
MakeName=IDList.mak
NoMakefile=0
UseMakefileEx=1
Target=-W
TargetSub=
InstructionSet=-6
Optimize=-O1
Warnning=-w-
Debug=
Compiler=-k -b
PreHeader=-H-
Call=-ps
Language=-AT
Option=
IncludePath=C:\Borland\BCCForm
LibraryFile=
Define=
ResIncludePath=
OutputDir=Release
MakeBefore=
MakeAfter=
[OpenFiles]
FileCount=6
FileName1=IDList.h
FileName2=User.h
FileName3=IDListProc.h
FileName4=IDList.cpp
FileName5=ResIDList.h
FileName6=C:\Users\(パス)\IDList\IDList.rc
ActivePageIndex=0