:
: 안녕하세요? 홍환민입니다.
:
: Memo나 RichEdit에서 캐럿(커서)를 없애고 싶습니다.
:
: DestroyCaret, HideCaret API함수를 사용해 봤습니다만,
: Memo나 RichEdit를 클릭하면 캐럿이 다시 나타납니다.
:
: 어떻게 캐럿을 없앨 수 있나요?
: (MouseDown과 MouseMove에 HideCaret 함수를 사용해서 편법으로 마우스
: 사용시는 캐럿을 없앨 수 있지만 Key 이벤트 발생시는 이런 편법이
: 통하질 않습니다. 그리고 이왕이면 정석에 가까운 방법으로 가르쳐
: 주시면 감사하겠습니다.)
:
: 텍스트 뷰어에서 사용하려고 합니다.
:
: 모두 행복하시고, 즐통하세요.
:
임펠리테리입니다.
말씀하신대로.. 어떤 방법을 써도 캐럿이 없어지지는 않습니다.
이것은, 애초에 MS에서 에디트류의 컨트롤들을 설계할때 고의적으로 그렇게
한 것으로 보입니다. 만약 캐럿이 완전히 사라져버리면 포커스가 어디에 가 있는지
알 수 있는 방법이 없으니까요. 그러므로 에디트가 ReadOnly인 상태에서도 캐럿이
보이는 것입니다.
그렇다면.. 캐럿을 안나오도록 하는 "정석"은 포커스가 가지 않도록 하는 것인데,
그러려면 에디트 컨트롤이 받는 메시지 중에서 WM_SETFOCUS를 받아서 그냥 무시해버리면
됩니다. 처리하지 않도록 하는 거죠. 컨토롤에 전달되는 메시지를 별도로 처리하려면
세가지의 방법이 있는데...
1. 컨트롤을 상속받아서 직접 메시지를 처리한다.
2. SetWindowLong() 함수를 이용하여 WndProc 프로시저만 바꿔치기한다.
3. 후킹을 사용한다.
그럼 참고하시길...
|