if (cf.dwEffects & CFE_AUTOCOLOR) cf.dwEffects -= CFE_AUTOCOLOR;

// Get a color from the common color dialog.
if( dlg.DoModal() == IDOK )
{
cf.crTextColor = dlg.GetColor();
}

cf.dwMask = CFM_COLOR;

SetSelectionCharFormat(cf);
지금 이렇게 처리를 해서 글자색이 변하기는 합니다..
근데 간단한 채팅 프로그램을 만드는데..
타이핑 하는 곳에만 색이 변하구...채팅 내용이 나오는 창과..
상대방 화면에는 그냥 검정 글자만 나옵니다..
자세한 조언 부탁드립니다..ㅠ

-----------------------------------------------------------------------------------

다음 두 가지는 필수 입니다.


1. 자신의 채팅 메시지에도 색을 반영할 것..

2. 상대에게 자신의 색깔 정보를 송신하여 반영하도록 할 것...


먼저 첫번째...

채팅 메시지 출력함수가 있겠지요? 없으시다면 소스를 추가하시던지 새로 만드셔야 하는데...


void CMyApp::PrintChat(CString& msg, COLORREF color) // 채팅 메시지를 출력한다.

{

cf.crTextColor = color;     // cf는 멤버로 설정되었다고 가정하고..

((CRichEditCtrl*)m_pMainWnd->GetDlgItem(IDC_CHAT_WINDOW))->SetWordCharFormat(cf);   // 다이얼로그 기반 플고램에서 메인 다이얼로그 클래스 내부라면 빨간글씨 당연히 생략.. ㅋ

((CRichEditCtrl*)m_pMainWnd->GetDlgItem(IDC_CHAT_WINDOW))->ReplaceSel(msg);

((CRichEditCtrl*)m_pMainWnd->GetDlgItem(IDC_CHAT_WINDOW))->LineScroll(1); // 자동 스크롤링..

} //---------------------> 노란 부분이 채팅창을 나타내는 리치에디트의 아이디입니다. 이래야 색을 변경할 수 있겟죠?


위 함수에서 color 파라미터로 색깔정보를 넘겨받을 수 있습니다. 이러면 아이디라든가, 특정 단어에 대해 임시적인 다른 색상값을 줄 수 있습니다. 현재 지정된 색으로 출력하기 위해선 색상 멤버값을 넣으면 되겠죠..


두번째 상대에게 색상정보를 보내야 합니다.

가장 직관적인 방법으로 RGB색상값 9자리를 보내는 것입니다. 수신자는 3자리씩 끊어서 색상정보를 읽어와 상대의 색상의 저장하는 멤버에 저장할 것입니다.

 먼저 보내기 위해서

  CString msg;
  msg.Format("%3d%3d%3d",R값, G값, B값); // 세자리씩 묶어서


색상정보임을 나타내는 헤더를 표시해 둡니다.

 msg = (CString) 0x88 + msg;


보냅니다.

클라이언트 소켓객체->Send((LPCSTR)msg, msg.GetLength()+1);


받는 쪽에선 역순으로 파싱하면 되겠죠


클라이언트 객체->Receive(buff, sizeof(buff));


    if    (buff[0] == 0x88 ) then {

            for(i=1 ; buff[i]!=NULL ; i++) // 순수 데이터 부분 추출
                   buff[i-1] = buff[i];
        

            buff[--i] = '\0';

            cstringData = (CString)buff;

    }

이렇게 하면 수순 색깔정보를 담은 9자리의 숫자 데이터를 cstringData에 얻을 수 있습니다. 이에 대한 파싱은


R값 = atoi((LPCSTR) cstringData.Mid(0,3));   // 숫자값으로 변환할 수 있습니다.

G값 = atoi((LPCSTR) cstringData.Mid(3,3));

B값 = atoi((LPCSTR) cstringData.Mid(6,3));


이렇게 내가 보낸 색상 정보를 상대가 파악할 수 있습니다. 상대는 이값을 저장해놓았다가 내가 보낸 채팅 메시지 출력때 반드시 반영을 해야만 색상을 적용시킬수 있을 겁니다..


참고로 위에선 색상 정보를 모두 보냈는데.. 빨간, 파랑, 검정, 녹색, 노랑 등등의 색깔 등은 미리 규약을 해놓은 뒤 헤더에만 포함시켜서 보내면 1바이트 만으로도 색상정보를 송수신할 수도 있을 겁니다.

'WindowsPrograming' 카테고리의 다른 글

[퍼옴]MFC06  (0) 2007.03.11
RichEditBox에서 글자색 관련 질문입니다..  (0) 2007.03.11
리치에디트 컨트롤 사용법  (2) 2007.03.11
MFC 프로그래밍에 대한 Q&A입니다  (0) 2007.03.11
Posted by Real_G