基于对话框的MFC
会连续的使用Invalidate();做清屏处理,这样导致屏幕一直在闪。如何解决?
求代码,新人纠结ing
会连续的使用Invalidate();做清屏处理,这样导致屏幕一直在闪。如何解决?
求代码,新人纠结ing
解决方案 »
- 项目可行性调查(Windows指纹登录系统) ---- 能否实现网域登录?
- 请大家介绍几本“VC数据库开发”方面的书
- 关于分割窗口的问题
- 怎样向一个网页填入搜索信息,并接收返回搜索信息页? 急急!!!!!
- 求 httpclient BasePoint1.01源代码
- 请vc里有无把几个已知点光滑连接的函数!
- 这个warning是为什么?
- 在一个程序中,如何启动另外一个程序?并得到该程序得句柄??
- 有人接我这单子吗?TIF格式图片利用jpeg或者JPEG2000算法压缩打包
- 谁有installshield professional 6.2 的password和serial?
- “进程”和“进程内核对象”是一回事吗
- DataGrid
就是说我每调用一次Invalidate();函数清屏,屏幕就会闪,如何避免?
BOOL CTestDlg::OnEraseBkgnd(CDC* pDC)
{
return true; //禁止刷屏
}
MouseMove里面。
所以调用很频繁求大神啊
MouseMove里面。
所以调用很频繁求大神啊
MouseMove里面。
所以调用很频繁求大神啊
非要调用,设置一个状态变量,调用一次以后,设置状态为 false,禁止调用。
只能设置一个全局状态变量,鼠标进入区域时,Invalidate刷新一次后,设置为false,鼠标出来,再设置为true。bool mousein=true;
if(PtInRect(&rect,point)) {
if(mousein) {Invalidate(); mousein=false;}
}else{
mousein=true;
}
===========
如果你总是在MouseMove中Invalidate的话,双缓冲作用也不大。
为什么要在MouseMove中调用Invalidate 呢?
我的函数如下:
void CTryDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ClientToScreen(&point);
CRect rect;
GetDlgItem(IDC_STATIC1)->GetClientRect(rect);
GetDlgItem(IDC_STATIC1)->ClientToScreen(rect);
if(rect.PtInRect(point)&&Y) //鼠标是否在控件范围之内
{
//将Picture控件中的图片放大一些
CDC* pDC=GetDlgItem(IDC_STATIC1)->GetDC();
CBitmap cbmp;
cbmp.LoadBitmap(IDB_BITMAP1);
CDC memdc;
memdc.CreateCompatibleDC(pDC);
memdc.SelectObject(&cbmp);
CRect rect;
GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect); int width = rect.Width();
int height = rect.Height(); pDC->StretchBlt(int(-0.05*width),int(-0.05*height),int(width*1.1),int(height*1.1),&memdc,0,0,width,height,SRCCOPY);
SHUA=true;
}
else if(Y&&SHUA)
//就这里else的情况我不太会了,不会把原来画的放大的那个东西缩小或者擦除,所以只能用了Invalidate();
{
Invalidate(SHUA);
SHUA=false;
}
CDialog::OnMouseMove(nFlags, point);
}这样每次鼠标离开控件的时候会闪一次屏,虽然比以前一直闪好多了,但能否有其他解决方案?
=============
你的图是画在控件中的,就算是调用Invalidate也是对控件调用啊?GetDlgItem(IDC_STATIC1)->Invalidate(..);
或者能有其他方法放大picture控件中的图片么?
img1.Load(L"D:\\test.jpg");
img1.Draw(hDC,CRect(10,10,600,600));Draw方法,图片大小可自己定义。
{
if (!m_bMouseOnButton)
{
m_bMouseOnButton = TRUE; Invalidate(); csTME.cbSize = sizeof(csTME);
csTME.dwFlags = TME_LEAVE;
csTME.hwndTrack = m_hWnd;
::_TrackMouseEvent(&csTME);
} // if
}
就算要写,也得加个判断,你说对不?