[ MFC ] SliderCtrl 투명창 구현 MFC

1. 대화상자에 슬라이드컨트롤 생성, 및 변수 추가
CSliderCtrl m_SliderCtrl;

2. OnInitDialog()를 overrrides 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL CProjectNameDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
    m_SliderCtrl.SetRange(100,255);  //슬라이드컨트롤의 범위 지정 (100 ~ 255까지) / 0부터 시작하면 너무 투명해지므로 주의
 
    m_SliderCtrl.SetPos(255);  //슬라이드컨트롤의 최초 위치 지정
    m_nOpa=m_SliderCtrl.GetPos();//최초의 투명도를 조회 / m_nOpa를 헤더파일에 int 형으로 선언해줘야 함
    SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE) | WS_EX_LAYERED);
    //윈도우 속성에 레이어드 속성을 추가한다.
    SetAttr(m_nOpa);
 
    return TRUE; // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}
cs


3. 직접적으로 투명도 조절을 담당하는 함수를 하나 추가한다.
1
2
3
4
5
void CProjectNameDlg::SetAttr(int iOpa)
{
    SetLayeredWindowAttributes(RGB(0,0,255),iOpa,LWA_ALPHA | LWA_COLORKEY);
    //투명도 조절을 위해서 SetLayeredWindowAttributes()함수를 사용한다. 자세한건 MSDN 참조바람...
}
cs


4. WM_HSCROLL 메시지처리기를 재정의 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void CProjectNameDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    // TODO: Add your message handler code here and/or call default
 
    CSliderCtrl* pSlider = (CSliderCtrl*)pScrollBar;
 
    switch(pSlider->GetDlgCtrlID())
    {
        case IDC_SLIDER1:  //투명도 조절을 위한 슬라이더컨트롤의 ID
            m_SliderCtrl.SetPos(pSlider->GetPos());
            break;
        default:
            break;
    }
    SetAttr(pSlider->GetPos());
 
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    //다른 슬라이더컨트롤을 사용하고 싶다면 case문을 사용하여 슬라이더컨트롤의 ID를 추가해주면 된다.
}
cs


슬라이드컨트롤을 붙잡고 어떠한 행동(이벤트 발생)을 하면 WM_HSCROLL 이라는 윈도우메시지가 발생된다.
그러므로, 슬라이더컨트롤을 움직일때 이벤트를 발생시키고 싶다면 이 WM_HSCROLL라는 메시지 핸들러를 재정의 하여 사용하면 된다.


덧글

댓글 입력 영역



위젯 광고_구글 애드센스

통계 위젯 (화이트)

21
20
194485