如何用MFC真正的实现在当前电脑屏幕上通过鼠标点击和移动一段距离后释放鼠标2个动作画直线
//CmultiView消息处理程序voidCmultiView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyou...
// CmultiView 消息处理程序
void CmultiView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_prpoint=m_endpoint=point;
flags=false;
CView::OnLButtonDown(nFlags, point);
}
void CmultiView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(flags)
{
CWindowDC pDC(GetDesktopWindow());
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
m_endpoint=point;
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
// ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}
void CmultiView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// CDC* pDC=GetDC();
CWindowDC pDC(GetDesktopWindow());
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
m_endpoint=point;
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
//ReleaseDC(pDC);
ReleaseCapture();
flags=false;
CView::OnLButtonUp(nFlags, point);
}
CWindowDC pDC(GetDesktopWindow()); 不是说获取桌面窗口吗?但是我把鼠标放到屏幕的任意一点就失去焦点了。
我是想在当前电脑屏幕上画线,但是我只能在窗口中获取到鼠标的焦点,在窗口里面画了一条线,但是实际上画到了桌面上(窗口之外),可是我还是没有办法在桌面上画图(一点当前电脑屏幕,程序就失去焦点了,根本画不了图),怎么才能真正的在当前电脑屏幕上画图呢?就是说我在电脑屏幕上任意的一点按下左键,然后在屏幕上的另一点释放左键,然后就在这亮点之间画一条直线,而不是在窗口里面点击和释放。
可以在屏幕上鼠标移动画线,那我就可以画矩形,画圆之类的。但是直线这个我都没有办法完成。
初学者,可能这个问题已经有人问了很多遍,但是我在CSDN上搜到的不是我想要的,希望你能给我些指导,谢谢。 展开
void CmultiView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_prpoint=m_endpoint=point;
flags=false;
CView::OnLButtonDown(nFlags, point);
}
void CmultiView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(flags)
{
CWindowDC pDC(GetDesktopWindow());
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
m_endpoint=point;
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
// ReleaseDC(pDC);
}
CView::OnMouseMove(nFlags, point);
}
void CmultiView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// CDC* pDC=GetDC();
CWindowDC pDC(GetDesktopWindow());
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
m_endpoint=point;
pDC.MoveTo(m_prpoint);
pDC.LineTo(m_endpoint);
//ReleaseDC(pDC);
ReleaseCapture();
flags=false;
CView::OnLButtonUp(nFlags, point);
}
CWindowDC pDC(GetDesktopWindow()); 不是说获取桌面窗口吗?但是我把鼠标放到屏幕的任意一点就失去焦点了。
我是想在当前电脑屏幕上画线,但是我只能在窗口中获取到鼠标的焦点,在窗口里面画了一条线,但是实际上画到了桌面上(窗口之外),可是我还是没有办法在桌面上画图(一点当前电脑屏幕,程序就失去焦点了,根本画不了图),怎么才能真正的在当前电脑屏幕上画图呢?就是说我在电脑屏幕上任意的一点按下左键,然后在屏幕上的另一点释放左键,然后就在这亮点之间画一条直线,而不是在窗口里面点击和释放。
可以在屏幕上鼠标移动画线,那我就可以画矩形,画圆之类的。但是直线这个我都没有办法完成。
初学者,可能这个问题已经有人问了很多遍,但是我在CSDN上搜到的不是我想要的,希望你能给我些指导,谢谢。 展开
2个回答
展开全部
mfc的cdc机制了解多少了?无外呼就是设置相关设备cdc然后在cdc上作图。想在那里画就申请谁的cdc。
这样画图就分为两种情况了。第一种就是你说的只在桌面上画图,你需要用桌面的句柄建立cdc,这样画图就是画到桌面上的。第二种情况就是存在活动窗口,这样你就需要用活动窗口的句柄建立cdc。
再有一个难点就是鼠标消息的获取,这时鼠标消息获取不可以用程序内部消息,因为你做图时鼠标移动和点击都不在你的程序之上,故需要用一种方法获取鼠标当前状态,去看看钩子函数,鼠标钩子能满足这样的需求。
说的很笼统,如果不明白欢迎追问
这样画图就分为两种情况了。第一种就是你说的只在桌面上画图,你需要用桌面的句柄建立cdc,这样画图就是画到桌面上的。第二种情况就是存在活动窗口,这样你就需要用活动窗口的句柄建立cdc。
再有一个难点就是鼠标消息的获取,这时鼠标消息获取不可以用程序内部消息,因为你做图时鼠标移动和点击都不在你的程序之上,故需要用一种方法获取鼠标当前状态,去看看钩子函数,鼠标钩子能满足这样的需求。
说的很笼统,如果不明白欢迎追问
追问
我对MFC很不了解,的确是很笼统,因为我都不太懂,呵呵。 你说这时鼠标消息获取不可以用程序内部消息,就是说我上面的写法鼠标消息的获取是用程序内部消息了?
追答
对头。上面的方法用的是程序内部的消息机制。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询