2014년 10월 26일 일요일

창이 바탕화면 끝에 자석처럼 붙는 효과 내기(일명 자석효과)

WM_WINDOWPOSCHANGING 이벤트 핸들러를 이용하면 된다.

void CMiniMapDlg::OnWindowPosChanging(WINDOWPOS FAR* lpwndpos)
{
   CDialog::OnWindowPosChanging(lpwndpos);
   
   // TODO: Add your message handler code here
   .........
   .........
 HWND m_hTaskBar;
    CRect m_rtTaskBar;
    m_hTaskBar = ::FindWindow("Shell_TrayWnd",NULL);

 //태스크바의 크기를 가져온다.

    ::GetWindowRect(m_hTaskBar,&m_rtTaskBar);

   // 바탕화면 영역의 크기를 얻는다.
   int cx = GetSystemMetrics(SM_CXSCREEN);
   int cy = GetSystemMetrics(SM_CYSCREEN);

   // 바탕화면의 경계에서의 자석효과
   if ((lpwndpos->x >= -10) && (lpwndpos->x <= 10))
    lpwndpos->x = 0;
   if ((lpwndpos->x + rect.Width() >= cx-10) && (lpwndpos->x + rect.Width() <= cx+10))
    lpwndpos->x = cx - rect.Width();
   if ((lpwndpos->y >= -10) && (lpwndpos->y <= 10))
    lpwndpos->y = 0;
   if ((lpwndpos->y + rect.Height() >= cy-10) && (lpwndpos->y + rect.Height() <=
cy+10))
    lpwndpos->y = cy - rect.Height();
   ..........
}

데브피아 검색을 통해서 알아냄. 방법은 아는데 멀 이용해야는지를 모르니;;;

댓글 없음: