| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 824 人关注过本帖
标题:MFC画笔的学习问题请教
只看楼主 加入收藏
聪儿
Rank: 1
等 级:新手上路
帖 子:75
专家分:3
注 册:2012-9-2
结帖率:77.78%
收藏
已结贴  问题点数:20 回复次数:9 
MFC画笔的学习问题请教
主要是不太懂OnDraw(CDC* pDC)中的CDC* pDC,我开始写了一个程序,以下操作在OnDraw(CDC* pDC)中,然后运行ok。
现在试着把 这些移动到 动作函数中,不知道pDC怎么得来。如下写法运行出来没有显示结果。(其他函数中均无改变)
请各位大牛解答以下。

多谢!!
void CMfcpen_1View::OnLButtonDown(UINT nFlags, CPoint point)
{
    int red=0,green=0,blue=0;
    int width=2;
    int row=20;
    for (int i=0;i<8;i++)
    {
        CDC* pDC;
        int color=RGB(red,green,blue);
        CPen newPen(PS_SOLID,width,color);
        CPen * oldPen=pDC->SelectObject(&newPen);
        pDC->MoveTo(20,row);
        pDC->LineTo(100,row);
        red+=10;
        green+=10;
        blue+=10;
        width+=2;
        row+=30;
    }
        InvalidateRect(NULL);

    // TODO: Add your message handler code here and/or call default
   
    CView::OnLButtonDown(nFlags, point);
}
搜索更多相关主题的帖子: color 画笔 
2012-09-06 10:25
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:7 
BeginPaint
GetDC
GetWindowDC
CreateDC
CreateIC

在msdn上看看具体的用法
2012-09-06 12:57
聪儿
Rank: 1
等 级:新手上路
帖 子:75
专家分:3
注 册:2012-9-2
收藏
得分:0 
可以帮忙改一个出来吗?
我看了这些的唯一想法就是改成这样子:在开始处
    CDC* pDC;
    pDC=GetDC();
但是没有作用。。
2012-09-06 16:45
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
        InvalidateRect(NULL);把这句注释掉

如果还看不到
  //      CPen newPen(PS_SOLID,width,color);
  //      CPen * oldPen=pDC->SelectObject(&newPen);
把这两句也注释掉



2012-09-07 14:29
小郭一号
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2012-9-7
收藏
得分:7 
你的程序应该是崩溃,而不是没有结果

愚蠢的凡人们,在圣人的眼光下颤抖吧!
2012-09-07 20:20
聪儿
Rank: 1
等 级:新手上路
帖 子:75
专家分:3
注 册:2012-9-2
收藏
得分:0 
版主:您好!
基于几天对重绘的认识, InvalidateRect(NULL)这句确实应该注释掉;
但是不明白你为什么说
 CPen newPen(PS_SOLID,width,color);
   CPen * oldPen=pDC->SelectObject(&newPen);这两句也要注释掉,这两句是更新画笔,道理上肯定不可以注释掉的。

另外:注释掉之后,还是没有作用。

小郭:你好!
这次尝试发现确实有濒临崩溃,但是确实不懂原理和该法,请指点一二!多谢!

2012-09-09 16:54
聪儿
Rank: 1
等 级:新手上路
帖 子:75
专家分:3
注 册:2012-9-2
收藏
得分:0 
如果看到的话请回复一下哈。。
3q啦。。
2012-09-11 10:36
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
回复 6楼 聪儿
是根据在本地测试的结果   给出的建议   具体为什么我也不了解

不过为了‘留住’画图结果 规范的做法
应该在响应WM_PAINT中重绘
2012-09-11 13:05
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:7 
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
    int red=0,green=0,blue=0;
    int width=2;
    int row=20;
    for (int i=0;i<8;i++)
    {
        CDC* pDC;
    pDC = GetDC();
        int color=RGB(red,green,blue);
        CPen newPen(PS_SOLID,width,color);
        CPen * oldPen=pDC->SelectObject(&newPen);
        pDC->MoveTo(20,row);
        pDC->LineTo(100,row);
        red+=10;
        green+=10;
        blue+=10;
        width+=2;
        row+=30;
    ReleaseDC(pDC);//用GetDC获取的DC资源必须释放   
       }

    InvalidateRect(NULL, FALSE); //然后你就可以刷新客户区显示图形了。

    // TODO: Add your message handler code here and/or call default   
    CView::OnLButtonDown(nFlags, point);
}
2012-09-11 13:35
newdos
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:6
帖 子:251
专家分:1169
注 册:2012-8-13
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

运行结果如图,是你想要的?
2012-09-11 13:39
快速回复:MFC画笔的学习问题请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018304 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved