我是编程的新手。我正在编写一个基于对话框的应用程序,它有一个静态控件。使用
Using
void CMy1stDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (this == GetCapture())
{
CClientDC aDC(this);
aDC.SetPixel(point, RGB(255,0,0));
}
}
但是我想要的是鼠标的轨迹只在静态窗口中绘制。我无法在MSDN中找到this
的引用,我也不知道为什么以下方法失败。
void CMy1stDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd* pMYSTATIC = GetDlgItem (IDC_MYSTATIC); //IDC_MYSTATIC is the ID of the static control
if (pMYSTATIC == GetCapture())
{
CClientDC aDC(pMYSTATIC);
aDC.SetPixel(point, RGB(255,0,0));
}
}
我怎样才能得到我想要的东西?是否有任何方法可以为类似于this
的静态窗口获取某些内容?我将不胜感激任何帮助。
答案 0 :(得分:1)
好的,试试这个:
void CMy1stDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CRect rect;
// Get static control's rectangle
GetDlgItem(IDC_MYSTATIC)->GetWindowRect(&rect);
// Convert it to client coordinates
ScreenToClient(&rect);
// Check if mouse pointer is inside the static window, if so draw the pixel
if (rect.PtInRect(point))
{
CClientDC dc(this);
dc.SetPixel(point.x, point.y, RGB(255,0,0));
}
}
此代码也可能需要一些修复,例如在检查是否绘制像素之前缩小矩形(到其仅客户端区域)。
请注意,您不需要查看GetCapture()
;如果您的对话框没有抓取鼠标,则无论如何都不会收到此消息。
此外,所有这些函数都是Windows SDK的包装器,例如ClientDC()
类,基本上包装了GetDC()
/ ReleaseDC()
。