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();
}
}