MFC多点触控画板

时间:2021-06-14 16:38:16

        为了搭配一个项目,决定做个支持多点的多人画板,之前一直使用winfrom但是不支持多点(微软自己的东西都不支持=.=),于是研究了两天MFC,哇,一比较,简直绝望,感觉使用好费劲,各种不知道问题的报错,但是做了两天还是实现基本功能了(第三天就让我实现更多的功能,于是有研究了两天wpf,简直简单,就是HTML和winform的结合体)。

      官方的多点触控是基于单文档的,感谢这个帖子,让我改成基于对话框的:https://blog.csdn.net/peppereggfriedrice/article/details/51507792

      微软官方配置教程:https://msdn.microsoft.com/zh-cn/library/ee851785.aspx

      感觉把自己会的记录下来,省的以后再接触到全忘记了。

       配置完之后你会发现,是整个dialog都可以画的,建个pictureControl就会把dialog的事件遮挡,于是想了个办法,在主dialog上面建两个子dialog,这样就实现两个独立画板。

      重绘dialog的方法是OnPaint(),初始化方法是InitInstance()在子dialog里面默认都是没有的。右键dialog选择类向导插入,没有就在窗口事件里面,属性栏哪里:

MFC多点触控画板

在OnPaint():

CPaintDC dc(this);
	CRect rc;
	GetClientRect(&rc);
	CDC dcMem;
	dcMem.CreateCompatibleDC(&dc);
	CBitmap bmpBackground;
	bmpBackground.LoadBitmap(IDB_BITMAP1);

	BITMAP bitmap;
	bmpBackground.GetBitmap(&bitmap);
	CBitmap* pbmpPri = dcMem.SelectObject(&bmpBackground);
	dc.StretchBlt(0, 0, rc.Width(), rc.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);

对每个控件进行什么操作,都需要先通过ID(可以看做唯一标志符)获取句柄,比如保存图片:

	CWnd* bmpShow(this); //获取句柄,可以写ID
	CDC *pdc = bmpShow->GetDC();
	CImage  imag;
	CRect rect;

	GetClientRect(&rect);        //获取画布大小  
	bmpShow->GetClientRect(&rect);
	imag.Create(rect.Width(), rect.Height(), 32);
	::BitBlt(imag.GetDC(), 0, 0, rect.Width(),rect.Height(), pdc->m_hDC, 0, 0, SRCCOPY);
	CString picturePath;
	picturePath = "D:\\aa\\soen.png";  //文件路径  
	HRESULT hResult = imag.Save(picturePath); //保存图片  
	ReleaseDC(pdc);
	imag.ReleaseDC();

但愿以后不会遇到这东西==。

源码下载地址:https://download.csdn.net/download/qq_35957011/10306370