【发布时间】:2018-04-21 02:03:47
【问题描述】:
我是编程新手。我正在编写一个基于对话框的应用程序,它上面有一个静态控件。使用
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 的静态窗口获取一些东西?我将不胜感激这些方面的任何帮助。
【问题讨论】:
-
请阅读一本关于 Windows 编程的书。绘画只能在窗口的 WM_PAINT 消息内完成!比你在这里问的所有问题都消失了。
-
这是错误的,因为您在对话框窗口 (
CClientDC aDC(this)) 上绘制(实际上是“绘制”) - 您应该在静态控件上绘制/绘制,因为这会掩盖这部分对话窗口。而@xMRI,不是真的,CClientDC()调用GetDC(),这不需要无效和处理WM_PAINT消息,它完全用于直接“绘图”。 -
糟糕,抱歉,刚刚意识到我错了,您已经在对话框上绘图了,因为您的静态控件只是一个框架。尝试
GetDlgItem(IDC_MYSTATIC))->GetWindowRect()(或pMYSTATIC->GetWindowRect())然后PtInRect(&rect, &point)以检查您是否在所需的矩形内。矩形可能需要缩小(到其客户专用区域)。 -
如果没有对 Windows API 的扎实了解,您就无法希望精通 MFC。从 Petzold 的 Programming Windows® 开始。
标签: visual-c++ mfc