본문 바로가기

전체 글340

반투명 테스트 푸른색 바탕의 다이얼로그를 띄우고 그 안에 박스를 그리는데 이 박스가 다이얼로그의 색깔이 비치도록 함. 이렇게하면 반투명이 되려나?? 1. BitBlt() 함수의 ROP 모드를 활용 SRCAND 2. AlpahBlend() 함수를 활용 % 이 테스트를 하다가 알아낸 재미난 팁 CtlColor 에서 리턴할 브러시를 NULL_BRUSH로 생성하거나 DC의 배경 모드를 TRANSPARENT로 주면 - SetBkMode( TRANSPARENT ) OS의 바탕화면이 보인다. 2008. 2. 6.
OwnerDraw와 Message Reflect OwnerDraw와 Message Reflect로 구현된 class를 상속 받아 새로운 클래스를 생성, 기능을 추가하였다. 이상하게도 베이스 클래스의 메소드들이 호출되지 않는 것이다. 왜 그럴까?? 새로 생성한 클래스에도 베이스 클래스와 똑같은 메소드들을 추가해 주면 된다는 사실을 꼬박 하루가 걸려서 알아냈다. 동작은 하지만 그래도 문제는 있다. 왜 베이스 클래스의 메소드를 재정의 해야만 동작을 할까?? 분명 메세지 핸들러(리플렉트된)들은 protected 타입으로 상속된 클래스에서도 동작을 해야만 하는데... 추측컨데 메세지 리플렉트 때문이 아닐까 ? 아니면 생성된 클래스에서 리소스를 처리하지 못 해서 ? 내일 확인을 해봐야지.... 2008. 2. 6.
Button with Image 버튼에 이미지를 입혀봤다. OwnerDraw로 비트맵을 그렸으며 그려지는 것 까지만 확인. 밑의 ListBox와 비슷하게 처리하려고 했는데 Button의 경우 WM_CTLCOLOR 메세지만 reflect 시켜주면 되더라.. 정확히는 클래스 위자드에서 WM_CTLCOLOR만 리플렉스 지원.. 실제로 그리는 루틴은 WM_PAINT가 아니라 자신의 WM_DRAWITEM 메세지 (리플렉트 된게 아닌) 에서 그리도록 해주니까 그림이 입혀졌다. 2008. 2. 6.
ListBox with OwnerDraw, Message Reflect ListBox에 그림을 입혀봤다. 배경으로 바탕화면이 보이도록 했는데 아이템이 스크롤 되면 배경도 같이 스크롤 된다. 어디가 문제인지 아직 파악이 안됨. OwnerDraw, Message Reflect 등의 기법을 사용~ * 설명 추가 컨트롤의 속성에 OwnerDraw 스타일을 주면 컨트롤의 그려져야할 내용을 컨트롤 자신이 아닌 컨트롤의 오너 즉 부모 윈도우가 그려주게 된다. WM_MEASUREITEM, WM_DRAWITEM 두가지 메세지가 부모 윈도우로 날아오는데 이 두개의 메세지를 reflect 시켜 컨트롤 자신이 그리도록 하는 방식으로 컨트롤의 그림을 그리도록 만들었다. 바탕화면을 부모 윈도우의 바탕화면이 보이도록 하려고 컨트롤에서 WM_CTLCOLOR와 WM_ERASEBKGND 메세지를 처리하는데.. 2008. 2. 6.