为了搭配一个项目,决定做个支持多点的多人画板,之前一直使用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选择类向导插入,没有就在窗口事件里面,属性栏哪里:
在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