[소스] 테두리 없고, 크기 조절 가능하며, 움직일 수 있는 투명 다이얼로그 만들기
여기저기 쓰임새가 많을 것 같아서 올려둡니다.
다이얼로그 테두리를 없애기 위해서는 다이얼로그 속성 -> Style에서 Border를 None으로 해주셔야 합니다.
// 아래는 다이얼로그 모서리 클릭 후 이동시 크기 조절, 다이얼로그 클릭 후 드래그 시 다이얼로그 이동 부분입니다.
void CNStatDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// 다이얼로그 크기 조절
CRect moveableRect;
GetClientRect(&moveableRect);
moveableRect.left = max(1, moveableRect.right - 10);
moveableRect.top = max(1, moveableRect.bottom - 10);
if( PtInRect(&moveableRect, point))
{
SetCursor(LoadCursor(0,IDC_SIZEALL));
if( nFlags&MK_LBUTTON )
SendMessage(WM_NCLBUTTONDOWN, HTBOTTOMRIGHT, 0);
}else // 다이얼로그 위치 이동
PostMessage( WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM( point.x, point.y));
CDialog::OnMouseMove(nFlags, point);
}
// 아래는 다이얼로그 투명도 조절 함수입니다.
typedef BOOL (WINAPI *SetLayer)(HWND hWnd, COLORREF crKey, BYTE bAlpha, DWORD dwFlags);
#define LWA_COLORKEY 0x01
#define LWA_ALPHA 0x02
void CNStatDlg::n_SetDlgAlpha(int chAlpha) // 다이얼로그 투명도 조절
{
HMODULE hUser32 = GetModuleHandle(_T("USER32.DLL"));
SetLayer pSetLayer = (SetLayer)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
if(pSetLayer == NULL)
{
MessageBox("win2000 이상");
return;
}
SetWindowLong(this->m_hWnd, GWL_EXSTYLE, GetWindowLong(this->m_hWnd, GWL_EXSTYLE) | 0x80000);
pSetLayer(this->m_hWnd, 0,chAlpha, LWA_ALPHA);
}
출처: http://cafe.naver.com/injepnn.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=54