對話框頭文件中
/*
邏輯順序:
1、先在對話框的初始函數中定義好游標
2、獲取被拖動圖像的位置
3、鼠標左鍵點擊事件按下的時候,開始捕獲游標(拖動圖像的位置)
4、鼠標左鍵釋放掉游標(拖動圖像的位置),之后需要轉換(ClientToScreen),獲取鼠標釋放時候的XY坐標,主要獲取句柄還是通過WindowFromPoint,和事件釋放后的XY坐標
*/
HICON m_hIcon;
HCURSOR mCursor; //定義鼠標
RECT rect; //定義鼠標形狀
HWND hDest; //獲得的目標句柄
BOOL CMy9Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
....
mCursor = LoadCursor(NULL, IDC_SIZEALL); //默認帶有箭頭
GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);
...
void CMy9Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if (point.x >= rect.left && point.x <= rect.right || point.y >= rect.top && point.y <= rect.bottom) {
SetCapture(); //開始捕獲
SetCursor(mCursor); //當范圍匹配,就對當前光標進行改變
}
CDialogEx::OnLButtonDown(nFlags, point);
}
void CMy9Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
POINT pt = point;
CString mString;
wchar_t sName[64];
wchar_t sContent[64];
ReleaseCapture();
ClientToScreen(&pt);
hDest = ::WindowFromPoint(pt); //獲取指定POINT的窗口的句柄
mString.Format(_T("0x%.8x"), hDest);
SetDlgItemText(IDC_EDIT1, mString);
GetClassName(hDest, sName, MAX_PATH); //獲取類名
SetDlgItemText(IDC_EDIT2, sName);
::SendMessage(hDest, WM_GETTEXT, (WPARAM)64, (LPARAM)sContent); //獲取標題
SetDlgItemText(IDC_EDIT3, sContent);
CDialogEx::OnLButtonUp(nFlags, point);
}