mfc_value - 8BitsCoding/RobotMentor GitHub Wiki
μΈ κ°μ§ λ°©λ²μΌλ‘ λ°μ΄ν° κ΄λ¦¬
CPtrList, λ°°μ΄ λ³΅μ¬, λ°°μ΄ μ¬ννΈ
// Dlg.h
// 리μ€νΈλ₯Ό μ΄μ©νλ λ°©λ²
CPtrList m_data_list;
// λ°°μ΄μ μ΄μ©νλ λ°©λ² - 1
int m_data_count = 0;
int m_move_data[10];
// λ°°μ΄μ μ΄μ©νλ λ°©λ² - 2
int m_index = 0;
int m_index_data[10];
BOOL CMFCApplication1Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// μ΄ λν μμμ μμ΄μ½μ μ€μ ν©λλ€. μμ© νλ‘κ·Έλ¨μ μ£Ό μ°½μ΄ λν μμκ° μλ κ²½μ°μλ
// νλ μμν¬κ° μ΄ μμ
μ μλμΌλ‘ μνν©λλ€.
SetIcon(m_hIcon, TRUE); // ν° μμ΄μ½μ μ€μ ν©λλ€.
SetIcon(m_hIcon, FALSE); // μμ μμ΄μ½μ μ€μ ν©λλ€.
// TODO: μ¬κΈ°μ μΆκ° μ΄κΈ°ν μμ
μ μΆκ°ν©λλ€.
srand((unsigned int)time(NULL));
SetTimer(1, 500, NULL);
return TRUE; // ν¬μ»€μ€λ₯Ό 컨νΈλ‘€μ μ€μ νμ§ μμΌλ©΄ TRUEλ₯Ό λ°νν©λλ€.
}
void CMFCApplication1Dlg::OnPaint()
{
CPaintDC dc(this); // 그리기λ₯Ό μν λλ°μ΄μ€ 컨ν
μ€νΈμ
λλ€.
if (IsIconic())
{
// ...
}
else
{
CRect r;
CString str;
POSITION pos = m_data_list.GetHeadPosition();
dc.SelectStockObject(DC_BRUSH);
dc.SetDCBrushColor(RGB(0, 0, 128));
dc.SetBkColor(RGB(0, 0, 128));
dc.SetTextColor(RGB(0, 255, 255));
/*
// 리μ€νΈλ₯Ό μ΄μ©νλ λ°©λ²
for(int i = 0;pos != NULL; i++) {
str.Format(L"%d", *(int*)m_data_list.GetNext(pos));
r.SetRect(10 + i*65, 10, 70+i*65, 40);
dc.Rectangle(r);
dc.DrawText(str, r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
*/
/*
// λ°°μ΄μ μ΄μ©νλ λ°©λ² - 1
for (int i = 0; i < m_data_count; i++) {
str.Format(L"%d", m_move_data[i]);
r.SetRect(10 + i * 65, 10, 70 + i * 65, 40);
dc.Rectangle(r);
dc.DrawText(str, r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
*/
/**/
// λ°°μ΄μ μ΄μ©νλ λ°©λ² - 2
for (int i = 0; i < m_data_count; i++) {
str.Format(L"%d", m_index_data[(i+m_index)%10]);
r.SetRect(10 + i * 65, 10, 70 + i * 65, 40);
dc.Rectangle(r);
dc.DrawText(str, r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
// CDialogEx::OnPaint();
}
}
void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 1) {
int temp = rand() % 100;
int *p = new int;
*p = temp;
/*
// 리μ€νΈλ₯Ό μ΄μ©νλ λ°©λ²
m_data_list.AddTail(p);
if (m_data_list.GetCount() > 10) {
delete (int*)m_data_list.GetHead();
m_data_list.RemoveHead();
}
*/
/*
// λ°°μ΄μ μ΄μ©νλ λ°©λ² - 1
if (m_data_count < 10) {
m_move_data[m_data_count] = temp;
m_data_count++;
}
else {
//for (int i = 0; i < 9; i++) m_move_data[i] = m_move_data[i + 1];
memcpy(m_move_data, m_move_data + 1, sizeof(int) * 9);
m_move_data[9] = temp;
}
*/
// λ°°μ΄μ μ΄μ©νλ λ°©λ² - 2
if (m_data_count < 10) {
m_move_data[m_data_count] = temp;
m_index_data[m_data_count] = temp;
m_data_count++;
}
else {
// m_index : 0 -> 0 ... 9
// m_index : 1 -> 1 ... 8 9 0
// m_index : 2 -> 2 ... 8 9 0 1
m_index_data[m_index] = temp;
m_index = (m_index + 1) % 10;
}
Invalidate(FALSE);
}
else {
CDialogEx::OnTimer(nIDEvent);
}
}
void CMFCApplication1Dlg::OnDestroy()
{
CDialogEx::OnDestroy();
KillTimer(1);
POSITION pos = m_data_list.GetHeadPosition();
while (pos != NULL) {
delete (int*)m_data_list.GetNext(pos);
}
}