아래 부턴 쭉쭉 복사, 붙여넣기후 주석으로 설명하겠습니다.
// bin 00 000 000
// color col row
void CMFC_Dot_MatrixDlg::OnBnClickedColor4()
{
// CLEAR
RS232_DATA = 0x00; // 0b 0000 0000
LED_COLOR = 0;
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor1()
{
//RED
RS232_DATA = 0x40; // 0b 0100 0000
LED_COLOR = 1;
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor2()
{
//GRN
RS232_DATA = 0x80; // 0b 1000 0000
LED_COLOR = 2;
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor3()
{
//ALL
RS232_DATA = 0xC0; // 0b 1100 0000
LED_COLOR = 3;
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor5()
{
LED_COLOR = 4;
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor6()
{
//ALL_RED
RS232_Comm('1');
RS232_Comm('1');
RS232_Comm('1');
RS232_Comm('1');
ALL_COLOR(RED);
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor7()
{
//ALL_GRN
RS232_Comm('2');
RS232_Comm('2');
RS232_Comm('2');
RS232_Comm('2');
ALL_COLOR(GREEN);
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor8()
{
//ALL_ALL
RS232_Comm('3');
RS232_Comm('3');
RS232_Comm('3');
RS232_Comm('3');
ALL_COLOR(YELLOW);
m_drag = false;
}
void CMFC_Dot_MatrixDlg::OnBnClickedColor9()
{
//ALL_CLS
RS232_Comm('0');
RS232_Comm('0');
RS232_Comm('0');
RS232_Comm('0');
ALL_COLOR(CLEAR);
m_drag = false;
}
/*
올컬러 함수는 컬러 파라미터를 받아서 격자 안을 몽땅 동일한 컬러로 만들어 줍니다.
이제 와서 쓰면서 드는 생각인데.. 이렇게 할필요없이 첨부터 끝까지 색을 칠하고 격자를 새로 그려주는게 더 간단하지 않았을까 생각됩니다.
*/
void CMFC_Dot_MatrixDlg::ALL_COLOR(INT COLOR){
CBrush *brOld, Brush;
CDC *pNewDC = GetDC();
switch(COLOR)
{
case 0: Brush.CreateSolidBrush(RGB(240, 240, 240)); break;
case RED: Brush.CreateSolidBrush(RGB(255, 0, 0)); break;
case GREEN: Brush.CreateSolidBrush(RGB(0, 255, 0)); break;
case YELLOW: Brush.CreateSolidBrush(RGB(255, 255, 0)); break;
}
brOld = pNewDC->SelectObject(&Brush);
for(int i=0; i<8; i++)
for(int j=1; j<9; j++)
pNewDC->Rectangle(i*55+10, j*55-10, (i+1)*55+11,(j+1)*55-9);
pNewDC->SelectObject(brOld);
Brush.DeleteObject();
ReleaseDC(pNewDC);
}
void CMFC_Dot_MatrixDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
m_drag = true;
m_point = point;
char buff_str[20];
sprintf_s(buff_str, "%d %d %d", m_point.x, m_point.y, LED_COLOR);
m_str = buff_str;
UpdateData(0);
// 아래쪽에 만든 에딧 컨트롤부분에 현재 마우스 포인터의 좌표와 색을 출력해줍니다.
CDialog::OnLButtonDown(nFlags, point);
}
void CMFC_Dot_MatrixDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if( m_drag == true)
m_point = point;
char buff_str[20];
sprintf_s(buff_str, "%d %d %d", m_point.x, m_point.y, LED_COLOR);
m_str = buff_str;
UpdateData(0);
// 아래쪽에 만든 에딧 컨트롤부분에 현재 마우스 포인터의 좌표와 색을 출력해줍니다.
CDialog::OnMouseMove(nFlags, point);
}
void CMFC_Dot_MatrixDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_drag = false;
CDialog::OnLButtonUp(nFlags, point);
}
/*
블루투스 스타트 버튼 메소드 입니다.
이걸눌러야 통신이 시작됩니다.
두번 누르면 안되여 @_@;
충돌 일어납니다. 원랜 확인하고 체크하고 하는데 다 빼버렸어여 -_ㅠ 짧게 만들려고..
*/
void CMFC_Dot_MatrixDlg::OnBnClickedBluetoothstart()
{
hComm = CreateFileA((LPCSTR)"COM4", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
//노란색 컴 포트 넘버를 고쳐주면 됩니다 +_+ 원하는 포트로.
cp.wPacketLength = sizeof(COMMPROP);
GetCommProperties(hComm, &cp);
GetCommState(hComm, &dcb);
SetCommState(hComm, &dcb);
}
void CMFC_Dot_MatrixDlg::OnBnClickedBluetoothend()
{
CloseHandle(hComm);
}
void CMFC_Dot_MatrixDlg::RS232_Comm(unsigned char data)
{
unsigned char OutBuff[1];
unsigned long nByteToWrite;
unsigned long nByteWritten;
OutBuff[0] = data;
nByteToWrite = 1;
WriteFile(hComm, OutBuff, nByteToWrite, &nByteWritten, NULL);
PurgeComm(hComm, PURGE_RXCLEAR);
}
'OpenSTUDY > openProjects' 카테고리의 다른 글
MFC Dotmatrix ver 2.0.0 (4) | 2011.10.28 |
---|---|
MFC Dotmatrix ver 1.1.0 (0) | 2011.10.28 |
MFC Dotmatrix ver 1.0.2 (0) | 2011.10.28 |
MFC Dotmatrix ver 1.0.1 (0) | 2011.10.28 |
MFC Dotmatrix ver 1.0.0 (0) | 2011.10.28 |