儿童窗口的东西类似于“this”

时间:2017-11-08 11:41:06

标签: visual-c++ mfc

我是编程的新手。我正在编写一个基于对话框的应用程序,它有一个静态控件。使用

Using
void CMy1stDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if (this == GetCapture())
    {
        CClientDC aDC(this);
        aDC.SetPixel(point, RGB(255,0,0));
    }   
}

我可以创建像 enter image description here

但是我想要的是鼠标的轨迹只在静态窗口中绘制。我无法在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的静态窗口获取某些内容?我将不胜感激任何帮助。

1 个答案:

答案 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()