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