c++-请教一个MFC函数里鼠标画线的问题

问题描述

请教一个MFC函数里鼠标画线的问题

void C3Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

if (nFlags == MK_LBUTTON)
{
    dc->MoveTo(pt);
    dc->LineTo(point.x , point.y );

}
pt = point;
CDialogEx::OnMouseMove(nFlags, point);

}
请问下这个程序如果把 PT=POINT,放在前面会出现,画快了成虚线了的情况
请问下是什么原理呀?

解决方案

划线那段是从上次的点的位置滑道这次点的位置,既从pt画到point,你把pt在前面赋值了岂不是上次点的位置和这次点的位置一样了。

解决方案二:

pt = point;这个用来为下次划线保存一个划线的起点,当然是先划线,再设置,否则它被 point 覆盖了。

解决方案三:

MoveTo 只需在LBUTTONDOWN 调用就可以了 之后全是LineTo就行了

时间: 2024-11-02 17:03:16

c++-请教一个MFC函数里鼠标画线的问题的相关文章

对象-请教一个MFC另外一个类返回字符函数的问题

问题描述 请教一个MFC另外一个类返回字符函数的问题 创建了一个新类,如果调用这个新类的成员变量的话,直接把新类对象实例化,然后新类.m_str ,这样调用不就行了吗?为什么我看别人写的代码,还要在新类的头文件定义几个 字符串CSTRING函数,用这个函数返回成员变量的值,请问下这样不是多此一举吗?跟 我用的方法有什么区别呢? 解决方案 通过函数返回成员变量值的目的是隐藏类实现的细节,这也是面向对象的特点. 解决方案二: 不要直接返回栈上的局部变量,因为堆栈会在函数返回后销毁. 解决方案三: 如

c++-请教一个MFC提示键盘按键的程序的问题

问题描述 请教一个MFC提示键盘按键的程序的问题 我看到别人做的按下哪个键就弹出提示:"你按下了哪个键",用的是PRETRANSLATE这个 虚函数,我想请问一下,如果不用这个虚函数,用WM_KEY DOWN UP这样的键盘 消息不是也可以吗?这两者有什么区别呢? 解决方案 也是可以的,不过子控件如果接收键盘消息,比如文本框,那么主窗体就得不到了. 解决方案二: PreTranslateMsg除了判断单个按键,还可以处理组合健.这是它功能更强大的地方. 解决方案三: 当然可以,区别好像

c++-请教一个MFC DC类的问题

问题描述 请教一个MFC DC类的问题 请问下,如果想做一个程序比如我想在程序上画线,这样定义的DC必须要是指针吗?如果不是 的话会有什么后果呢? 解决方案 只要你能获取正确的画图dc对象,就可以画图,然后据说画图位置,比如OnPaint,OnDraw函数中,进行i 需要的画图. 解决方案二: 没有必要一定使用指针,只要正确使用 DC 就行. 但一般来说,使用 DC 指针比较多.

c++-请教一个MFC填充背景色的问题

问题描述 请教一个MFC填充背景色的问题 BOOL C2Dlg::OnEraseBkgnd(CDC* pDC) { GetWindowRect(rect); pDC->SelectObject(fff); pDC->Rectangle(rect); return CDialogEx::OnEraseBkgnd(pDC); } 我想一调试程序就背景显示指定的颜色,用CCLIENTDC可以,但是用这个函数传进来的 PDC好像不行,请问下是为什么呀?CBRUSH fff已经在初始化函数中定义了. 解

vc++-请教一个MFC重载的问题

问题描述 请教一个MFC重载的问题 MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流程出来. 请问下这句话中的,通过重载这个函数,是什么意思呀?甚至可以作一个全新的控制流程出来.意思是重写这个函数吗?我知道重载函数是啥意思,但是这里不是很明白,还请指教一下,先谢谢了. 解决方案 不是重载,而是重写PreTranslateMessage() 这是一个虚函数,你的窗口从CWn

c++-请教一个MFC关于GDI画图的问题

问题描述 请教一个MFC关于GDI画图的问题 可能是上面几个问题没有表达清楚,我就是想问如果大家做一个MFC的对话框程序 在程序上画线这么一个程序,肯定要用到DC是吧?如果您 的DC在DLG类的头文件中定义 的话,您们一般是会用指针的还是非指针的呢?为什么呢? 解决方案 直接使用DC对象,是不是用指针不重要. 解决方案二: dc pdc,你看一般代码不是都这么写的,怎么用都行 解决方案三: 一般用CDC的指针,如果你一定要用对象那就在.h文件里加一个成员变量,然后可以这样对他初始化. void

c++-请教一个MFC程序代码的问题

问题描述 请教一个MFC程序代码的问题 void CmouselessionDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nFlags == MK_LBUTTON) { CClientDC ddd(this); CPen ppen; ppen.CreatePen(1, 5, RGB(0, 0, 255)); ddd.SelectObject(ppen); ddd.MoveTo(pt)

c++-请教一个MFC代码的问题

问题描述 请教一个MFC代码的问题 void CmouselessionDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nFlags == MK_LBUTTON) { CClientDC ddd(this); CPen ppen; ppen.CreatePen(1, 5, RGB(0, 0, 255)); ddd.SelectObject(ppen); ddd.MoveTo(pt);

c++-请教一个MFC中CDC的问题

问题描述 请教一个MFC中CDC的问题 请问下,CDC和CCLIENTDC这两个,如果用CDC的话必须GETDC才能得到DC是吧 如果是CCLIENTDC的话就不用了,直接构造一下就完了,如果释放的话,请问这两个都 需要手动释放吗? 解决方案 Get的就要Release,CCLIENTDC好像系统会自己回收不用手动删除. 解决方案二: CClientDC 类的析构函数会释放它 解决方案三: 请教一个SurfaceView 的问题