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);
'C & C++ > MFC 컨트롤' 카테고리의 다른 글
[Dialog] 틀없는 윈도우, 테두리 둥글게 (0) | 2011.12.14 |
---|---|
[Dialog] View 에서 Frame 타이틀 수정하는 방법 (0) | 2011.12.14 |
모래시계 마우스 표시 방법 (0) | 2011.12.14 |
[Dialog] 시스템 색상 가져오기 (0) | 2011.12.14 |
[Dialog / 팝업 메뉴] 팝업 메뉴 밖을 클릭하면 팝업 메뉴가 닫히게 하는 방법 (0) | 2011.12.14 |
댓글