MFC inherit class
글쓴이: beonit / 작성시간: 수, 2008/11/26 - 12:43오전
CBitmapButton class를 상속 받아서 CMyBitmap을 만들었습니다.
CBitmapButton은 상태가 변화되면서 다른 그림을 그릴 때, 배경을 흰색으로 다시 칠하게 됩니다. 이게 자주 일어나면 흰색으로 깜빡거리기도 하죠.
그 깜빡임을 그걸 없애고자 클래스를 상속받아 CtlColor을 오버라이딩해서 브러시를 투명 브러시로 바꾸어 줬습니다. 코드는 아래에 있습니다. 이 컨트롤이 그림을 그리는 것에는 문제가 없습니다.
문제는 이 컨트롤의 키 이벤트를 소유하는 윈도우가 받지 못한다는 것 입니다. 클릭 이벤트는 받을 수 있으나, 컨트롤에 포커스가 있을 때의 키 이벤트는 소유하는 윈도우의 PreTranslateMessage 함수에 전달이 되지 않습니다.(반면 그냥 버튼이나 비트맵 버튼은 정상동작합니다.)
왜 그럴까요?
소유 다이얼로그의 ClipSibling, ClipChild 에 문제가 있는 걸까요? 둘다 true로 되어 있길래 둘다 false로 바꿔서 테스트해보니 그것도 마찬가지 였습니다. 혹시 제대로 속성이 먹히지 않은건가요? 그렇다면 다이얼로그에 ClipSibling, ClipChild 속성을 주는 방법은 무엇이 있을까요? 아니면 다른 문제인가요?
도움 부탁드립니다.
클래스 헤더
#pragma once // CMBitmapButton class CMBitmapButton : public CBitmapButton { DECLARE_DYNAMIC(CMBitmapButton) private: CBrush m_Brush; public: CMBitmapButton(); virtual ~CMBitmapButton(); protected: DECLARE_MESSAGE_MAP() public: afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); };
구현
// MBitmapButton.cpp : implementation file // #include "stdafx.h" #include "MBitmapButton.h" // CMBitmapButton IMPLEMENT_DYNAMIC(CMBitmapButton, CBitmapButton) CMBitmapButton::CMBitmapButton() { ::CBitmapButton(); } CMBitmapButton::~CMBitmapButton() { } BEGIN_MESSAGE_MAP(CMBitmapButton, CBitmapButton) ON_WM_CTLCOLOR_REFLECT() END_MESSAGE_MAP() // CMBitmapButton message handlers HBRUSH CMBitmapButton::CtlColor(CDC* pDC, UINT nCtlColor){ m_Brush.DeleteObject(); m_Brush.CreateStockObject(HOLLOW_BRUSH); pDC->SetBkMode(TRANSPARENT); return (HBRUSH)m_Brush; }
Forums:
www.devpia.com
www.devpia.com 비사모마을에서 질문하면 10분내로 뭔가 답글이 달릴듯..
댓글 달기