티스토리 뷰

반응형



윈도우7에 기본적으로 들어있는 "화상키보드"는 키보드가 없는상황에서 매우 유용한 프로그램이다.

이 화상키보드를 띄어놓고 마우스로 키보드 자판모양을 클릭하면 입력이 된다.


그런데 이 응용프로그램의 특이한점은 화상키보드를 마우스로 클릭해도 이전에 작업중이던 위치의 포커스를 잃지 않는다는것이다. 보통의 응용프로그램은 자신을 클릭하게되면 이전의 프로그램은 포커스를 잃고 KillFocus메시지를 받고, 클릭을 받은 프로그램은 포커스를 가지게 된다.


이 화상키보드의 숨겨진 비밀은 적용되어있는 윈도우스타일에 있다.

이 화상키보드에는 확장스타일인 WS_EX_NOACTIVATE가 적용되어있다.


저 스타일을 주게되면 해당 윈도우는 포커스를 가지지 않게 된다. 또한 해당 윈도우를 이동시킬때 잔상(?)도 표시되지 않는다.


윈도우에 들어있는 화상키보드는 이동시에 잔상이 보이는것으로 보아 이동을 위한 클릭과 동시에 WS_EX_NOACTIVATE스타일을 없애버리고, 이동이 끝남과 동시에 다시 WS_EX_NOACTIVATE스타일을 적용하는것이 아닐까 예상해본다.


간단하게 이미 생성되어진 윈도우에 WS_EX_NOACTIVATE스타일을 적용하는 방법은 다음과 같다.


SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWndCon, GWL_EXSTYLE) | WS_EX_NOACTIVATE);

 

첫번째 인자로는 적용한 윈도우의 핸들이며 두번째 인자는 적용시킬 스타일의 종류이며, 세번째인자는 적용시킬 스타일이다.

GetWindowLong함수로 기존스타일에 WS_EX_NOACTIVATE 스타일을 추가하는 방식의 코드이다.

반응형

'Programing > API' 카테고리의 다른 글

API나 MFC에서 비주얼스타일 먹이기  (0) 2012.09.06
블랙홀 효과  (0) 2011.11.21
테트리스  (1) 2011.10.09
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함