#include #include #include #include "lvwnd.h" #include "objid.h" /*----- プライベイト関数 -----*/ /*===== カラム設定 ===== * =======================*/ void CLvWnd::SetLvCol() { LVCOLUMN lvcol; ZeroMemory(&lvcol,sizeof(lvcol)); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT; lvcol.iSubItem = 0; lvcol.cx = 40; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 0, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 1; lvcol.cx = 60; lvcol.pszText = "金額"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 1, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 2; lvcol.cx = 60; lvcol.pszText = "一万円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 2, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 3; lvcol.cx = 60; lvcol.pszText = "五千円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 3, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 4; lvcol.cx = 60; lvcol.pszText = "二千円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 4, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 5; lvcol.cx = 60; lvcol.pszText = "千円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 5, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 6; lvcol.cx = 60; lvcol.pszText = "五百円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 6, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 7; lvcol.cx = 60; lvcol.pszText = "百円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 7, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 8; lvcol.cx = 60; lvcol.pszText = "五十円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 8, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 9; lvcol.cx = 60; lvcol.pszText = "十円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 9, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 10; lvcol.cx = 60; lvcol.pszText = "五円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 10, (LPARAM)&lvcol); lvcol.mask = LVCF_SUBITEM|LVCF_WIDTH|LVCF_TEXT|LVCF_FMT; lvcol.fmt = LVCFMT_RIGHT; lvcol.iSubItem = 11; lvcol.cx = 60; lvcol.pszText = "一円"; SendMessage(FhLvWnd1, LVM_INSERTCOLUMN, 11, (LPARAM)&lvcol); } /*===== フォント指定 ===== * =========================*/ void CLvWnd::SetLvFnt() { SendMessage(FhLvWnd1, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE); } /*===== データ追加 ====== * * nItem 追加するアイテム番号 * ========================*/ void CLvWnd::AddLvData(int nItem) { char idx[10]; if (flg) { mCnt++; _itoa(mCnt, idx, 10); } else { strcpy(idx, "SUM"); } LVITEM lvi; int iItem; ZeroMemory(&lvi, sizeof(lvi)); lvi.mask = LVIF_TEXT; lvi.iItem = nItem; lvi.iSubItem = 0; lvi.pszText = idx; iItem = lvi.iItem; SendMessage(FhLvWnd1, LVM_INSERTITEM, 0, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem;//nItem; lvi.iSubItem = 1; lvi.pszText = mKingaku; //iItem = lvi.iItem; SendMessage(FhLvWnd1, LVM_SETITEM, 1, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 2; lvi.pszText = m10000Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 2, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 3; lvi.pszText = m5000Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 3, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 4; lvi.pszText = m2000Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 4, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 5; lvi.pszText = m1000Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 5, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 6; lvi.pszText = m500Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 6, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 7; lvi.pszText = m100Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 7, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 8; lvi.pszText = m50Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 8, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 9; lvi.pszText = m10Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 9, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 10; lvi.pszText = m5Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 10, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 11; lvi.pszText = m1Yen; SendMessage(FhLvWnd1, LVM_SETITEM, 11, (LPARAM)&lvi); } /*===== アイテムを返す ===== * ===========================*/ void CLvWnd::LetLvData(int nItem) { LVITEM lvi; int iItem; ZeroMemory(&lvi, sizeof(lvi)); lvi.mask = LVIF_TEXT; lvi.iItem = nItem;//mItem; lvi.iSubItem = 1; lvi.cchTextMax = 10; lvi.pszText = mKingaku;//インデックスを取得 iItem = lvi.iItem; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 2; lvi.cchTextMax = 10; lvi.pszText = m10000Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 3; lvi.cchTextMax = 10; lvi.pszText = m5000Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 4; lvi.cchTextMax = 10; lvi.pszText = m2000Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 5; lvi.cchTextMax = 10; lvi.pszText = m1000Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 6; lvi.cchTextMax = 10; lvi.pszText = m500Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 7; lvi.cchTextMax = 10; lvi.pszText = m100Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 8; lvi.cchTextMax = 10; lvi.pszText = m50Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 9; lvi.cchTextMax = 10; lvi.pszText = m10Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 10; lvi.cchTextMax = 10; lvi.pszText = m5Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); lvi.mask = LVIF_TEXT; lvi.iItem = iItem; lvi.iSubItem = 11; lvi.cchTextMax = 10; lvi.pszText = m1Yen; SendMessage(FhLvWnd1, LVM_GETITEMTEXT, (WPARAM)iItem, (LPARAM)&lvi); } /*===== アイテム番号を取得 ===== * * 1 成功 * 0 失敗 * ===============================*/ int CLvWnd::GetItemNo() { if(CntLvData()){ int iItem = -1; for(int i = 0; i < mCnt; i++){ iItem = SendMessage(FhLvWnd1, LVM_GETNEXTITEM, iItem, MAKELPARAM(LVNI_ALL|LVNI_SELECTED, 0)); if(iItem != -1){ mItem = iItem; return 1; }else{ iItem = -1; } } return 0; } return 0; } /*===== アイテムを数える ===== * * 1 成功 * 0 失敗 * =============================*/ int CLvWnd::CntLvData() { mCnt = SendMessage(FhLvWnd1, LVM_GETITEMCOUNT, 0, 0); if(mCnt >= 0) return 1; else return 0; } /*----- パブリック関数 -----*/ /*===== コンストラクタ ===== * ===========================*/ CLvWnd::CLvWnd() { //プロパティ初期化 memset(m1Yen, '\0', sizeof(m1Yen)); memset(m5Yen, '\0', sizeof(m5Yen)); memset(m10Yen, '\0', sizeof(m10Yen)); memset(m50Yen, '\0', sizeof(m50Yen)); memset(m100Yen, '\0', sizeof(m100Yen)); memset(m500Yen, '\0', sizeof(m500Yen)); memset(m1000Yen, '\0', sizeof(m1000Yen)); memset(m2000Yen, '\0', sizeof(m2000Yen)); memset(m5000Yen, '\0', sizeof(m5000Yen)); memset(m10000Yen, '\0',sizeof(m10000Yen)); memset(mKingaku, '\0', sizeof(mKingaku)); mCnt = 0; mItem = 0; FhLvWnd1 = NULL; memset(FNum, '\0', sizeof(FNum)); } /*===== デストラクタ ===== * =========================*/ CLvWnd::~CLvWnd() { } /*===== ウィンドウ作成 ===== * * hInst インスタンス * hWnd 親ウィンドウ * ===========================*/ void CLvWnd::CrtLvWnd(HINSTANCE hInst, HWND hWnd) { RECT rc; GetClientRect(hWnd, &rc); FhLvWnd1 = CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_NOPARENTNOTIFY, WC_LISTVIEWA, NULL, LVS_REPORT|LVS_SHOWSELALWAYS|WS_TABSTOP|WS_VISIBLE|WS_CHILD|WS_HSCROLL|WS_VSCROLL, rc.left, rc.top + 68, rc.right - rc.left, rc.bottom - (rc.top + 30), hWnd, (HMENU)ID_LISTVIEW1, hInst, NULL); long tmp; if(FhLvWnd1 != NULL){ //行全体を選択できるようにする tmp = SendMessage(FhLvWnd1, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0); tmp |= LVS_EX_FULLROWSELECT/*|LVS_EX_GRIDLINES*/; SendMessage(FhLvWnd1, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, (LPARAM)tmp); } //カラム指定 SetLvCol(); //フォント指定 SetLvFnt(); } /*===== ウィンドウ破棄 ===== */ void CLvWnd::DesLvWnd() { DestroyWindow(FhLvWnd1); } /*===== ウィンドウ移動 ===== * * hWnd 親ウィンドウ * ===========================*/ void CLvWnd::MovLvWnd(HWND hWnd) { RECT rc; GetClientRect(hWnd, &rc); MoveWindow(FhLvWnd1, rc.left, rc.top + 68, rc.right - rc.left, rc.bottom - (rc.top + 30), TRUE); } /*===== データ取得 ===== * * nFlg * 1 追加 * 0 合計 * * 1 成功 * 0 失敗 * =======================*/ int CLvWnd::GetData(int nFlg) { flg = nFlg; _itoa(FNum[0], mKingaku, 10); _itoa(FNum[1], m1Yen, 10); _itoa(FNum[2], m5Yen, 10); _itoa(FNum[3], m10Yen, 10); _itoa(FNum[4], m50Yen, 10); _itoa(FNum[5], m100Yen, 10); _itoa(FNum[6], m500Yen, 10); _itoa(FNum[7], m1000Yen, 10); _itoa(FNum[8], m2000Yen, 10); _itoa(FNum[9], m5000Yen, 10); _itoa(FNum[10], m10000Yen, 10); //メンバー関数呼び出し CntLvData(); AddLvData(mCnt);//カラムにデータ追加 return 1; } /*===== データを返す ===== * * 1 成功 * 0 失敗 * =========================*/ int CLvWnd::SetData() { LVITEM lvi; ZeroMemory(&lvi, sizeof(lvi)); int nItem = 0; //メンバー関数呼び出し CntLvData(); for (int i = 0; i < mCnt; i++) { //リストビューの選択を進める lvi.mask = LVIF_STATE; lvi.iItem = nItem; lvi.iSubItem = 0; lvi.stateMask = LVIS_SELECTED; lvi.state = LVIS_SELECTED; SendMessage(FhLvWnd1, LVM_SETITEM, 0, (LPARAM)&lvi); //メンバー関数呼び出し if (!GetItemNo()) return 0; LetLvData(nItem); FNum[0] += atoi(mKingaku); FNum[1] += atoi(m1Yen); FNum[2] += atoi(m5Yen); FNum[3] += atoi(m10Yen); FNum[4] += atoi(m50Yen); FNum[5] += atoi(m100Yen); FNum[6] += atoi(m500Yen); FNum[7] += atoi(m10000Yen); FNum[8] += atoi(m2000Yen); FNum[9] += atoi(m5000Yen); FNum[10] += atoi(m10000Yen); nItem++; } return 1; }