CTransparentLabel - WTL 용 투명 라벨 처리
등록자 : cpueblo (유광희), 2009-11-25
글수정 | 글삭제
CTransparentLabel - WTL 용 투명 라벨 처리
CStatic 에 투명을 입혀줍니다! 아무것도 없는 곳에 클릭 이벤트를 지정하기 위해 만들었습니다
CTransparentLabel.h
#ifndef __CTRANSPARENT_LABEL_H__
#define __CTRANSPARENT_LABEL_H__
#include "StdAfx.h"
//
// WTL 투명 라벨 클래스
// by cpueblo (2009.11.25)
//
// CStatic 을 기반으로 Notify 알림, SetOnClick 으로 이벤트 설정이 가능하며, 투명 Paint 로 처리된다
//
class CTransparentLabel : public CWindowImpl
{
public:
typedef void (*ONEVENT)(CTransparentLabel *Sender);
BEGIN_MSG_MAP(CLabel)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
END_MSG_MAP()
CTransparentLabel()
{
FOnClick = NULL;
}
void Init()
{
ModifyStyle(0, SS_NOTIFY);
SetWindowText("");
}
BOOL SubclassWindow(HWND hWnd)
{
BOOL bRet = CWindowImpl::SubclassWindow(hWnd);
if (bRet)
Init();
return bRet;
}
void SetOnClick(ONEVENT e)
{
FOnClick = e;
}
LRESULT OnPaint(UINT, WPARAM wParam, LPARAM, BOOL& bHandled)
{
CPaintDC dc(m_hWnd);
dc.SetBkMode(TRANSPARENT);
return 0;
}
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
if (FOnClick)
FOnClick(this);
return 0;
}
ONEVENT FOnClick;
};
#endif
사용 예시
CTransparentLabel lbGraphicOption;
CTransparentLabel lbSoundOption;
...
void CConfigDialog::OnGraphicOptionClick(CTransparentLabel *Sender)
{
This->m_Background.SetBitmap(This->hBGGraphicOption);
}
void CConfigDialog::OnSoundOptionClick(CTransparentLabel *Sender)
{
This->m_Background.SetBitmap(This->hBGSoundOption);
}
...
LRESULT CConfigDialog::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
This = this;
...
// GraphicOption 탭 선택 라벨 설정
lbGraphicOption.SubclassWindow(GetDlgItem(IDC_lbGraphicOption));
lbGraphicOption.SetOnClick(OnGraphicOptionClick);
// SoundOption 탭 선택 라벨 설정
lbSoundOption.SubclassWindow(GetDlgItem(IDC_lbSoundOption));
lbSoundOption.SetOnClick(OnSoundOptionClick);
return 0;
}
글수정 | 글삭제
http://codesarang.com. mail to cpueblo cpueblo.com
|