CFormView不正常显示 分割窗口刷新有重影 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是直接在CFormView派生类的OnDraw中绘图的,如下所示,用了双缓存,我TRACE的时候,发现每次拖拉分隔条的时候,都会进入OnDraw( )函数.OnDraw( )完整代码如下: CRect rectClient; GetClientRect(&rectClient); Bitmap bmp(rectClient.right,rectClient.bottom); Graphics* pg = Graphics::FromImage(&bmp); pg->Clear(RGB(221,231,244)); DrawTitleBar(pg); Graphics graphics(pDC->m_hDC); graphics.DrawImage(&bmp,rectClient.left,rectClient.top,rectClient.right,rectClient.bottom); delete pg;不知上面代码哪里有问题? 你这个bmp就是这个绿色条带吗? 怎么这么小呢?DrawImage是撑满效果绘制,还是按照图片实际大小绘制? 绿色条带是用GraphicsPath路径画出来的,我希望的是在拖拉分割条的时候,它能跟着移动. 绿色条带是用GraphicsPath路径画出来的,我希望的是在拖拉分割条的时候,它能跟着移动.没看到画绿带的代码啊 绿色条带是用GraphicsPath路径画出来的,我希望的是在拖拉分割条的时候,它能跟着移动.没看到画绿带的代码啊在DrawTitleBar()里面 DrawTitleBar( )里面如下: CRect rect; GetClientRect(&rect); Rect rectClient(rect.left,rect.top,rect.Width(),rect.Height()); Rect titleRect(0,0,rect.Width(),20); SolidBrush brush(Color(223,233,245)); SolidBrush backBrush(Color(248,248,248)); pGph->FillRectangle(&backBrush,rectClient); pGph->FillRectangle(&brush,titleRect); DrawTitleIcon(pGph); DrawTitleText(pGph); DrawPageDecoration(pGph); 如上图,我横向移动CFormView滚动条的时候,其他部分刷新也不正常. 我估计和重绘代码没有关系,而是CFormView导致的. 不知我这样理解对不? 没有效果,似乎这个和CSplitterWnd有关, 因为我一移动滚动条就乱了. 在程序没有失去焦点的情况下,一移动滚动条, 显示就乱了,但是一旦输入焦点切换到别的程序中时, 就不乱了,但是显示还是有问题,它不会随着滚动条一起滚动.但是CFormView中的控件就会.不知到要怎么改.响应哪些事件? 各位,问题已解决. 需要重载三个函数,分别如下:void CQueryView::OnSize(UINT nType, int cx, int cy){ CFormView::OnSize(nType, cx, cy); InvalidateRect(NULL,TRUE);}void CQueryView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ InvalidateRect(NULL,TRUE); CFormView::OnHScroll(nSBCode, nPos, pScrollBar);}void CQueryView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){ InvalidateRect(NULL,TRUE); CFormView::OnVScroll(nSBCode, nPos, pScrollBar);}我的初步分析如下, CFormView派生自CScrollView, 默认它是可以滚动对话框中的控件, 而我OnDraw()函数中都用了GetClientRect,因此自画的背景不会随着滚动. 导致重影. 因为滚动的时候,坐标已经发生改变了. 因此要么强制重绘,要么改变重绘逻辑,一并考虑滚动条的情况. 如何保存文件自动输入文件名字 MFC下如何查看access数据库中有多少个表? 请问如何把函数做为参数传给一个参数? 如何使主菜单的某项不可用 (终止,重试,忽略)的错误分析 如何控制串口打印机实现打印等操作? 再问一遍:多文档的子窗口如何禁用使窗口右上角的按钮失效?(看来只有高高手才能解决) 如何将.BMP文件包含进联编后的exe中去? 大家一天都上网多久??? 怎样做一个NT服务,直接执行这个NT服务,它就自动安装和启动了? 为什么我的MessageBox用不了? VS2010 MFC 控件颜色
GetClientRect(&rectClient);
Bitmap bmp(rectClient.right,rectClient.bottom);
Graphics* pg = Graphics::FromImage(&bmp);
pg->Clear(RGB(221,231,244));
DrawTitleBar(pg);
Graphics graphics(pDC->m_hDC);
graphics.DrawImage(&bmp,rectClient.left,rectClient.top,rectClient.right,rectClient.bottom);
delete pg;不知上面代码哪里有问题?
没看到画绿带的代码啊
没看到画绿带的代码啊
在DrawTitleBar()里面
GetClientRect(&rect);
Rect rectClient(rect.left,rect.top,rect.Width(),rect.Height());
Rect titleRect(0,0,rect.Width(),20);
SolidBrush brush(Color(223,233,245));
SolidBrush backBrush(Color(248,248,248));
pGph->FillRectangle(&backBrush,rectClient);
pGph->FillRectangle(&brush,titleRect);
DrawTitleIcon(pGph);
DrawTitleText(pGph);
DrawPageDecoration(pGph);
如上图,我横向移动CFormView滚动条的时候,其他部分刷新也不正常. 我估计和重绘代码没有关系,而是CFormView导致的. 不知我这样理解对不?
{
CFormView::OnSize(nType, cx, cy);
InvalidateRect(NULL,TRUE);
}void CQueryView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
InvalidateRect(NULL,TRUE);
CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}void CQueryView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
InvalidateRect(NULL,TRUE);
CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}我的初步分析如下, CFormView派生自CScrollView, 默认它是可以滚动对话框中的控件, 而我OnDraw()函数中都用了GetClientRect,因此自画的背景不会随着滚动. 导致重影. 因为滚动的时候,坐标已经发生改变了. 因此要么强制重绘,要么改变重绘逻辑,一并考虑滚动条的情况.