C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[1699] Re:Memo나 RichEdit에서 캐럿(커서) 없애기
박지훈.임프 [cbuilder] 5666 읽음    1999-08-08 00:00
:
:  안녕하세요? 홍환민입니다.
:
:  Memo나 RichEdit에서 캐럿(커서)를 없애고 싶습니다.
:
:  DestroyCaret, HideCaret API함수를 사용해 봤습니다만,
:  Memo나 RichEdit를 클릭하면 캐럿이 다시 나타납니다.
:
:  어떻게 캐럿을 없앨 수 있나요?
:  (MouseDown과 MouseMove에 HideCaret 함수를 사용해서 편법으로 마우스
:   사용시는 캐럿을 없앨 수 있지만 Key 이벤트 발생시는 이런 편법이
:   통하질 않습니다. 그리고 이왕이면 정석에 가까운 방법으로 가르쳐
:   주시면 감사하겠습니다.)
:
:  텍스트 뷰어에서 사용하려고 합니다.
:
:  모두 행복하시고, 즐통하세요.
:


임펠리테리입니다.

말씀하신대로.. 어떤 방법을 써도 캐럿이 없어지지는 않습니다.
이것은, 애초에 MS에서 에디트류의 컨트롤들을 설계할때 고의적으로 그렇게
한 것으로 보입니다. 만약 캐럿이 완전히 사라져버리면 포커스가 어디에 가 있는지
알 수 있는 방법이 없으니까요. 그러므로 에디트가 ReadOnly인 상태에서도 캐럿이
보이는 것입니다.

그렇다면.. 캐럿을 안나오도록 하는 "정석"은 포커스가 가지 않도록 하는 것인데,
그러려면 에디트 컨트롤이 받는 메시지 중에서 WM_SETFOCUS를 받아서 그냥 무시해버리면
됩니다. 처리하지 않도록 하는 거죠. 컨토롤에 전달되는 메시지를 별도로 처리하려면
세가지의 방법이 있는데...
1. 컨트롤을 상속받아서 직접 메시지를 처리한다.
2. SetWindowLong() 함수를 이용하여 WndProc 프로시저만 바꿔치기한다.
3. 후킹을 사용한다.

그럼 참고하시길...


+ -

관련 글 리스트
1690 Memo나 RichEdit에서 캐럿(커서) 없애기 홍환민 4066 1999/07/31
1699     Re:Memo나 RichEdit에서 캐럿(커서) 없애기 박지훈.임프 5666 1999/08/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.