VC 滚动视图中计算非客户区尺寸之后绘制非客户区,滚动条部分绘制紊乱

lcg_1010 2015-08-05 10:05:13

主要代码:
void CtScrollBarView::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
RECT* pRect = &( lpncsp->rgrc[0] );
pRect->top += 200;
CScrollView::OnNcCalcSize(bCalcValidRects, lpncsp);
}
void CtScrollBarView::OnNcPaint()
{
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CScrollView::OnNcPaint()
CWindowDC dc( this );
CRect rect;
GetClientRect ( &rect );
CBrush brush ( RGB ( 0, 255, 0 ) );
dc.SelectObject ( &brush );
dc.Rectangle ( 0, 0, rect.Width(), 200 );
dc.SetBkColor ( RGB ( 0, 255, 0 ) );
dc.TextOutW ( rect.Width() / 2, 100, _T( "非客户区" ) );
//UpdateBars();
//CScrollBar* pBar = GetScrollBarCtrl( SB_VERT );
//pBar->RedrawWindow();
}
...全文
179 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2015-09-08
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
赵4老师 2015-08-06
  • 打赏
  • 举报
回复
与其浪费时间自己试各种错,不如持空杯心态虚心认真学习官方成熟的源代码。
lcg_1010 2015-08-06
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98 再参考: MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP4\SCRIBVW.CPP MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP5\SCRIBVW.CPP MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP6\SCRIBVW.CPP MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP7\SCRIBVW.CPP ?
赵老师,那个问题的原因是没有调用基类的OnNcPaint()。 现在又出现了一个问题,我想通过双缓冲绘图的方式在滚动视图的客户区去贴图,于是我写了下面的测试代码: void CtBitBltView::OnDraw(CDC* pDC) { CtBitBltDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 CRect rect; GetClientRect ( &rect ); CDC dcMem; dcMem.CreateCompatibleDC ( pDC ); dcMem.SetViewportOrg ( m_ptViewOrg ); //pDC->SetViewportOrg ( m_ptViewOrg ); CBitmap bitmap; bitmap.CreateCompatibleBitmap ( pDC, rect.Width(), rect.Height() ); dcMem.SelectObject ( &bitmap ); dcMem.Ellipse ( &rect ); pDC->BitBlt ( 0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, SRCCOPY ); } 但是,当我模拟滚动之后,发现不是我要的结果。我想要的效果就是这张内存位图始终贴到窗口的客户区,但是发现滚动之后,内存位图也会发生移动。麻烦赵老师帮我分析一下原因,学生不胜感激。
赵4老师 2015-08-05
  • 打赏
  • 举报
回复
赵4老师 2015-08-05
  • 打赏
  • 举报
回复
MSDN98_1.ISO http://pan.baidu.com/s/1dDF41ix, MSDN98_2.ISO http://pan.baidu.com/s/1bnGo0Vl 先下载安装MSDN98 再参考: MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP4\SCRIBVW.CPP MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP5\SCRIBVW.CPP MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP6\SCRIBVW.CPP MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP7\SCRIBVW.CPP ?
赵4老师 2015-08-05
  • 打赏
  • 举报
回复
引用 2 楼 lcg_1010 的回复:
[quote=引用 1 楼 zhao4zhong1 的回复:] http://bbs.csdn.net/topics/390374955
赵老师,希望你能帮我分析一下问题。[/quote] 楼主,希望你能先学习MSDN98中成熟的相关例子代码。 (其实主要原因是我不会或懒得费老大劲去解决你遇到的问题)
lcg_1010 2015-08-05
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
http://bbs.csdn.net/topics/390374955
赵老师,希望你能帮我分析一下问题。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧