首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

拆分窗口鼠标十字架同步有关问题

2012-03-11 
拆分窗口鼠标十字架同步问题我将项目A文档窗口拆分成三行一列的三个窗口,分别使用类M0View,M1View,M2View

拆分窗口鼠标十字架同步问题
我将项目A文档窗口拆分成三行一列的三个窗口,分别使用类M0View,M1View,M2View并都继承自CAView,三个窗口都要画图,因要做一个鼠标十字架在三个窗口中同步显示,但是每次鼠标移动时,只有最上面的窗口显示正常,下面窗口的鼠标十字架会有拖线出现(反正哪个窗口在上方就正常,应该刷新与画线都没问题),只要第一个窗口OnDraw空着,第二个窗口十字架就正常。
十字线代码如下:
//用两种方式画的十字线都是这样的效果,求高手指导
CDC* pDC=GetDC();
CRect rc;
GetClientRect(&rc);
CBitmap bmp; //内存中承载临时图象的位图

//CDC dcMem;
dcMem.CreateCompatibleDC(pDC); //依附窗口DC创建兼容内存DC
//创建兼容位图(必须用pDC创建,否则画出的图形变成黑色)
bmp.CreateCompatibleBitmap(pDC,rc.Width(),rc.Height());
CBitmap *pOldBit=dcMem.SelectObject(&bmp);
//按原来背景填充客户区,不然会是黑色
//dcMem.FillSolidRect(rc,RGB(255,255,255));
//dcMem.SetBkMode(TRANSPARENT);
//dcMem.TransparentBlt(0,0,rc.Width(),rc.Height(),pDC,0,0,rc.Width(),rc.Height(),RGB(0,0,0));
//画图,添加你要画图的代码,不过用dcMem画,而不是pDC;

static long xOldSrc=0,yOldSrc=0; 
/*dcMem.MoveTo(0,yOldSrc);//---- 擦除上次的线条 
dcMem.LineTo(rc.right,yOldSrc); 
dcMem.MoveTo(xOldSrc,0); 
dcMem.LineTo(xOldSrc,rc.bottom); */
CRect LineRectX(0,yOldSrc,rc.right,yOldSrc+1);
CRect LineRectY(xOldSrc,0,xOldSrc+1,rc.bottom);
if(x!=xOldSrc)
InvalidateRect(&LineRectY);
if(y!=yOldSrc)
InvalidateRect(&LineRectX);
//dcMem.SetROP2(R2_NOT); 
CPen pPen(PS_SOLID,0,RGB(200,100,100));
dcMem.SelectObject(&pPen);
dcMem.MoveTo(0,y);//---- 绘制本次线条 
dcMem.LineTo(rc.right,y); 
dcMem.MoveTo(x,0); 
dcMem.LineTo(x,rc.bottom);

xOldSrc=x; 
yOldSrc=y;

pDC->BitBlt(0,0,rc.Width(),rc.Height(),&dcMem,0,0,SRCPAINT);

//将内存DC上的图象拷贝到前台
//绘图完成后的清理
dcMem.DeleteDC(); //删除DC
bmp.DeleteObject(); //删除位图

[解决办法]
你上面的代码是放在哪里的?OnDraw函数中吗?
[解决办法]
你先检查一下你的三个窗口的鼠标位置同步是否有问题 可以把坐标值打出来看看

热点排行