user-0 提问: MFC贴图问题！！

回复:
user: user-0
content: 引用 15 楼 sghcpt 的回复:OnCtlColor函数是The framework calls this member function when a child control is about to be drawn.是子控件将要给重画时调用的，如果有多个控件就可能画多个，但是指定控件ID，那么画的就是指定ID的控件才会画~~~~~~~~ 我用了你的代码修改了下实现了我要的效果，但我想请问一下怎么实现我贴图想贴哪个坐标就哪个坐标而不是贴在空间上面 还有你说调用CreateCompatibleDC函数就已经使用了双缓冲，但这怎么和我百度看的双缓冲有点出入。

user: user-0
content: 如果我要实现贴图贴在我我指定的X,Y点的话怎么实现不会卡速度慢，且不出现我上面发的图那样出现三张一样的图？  CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP7);  CDC memDC; memDC.CreateCompatibleDC(pDC);  memDC.SelectObject(&bitmap);  pDC->BitBlt(79,225,34,34,&memDC,0,0,SRCCOPY);

user: user-1
content: OnCtlColor函数是The framework calls this member function when a child control is about to be drawn.是子控件将要给重画时调用的，如果有多个控件就可能画多个，但是指定控件ID，那么画的就是指定ID的控件才会画~~~~~~~~

user: user-1
content: 引用 13 楼 qq_42388955 的回复:[quote=引用 10 楼 sghcpt 的回复:] 双缓存的实现是应该为了防止窗口重画时，出现闪烁的情况多~~~用在dui界面上尤其需要的。。。 大哥我用了你的代码修改了一下，为什么你的贴图不会有卡顿的，速度也很快，我用了你的代码把位图贴在了位图控件上实现了我要的效果，也不会卡，但我想问一下你的这段代码没有用双缓冲为什么速度也那么快，我的代码和你的区别是我贴图贴在指定的位置，你贴图贴在指定的控件，这俩者之间的区别是什么[/quote]  如果你没有指定控件，那么上面OnCtlColor函数就会调用画图很多次，假如你界面上有N个控件，那么久调用N次画图，而如果你指定哪个控件画，那么只会在指定的控件需要重画的时候才调用一次。感觉应该是这个区别吧。。还有调用CreateCompatibleDC创建的内存DC已经用了双缓存了呀。。

user: user-0
content: 引用 10 楼 sghcpt 的回复:双缓存的实现是应该为了防止窗口重画时，出现闪烁的情况多~~~用在dui界面上尤其需要的。。。 大哥我用了你的代码修改了一下，为什么你的贴图不会有卡顿的，速度也很快，我用了你的代码把位图贴在了位图控件上实现了我要的效果，也不会卡，但我想问一下你的这段代码没有用双缓冲为什么速度也那么快，我的代码和你的区别是我贴图贴在指定的位置，你贴图贴在指定的控件，这俩者之间的区别是什么

user: user-0
content: 引用 10 楼 sghcpt 的回复:双缓存的实现是应该为了防止窗口重画时，出现闪烁的情况多~~~用在dui界面上尤其需要的。。。 还有就是你们在贴图的时候怎么解决一贴图上去就速度很慢的问题，双缓冲用了说刷出来的速度会变得很快为什么我没什么感觉，是不是我哪里弄错了？？ CBitmap bitmap; 		bitmap.LoadBitmap(IDB_BITMAP7);  		CDC memDC; 		memDC.CreateCompatibleDC(pDC);  		memDC.SelectObject(&bitmap);  		CBitmap BkMap; 		BkMap.CreateCompatibleBitmap(pDC,34,34);//w,h表示窗口的宽和高 		CDC BkDC; 		BkDC.CreateCompatibleDC(pDC); 		BkDC.SelectObject(&BkMap);  		BkDC.BitBlt(0,0,34,34,&memDC,0,0,SRCCOPY);  		pDC->BitBlt(79,225,34,34,&BkDC,0,0,SRCCOPY);

user: user-0
content: 引用 10 楼 sghcpt 的回复:双缓存的实现是应该为了防止窗口重画时，出现闪烁的情况多~~~用在dui界面上尤其需要的。。。 没有啊我OnPaint函数里没有添加代码，都在OnCtlColor这里处理我的代码啊

user: user-1
content: 双缓存的实现是应该为了防止窗口重画时，出现闪烁的情况多~~~用在dui界面上尤其需要的。。。

user: user-1
content: 楼主：OnCtlColor函数是The framework calls this member function when a child control is about to be drawn.是子控件将要给重画时调用的,我在mfc工程中实现下面函数： HBRUSH CMFCApplication1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { 	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); 	if (pWnd->GetDlgCtrlID() == IDC_BUTTON1) 	{ 		CBitmap bitmap; 		BOOL bRetCode = bitmap.LoadBitmap(IDB_BITMAP7);  		CDC memDC; 		memDC.CreateCompatibleDC(pDC);  		memDC.SelectObject(&bitmap);  		pDC->BitBlt(79, 25, 60, 12, &memDC, 0, 0, SRCCOPY); 	} 	return hbr; }  只输出了一张图片，你会不会在OnPaint函数中也调用了画这张图片的代码呢？而且位置信息不同，所以就在不同的地方画了多次了，显示多张图片了？

user: user-0
content: 引用 6 楼 user-2 的回复:就单单这个贴图代码，我在OnPaint里面是可以正确画出来的呀，而且只有一张呀 而且我感觉我参考网上那些代码，试了一下双缓冲没发现和普通贴图有什么区别啊。不是说速度上会有很大的跳跃吗

user: user-0
content: 引用 6 楼 user-2 的回复:就单单这个贴图代码，我在OnPaint里面是可以正确画出来的呀，而且只有一张呀 我上面发的图片显示出来都是些按键，我的软件按下这些对应的按键然后贴不一样颜色状态的图，所以一个位置会有三种颜色的图片，初始常态，按下的状态，被按下过后的常态这三种不同的图

user: user-2
content: 引用 4 楼 qq_42388955 的回复:[quote=引用 3 楼 user-2 的回复:] 为啥不放在OnPaint函数里呢？一般画图不是放在这个函数的嘛。 放在别的函数会有不同的变化吗？ 我这一贴就是三张一样的，而且速度很慢[/quote] 如果只有这一个地方画了，坐标都一样，不可能出现在三个不同的坐标处吧？还是你其他地方代码影响了？

user: user-2
content: 就单单这个贴图代码，我在OnPaint里面是可以正确画出来的呀，而且只有一张呀

user: user-0
content: 引用 3 楼 user-2 的回复:为啥不放在OnPaint函数里呢？一般画图不是放在这个函数的嘛。 放在别的函数会有不同的变化吗？ 我这一贴就是三张一样的，而且速度很慢

user: user-2
content: 为啥不放在OnPaint函数里呢？一般画图不是放在这个函数的嘛。

user: user-0
content: 上键是贴图，其他的都是画刷刷出来的。为什么这一贴图就出现三张一样的？？？

user: user-0