游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4781|回复: 6

GDI编程问题,高手赐教

[复制链接]

10

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2003-8-21 17:02:00 | 显示全部楼层 |阅读模式
想在客户区画一个网格,用LineTo函数,测试时发现多移动几次就会出现重绘错误,被
遮挡的部分不再重画网格而只显示背景,愁死我也!望高手赐教!谢谢
[em4]  [em7]

1

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2003-8-21 17:06:00 | 显示全部楼层

Re:GDI编程问题,高手赐教

你画网格的程序应该写WM_PAINT消息所对应的函数中
[em23]

10

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2003-8-21 20:56:00 | 显示全部楼层

Re:GDI编程问题,高手赐教

我正是这样做的呀,下面是WM_PAINT消息下画竖线的程序,请指正:(各变量已定义)
case WM_PAINT:
        BeginPaint(hWnd,&ps);
        nMapMode=SetMapMode(ps.hdc,MM_LOENGLISH);
        hOldPen=SelectObject(ps.hdc,hPenB);
        GetClientRect(hWnd,&rect);
        DPtoLP(ps.hdc,(LPPOINT)&rect,2);
        for (i=0;i<rect.right;i+=10){
                MoveToEx(ps.hdc,i,0,(LPPOINT) NULL);
                LineTo(ps.hdc,i,rect.bottom);
        }
        SelectObject(ps.hdc,hOldPen);
        SetMapMode(ps.hdc,nMapMode);
        EndPaint(hWnd,&ps);
break;

2

主题

9

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2003-8-21 23:55:00 | 显示全部楼层

Re: GDI编程问题,高手赐教

1. 创建一个全局内存DC
2. 在内存DC上以LineTo画你的网格
3. 用InvalidateRect()强制WINDOWS重绘客户区
4. 在WM_PAINT中用 BitBlt()将内存DC绘在窗口DC上
5. 你的这个问题搞定,而且绝对不会出现闪烁,为何?原因无他,唯双缓冲技术耳....

10

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2003-8-22 01:19:00 | 显示全部楼层

Re:GDI编程问题,高手赐教

听君五言,胜读50年书!!!
多谢多谢!!

10

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2003-8-22 16:50:00 | 显示全部楼层

Re:GDI编程问题,高手赐教

sujianlin大哥,能写个示例代码吗?我按你的方法写的代码编绎没有问题,却什么也画不出来,不知是怎么回事,求求你了

10

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
 楼主| 发表于 2003-8-22 17:49:00 | 显示全部楼层

Re:GDI编程问题,高手赐教

哈哈,问题终于解决了,原来还得建个位图选进内存DC中,谢谢了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-11-22 05:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表