본문 바로가기
C & C++/MFC 컨트롤

CEdit 컨트롤 이용예제 - 에디트 박스

by izen8 2011. 12. 14.
반응형

CEdit 컨트롤의 맨 하단 라인으로 스크롤 이동하기

CEdit 컨트롤의 수직 스크롤 맨 하단 라인으로 이동하려면 아래와 같은 코드를 작성하면 된다. m_edtResponse 가 CEdit 객체이다.

int nLine = m_edtResponse.GetLineCount();

m_edtResponse.LineScroll( nLine );




CEdit  폰트 바꾸기

Windows 95 에서 Edit control를 사용할 때는 일반적으로 font를 바꾸지 않고 그대로 사용한다. 그러나 MFC에서는 CEdit control를 사용하는 경우 CWnd::SetFont()를 이용해서 그 font를 바꿀수가 있다. 

한글 Windows 95를 사용할 때는 CWnd::SetFont()에서 사용하게 될 LOGFONT의 lfCharSet 변수를 한글 Character Set code인 0x81 로 setting해 주어야 한다. 

다음은 Dialog의 edit control의 font를 20 poin의 궁서체로 바꾸는 예이다. 


BOOL CMyDlg::OnInitDialog()

LOGFONT lf; 

memset(&lf, 0, sizeof(LOGFONT)); 

lf.lfCharSet = 0x81; // 한글 Character Set 

lf.lfHeight = 20; // 20 point 크기 

strcpy(lf.lfFaceName, "궁서체"); // 궁서체로 font setting 

m_font.CreateFontIndirect(&lf); 

CEdit* pCtlEdit = (CEdit*) GetDlgItem(IDC_EDIT1); 

// edit control의 pointer를 가져옴

pCtlEdit->SetFont((CFont*)&m_font, TRUE); 

return TRUE; 




CEdit  배경색 글자색 변경

HBRUSH 다이얼로그이름::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// 변경하고자 하는 에디트박스 이름

if( pWnd->GetDlgCtrlID() == IDC_EDIT1 ) 

{

hbr = (HBRUSH)::GetSysColorBrush(COLOR_WINDOW);

pDC->SetBkColor(RGB(0,0,0)); // 배경색

pDC->SetTextColor(RGB(255,255,255)); // 글자색

}


return hbr;

}



<에디트박스에서 커서를 임의의 위치에>

에디트 박스에서 커서를 뒤쪽이나 임의의 위치에 놓을 수 있는 방법을 물어 보시는 분께 도움될 자료

1. 커서를 맨 끝에

SetSel(-1, -1);

2. 커서를 임의의 위치에

SetSel(n, n);

======================================

1. 응용할 멤버 함수

======================================

 에디트 박스의 멤버 함수중에서 커서를 임의의 위치에 놓을 처리를 하는 함수는 SetSel( ... ) 과 ReplaceSel( ... ) 입니다.

 두 함수는 많이 사용되기 때문에 아시고 계시리라 믿~~습니다.

  ex) 에디트 박스의 멤버 변수를 다음과 같이 정의된 상태에서 예를 들어 가면서 설명을 드립니다.

      CEdit   변수 m_editMyBox;

      CString 변수 m_strMyBox; 

======================================

2. 커서를 맨 뒤쪽에 놓기

======================================

  커서를 맨 뒤쪽에 놓는 방법은 의외로 간단 합니다.

   UpdateData( TRUE );


  //--> 전체를 선택

  m_editMyBox.SetSel( 0, -1 );         


  //--> 현재의 데이터로 다시 치환 

  m_editMyBox.ReplaceSel( m_strMyBox );


  //--> 포커스를 에디트 박스로 설정

  m_editMyBox.SetFocus(); 

 이렇게 처리하시면 커서가 데이터의 제일 끝에 놓일 겁니다.

======================================

3. 커서를 임의의 자리에 놓기

======================================

 방법은 마찬가지로..SetSel(..) 과 ReplaceSel(...)을 이용하는 것인데 어떤 형태로 응용할 수 있냐 하면

SetSel( 시작 위치, 끝 위치, ..?? 안살펴 봤음..세번째 인자)에서 보면, 시작 위치를 처음(0)으로 하고 끝 위치를 커서가 놓이고자 하는 위치로 지정한 후에, 현재의 데이터를 처음부터 커서가 놓이고자 하는 위치까지 다른 버퍼에 복사한 후에, ReplaceSel로 복사 합니다. 소스 코드를 보시면 더 쉬우실 겁니다.

UpdateData( TRUE );

//--> 커서가 놓일 위치까지 복사할 임시 버퍼(크기는??)

char cDataBuf[100];

//--> 쓰레기 값을 방지하기 위해.. 초기화

for( int i=0; i<100; i++ )    cDataBuf[i] = NULL;

//--- 6번째에 커서를 위치하고 싶을 경우...

for( i=0; i<6; i++ )

      cDataBuf[i] = m_strMyBox[i];

//****보충 설명.. CString 형의 데이터 같은 경우에서****

 데이터를 원할때는 버퍼 형태로 사용을 하셔도 됩니다.

 음.. 무슨 말이냐 하면.. 제가 CString 형으로 선언된 멤버 변수 m_strMyBox의 데이터를 임시 버퍼에 복사하는 과정에서 m_strMyBox[i]라고 사용을 했는데..

 m_strMyBox는 에디트 박스의 멤버 변수이거든요.

 위와 같은 방법을 복사를 하셔도 되고.. 다른 방법도 있겠죠..

//--> 원하는 위치만큼 지정

     m_editTest.SetSel( 0, 6 );

//--> 바꾸면 되겠죠.. 복사된 내용으로..

     m_editTest.ReplaceSel( cDataBuf );

//--> 포커스를 놓으면.. 끝..

     m_editTest.SetFocus();

 에디트 컨트롤 뒤에 내용 추가하기

에디트 컨트롤 뒤에 새로운 내용을 추가하려면 어떻게 해야합니까 ?

m_editCtrl이 CEdit 타입의 객체라고 하고 lpMsg가 추가되어야할 문자열이라면 다음과 같은 코드를 수행하면 됩니다.

   int len = m_editCtrl.GetWindowTextLength();

   m_editCtrl.SetSel(len, len);

   m_editCtrl.ReplaceSel(lpStr);




반응형

댓글