mfc_calculator_2 - 8BitsCoding/RobotMentor GitHub Wiki


κΈ°λŠ₯μΆ”κ°€


// Dlg.h
private:
	CCheckListBox m_item_list;
    CListBox m_count_list;
    	CRect m_spin_rect;
	CSpinButtonCtrl m_count_spin;
public:
	afx_msg void OnEnChangeTotalPriceEdit();
	afx_msg void OnLbnSelchangeItemList();
	void CalcTotalPrice();
	void ChangeText(CListBox * ap_list_box, int a_index, const wchar_t *ap_string);
	afx_msg void OnDeltaposCountSpin(NMHDR *pNMHDR, LRESULT *pResult);
BOOL CMFCApplication1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 이 λŒ€ν™” μƒμžμ˜ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.  μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ μ£Ό 창이 λŒ€ν™” μƒμžκ°€ 아닐 κ²½μš°μ—λŠ”
	//  ν”„λ ˆμž„μ›Œν¬κ°€ 이 μž‘μ—…μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, TRUE);			// 큰 μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.
	SetIcon(m_hIcon, FALSE);		// μž‘μ€ μ•„μ΄μ½˜μ„ μ„€μ •ν•©λ‹ˆλ‹€.

	// TODO: 여기에 μΆ”κ°€ μ΄ˆκΈ°ν™” μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

	wchar_t * p_item_name[MAX_ITEM_COUNT] = {
		L"아메리카노		1900원"	, L"μΉ΄νŽ˜λΌλ–Ό			2500원",
		L"카페λͺ¨μΉ΄			2800원", L"μΉ΄λΌλ©œλ§ˆλΌμ•„λ˜			3200원",
		L"μ—μŠ€ν”„λ ˆμ†Œ			1800원",L"바닐라라떼			3500원",
		L"μΉ΄ν‘ΈμΉ˜λ…Έ			3300원",L"λΉ„μ—”λ‚˜			3500원"
	};
	int price[8] = {1900, 2500, 2800, 3200, 1800, 3500, 3300, 3500};
	m_item_list.SubclassDlgItem(IDC_ITEM_LIST, this);
	m_item_list.SetItemHeight(0, 24);
	m_count_list.SetItemHeight(0, 24);
	
	for (int i = 0; i < MAX_ITEM_COUNT; i++) {
		m_item_list.InsertString(i, p_item_name[i]);
		m_item_list.SetItemData(i, price[i]);
		m_count_list.InsertString(i, L"0");
	}

	m_count_spin.GetWindowRect(m_spin_rect);
	ScreenToClient(&m_spin_rect);

	return TRUE;  // 포컀슀λ₯Ό μ»¨νŠΈλ‘€μ— μ„€μ •ν•˜μ§€ μ•ŠμœΌλ©΄ TRUEλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
}
void CMFCApplication1Dlg::OnLbnSelchangeItemList()
{
	int index = m_item_list.GetCurSel();
	CString str;
	m_count_list.GetText(index, str);
	int item_count = _wtoi(str);
	
	if (m_item_list.GetCheck(index)) {
		if (item_count == 0) {
			ChangeText(&m_count_list, index, L"1");
		}
	}
	else {
		if (item_count != 0) {
			ChangeText(&m_count_list, index, L"0");
		}
	}
	
	m_count_list.SetCurSel(index);
	m_count_spin.SetWindowPos(NULL, m_spin_rect.left, m_spin_rect.top + index * 24, 0, 0, SWP_NOSIZE);;

	CalcTotalPrice();
}
void CMFCApplication1Dlg::ChangeText(CListBox * ap_list_box, int a_index, const wchar_t *ap_string)
{
	ap_list_box->DeleteString(a_index);
	ap_list_box->InsertString(a_index, ap_string);
	ap_list_box->SetCurSel(a_index);
}
void CMFCApplication1Dlg::CalcTotalPrice()
{
	int count = m_item_list.GetCount();
	int total_price = 0;
	CString str;

	for (int i = 0; i < count; i++) {
		if (m_item_list.GetCheck(i)) {
			m_count_list.GetText(i, str);
			int item_count = _wtoi(str);
			total_price += m_item_list.GetItemData(i) * item_count;
		}
	}

	SetDlgItemInt(IDC_TOTAL_PRICE_EDIT, total_price);
}
void CMFCApplication1Dlg::OnDeltaposCountSpin(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);

	*pResult = 0;

	int index = m_count_list.GetCurSel();
	if (LB_ERR != index && m_item_list.GetCheck(index)) {
		CString str;
		m_count_list.GetText(index, str);
		int item_count = _wtoi(str);

		if (pNMUpDown->iDelta < 0) {
			// 였λ₯Έμͺ½ 클릭
			if (item_count < 100)item_count++;
		}
		else {
			// μ™Όμͺ½ 클릭
			if(item_count>1) item_count--;
		}
		str.Format(L"%d", item_count);
		ChangeText(&m_count_list, index, str);

		CalcTotalPrice();
	}
}
⚠️ **GitHub.com Fallback** ⚠️