본문 바로가기
C | C++ | VC++

에디트 컨트롤 비밀번호 속성시 툴팁 안나오게 하기

by 두루물 2010. 7. 12.

에디트컨트롤 비밀번호 속성시 툴팁 안나오게 하기
How to Disable Password EditCtrl Tooltip on CAPS LOCK ON

ES_PASSWORD 가 들어간 비밀번호 속성의 에디트컨트롤이 XP이상(6.0,WINVER 0X0501) 에서 시스템 디폴트로,대문자 키가 눌린경우엔 무조건 툴팁이 나오게 되어 있다. 이것은 오히려 사용자가 입력하려 할때 참 번거롭도록 활성화가 된다. 이것을 찾으려 하니 코드구루에도 코드프로젝트에도 없길래, 필요한 분이 보도록 이곳에 이에 대한 방법을 적고자 함..자 , 이 귀찮은 툴팁을 없애 보도록 하자.

출처:나(http://krkim.net)


우선 CAPS LOCK이 눌리고 ES_PASSWORD 속성을 가진 EDIT 가 SETFOCUS 활성화 되거나,이미 포커스가 있은채 나중에 CAPS LOCK이 눌리면 이 툴팁은 여지없이 뜨며 그때 윈도우 시스템 으로부터 EM_SHOWBALLOONTIP 메세지가 해당 EDIT Control에 보내지게 된다.

즉,서브클래싱 하여 이 메세지를 가로채어 이 메세지가 윈도우 시스템의 기본적인 Window Procedure 로 가지 못하도록 하면 된다.

WNDPROC oldEditWndProc = 0;

OnInitDialog에 다음을 기술한다.

 oldEditWndProc = (WNDPROC)(LONG_PTR)::SetWindowLongPtr(::GetDlgItem(m_hWnd,IDC_PASS),
  GWLP_WNDPROC,(LONG_PTR)(WNDPROC)(EditWindowProc));

/* Edit_HideBalloonTip(::GetDlgItem(m_hWnd,IDC_PASS));*/


LRESULT CALLBACK EditWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
 LRESULT lReturn = 0L;
 if(message == EM_SHOWBALLOONTIP){//SHOWBALLOONTIP를 무시하도록 한다.
  return 0;
 }
 //return ::DefWindowProc(hWnd,message,wParam,lParam);
 lReturn = CallWindowProc((WNDPROC)oldEditWndProc,hWnd,message,wParam,lParam);
 return lReturn;
}