實現:獲取指定窗口句柄小工具


對話框頭文件中

/*
邏輯順序:
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);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM