用mfc写的对话框屏幕绘图程序

求解答啊,知道有两种屏幕绘图的方法,一种是直接调用CWindowDC,第二种,窗体透明,但是求一种方法,可以在绘图与正常鼠标模式之间想切换,切换到鼠标模式以后,图案仍然留在之前画的地方,但是鼠标可以做正常的工作,用鼠标可以运行其他程序。求大神啊

这里有两个思路参考一下:

    你是否使用了钩子,如果用了,那么只能进行区域判断,在区域只能为绘图,超出区域为鼠标

    如果没用钩子,那么其实很好办,首先你是否SetCapture捕获了鼠标,如果有,可以设置一个邮件中ReleaseCapture,区域判断同样也可以在OnMouseMove中使用,毕竟你屏幕绘图也应该有个范围,如果没有范围那么只能是用浮动式工具按钮或者鼠标右键切换了。注意捕获鼠标只能是前台有焦点窗口。

追问

现在我调用GetWindowDC(GetWindowdesktop)结果画图,只能在对话框内画,画出的图形在对话框外部,这肿么办呢

追答

“,只能在对话框内画,画出的图形在对话框外部”,这个应该是代码中坐标错误吧,不清楚你的代码,不好明确意见。
其实无论怎样,通过右键取消画图是合理的逻辑,这个可以通过鼠标形状的变换进行标识。

追问

的确坐标错误,坐标不知道肿么办,能看到图么,左边那几个图案,是我在右边对话框下面的空白处画的,我仅仅简单的调用了CWindowDC来画,能否详细说一下坐标问题怎么解决,还有就是调用setcapture,再点击了此对话框以外的区域,岂不是会激活其他窗口,如果可以实现在对话框外画图,能否说的详细一点,

追答

你搜索 钩子捕获鼠标,有很多代码和文章解答你的疑问,不仅仅是获取桌面DC就可以了。
关于坐标,查看两个函数的说明ClientToScreen ScreenToClient,比较明显,你没有使用钩子,在鼠标消息里面获取的是客户区坐标(你的窗口坐标),而画图直接应用在了屏幕坐标上,需要做一个坐标转换。
上面强调过了,setcapture只能是在自己窗口客户区之内,也就是透明方式。

温馨提示:内容为网友见解,仅供参考
无其他回答

VC++ MFC在对话框上画图问题
1、如何在新建的一个dialog中添加onpaint()函数?例如你新建了一个dialog,类名为test22(添加类是双击新建那个窗口),接着找到这个类的头文件test22.h,在其中的protected中添加一行afx_msg void OnPaint();这样就可以在test22.cpp中用onpaint()函数了,添加void test22::OnPaint(){}就可以了:...

一个关于关于MFC的问题:如何在对话框上画图
在对话框中响应CDialog::OnLButtonDown(nFlags, point);与CDialog::OnLButtonUp(nFlags, point);CDialog::OnMouseMove(nFlags, point);这三个事件,给个例子,比着这个改一下。先定义BOOL m_bMove=false;void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){ \/\/ TODO: Add your message h...

求助:使用 MFC 开发图形界面程序
一、创建基于对话框的MFC程序 先打开Visual Studio 2013开发环境,如图1所示。依次点击【文件】> 【新建】> 【项目】创建一个新的项目。接下来进入创建项目界面如图2所示。依次选择【已安装】 > 【模版】 > 【Visual C++】 > 【MFC】来到MFC程序类型选择界面,选择【MFC应用程序】这一列。在创建项目...

请问MFC 根据数据怎么在对话框上画曲线图。 要有坐标。 求大神帮忙,最...
dc.TextOut(m_left-20,m_bottom-m_IntervalPan1,str); *\/ \/\/绘制x轴刻度 for (i = m_left; i < m_right; i+=5)

MFC 对话框的矩形区域内画图
对话框默认就是不能缩放的 一个DC都是和一个CWnd相对应的,所以说想获得对话框上面某一个矩形区域的DC不好办。你可以这样,假设你知道那个矩形区域的左上角坐标是x,y,宽度是Width,高度是Height :CDC* pDC=GetDC();CDC mdc;mdc.CreateCompatibleDC(pDC);\/\/创建内存DC;CBitmap bmp;bmp.Create...

MFC,基于对话框的,想在对话框中的某一区域画带刻度的坐标轴
intm_nCaptureRange;\/\/用以绘制坐标文本 void DrawDigi(HDC hDC);\/\/用以绘制坐标线 void DrawLines(HDC hDC);\/\/用以绘制坐标刻度 void DrawCoordinate(HDC hDC);};可以单点某根坐标线 ,也可以点交叉点 点击被捕获后坐标变虚线,变虚线情况下的线都可以移动 可以方便的重用到自己代码里 ...

C++ MFC如何在对话框上画动态图 画图
void CMFCApplication2Dlg::OnPaint(){if (IsIconic()){\/\/...else{CPaintDC dc(this); \/\/ device context for paintingCPoint Pt[7];Pt[0] = CPoint(20+m_incr, 50);Pt[1] = CPoint(180+m_incr, 50);Pt[2] = CPoint(180+m_incr, 20);Pt[3] = CPoint(230+m_incr, 70)...

怎样用MFC做一个图形界面程序
给你个最最简单的MFC程序。你可以打开2005 新建win32 程序 建立空项目 然后编写如下代码\/\/hello.cpp include <afxwin.h> \/\/ 说明应用程序类 class CHelloApp : public CWinApp { public:virtual BOOL InitInstance();};\/\/ 建立应用程序类的实例 CHelloApp HelloApp;\/\/ 说明主窗口类 class CHello...

MFC单击菜单弹出的对话框中画图不显示是怎么回事?代码如下
可以显示啊,不过显示的线条是黄颜色的,不是很清楚;将pen.CreatePen(PS_SOLID,4,RGB(255,245,0)); 改为:pen.CreatePen(PS_SOLID,4,RGB(255,0,0));\/\/红色线条

我想在基于对话框的MFC程序中画图,画图程序可以不写在OnPaint函数中吗...
1.可以不在OnPaint中 2.其机制是:a.windows是多窗口的,你的程序不应该把图画到其它地方去,所以你要取得窗口的专门管绘图的一个句柄,叫做 HDC b.你用MFC,要取它的话用这句: CDC* pDC=this->GetDC(); (某窗口的DC,例如本窗口就是this)c.然后就可以向DC中画了,例如:pDC->LineTo(100,100...

相似回答
大家正在搜