关于自绘,如何一行一行的自绘界面?

shen_wei 2010-01-11 02:17:24
就是一个扫描行,一行一行的自绘按钮等控件,如何实现?

这个是自绘是在单文档(SDI)中的view类显示界面的,包括背景,按钮,等控件。
就是扫描图片内容,保存像素内容,然后再一行一行的自绘到界面上。

while ( iHeight > 0 ) //272 一行一行的绘画
{
for ( i = 0, j = iStartX; i < iWidth; i++, j += iIncX ) //iWidth=480,iStartX=0;
{
if ( ( byBkMode == OPAQUE ) ||
( byBkMode == TRANSPARENT && pwSrcAddr[i] != 0xFFFF ) ||
( byBkMode == TRANSPARENT2 && hdcDst->crBitmapColors[pwSrcAddr[i]] != 0 ) )
{
pwDstAddr[j] = pwSrcAddr[i];
}
}

// Go to next scan line
pwDstAddr += iDstLength;
pwSrcAddr += iSrcLength;
iHeight--;
}


这个就是一行一行进行绘制的 应该怎么实现?有什么思路来实现?
谢谢高手指点!!

...全文
121 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
av007007 2010-01-11
  • 打赏
  • 举报
回复
up
shen_wei 2010-01-11
  • 打赏
  • 举报
回复
以上的思路都是这样,谁有这方面的例子,给个链接 谢谢了!!
ringphone 2010-01-11
  • 打赏
  • 举报
回复
这个的作用是处理透明图片的,比如判断里第2行:
byBkMode == TRANSPARENT && pwSrcAddr[i] != 0xFFFF

意思是当byBkMode == TRANSPARENT且图象的像素颜色不是0xFFFF时才绘制,那么原图中0xFFFF的颜色就不会绘制,假如图片的背景是0xFFFF这个颜色,那么就不会绘制背景,从而实现了图片的透明绘制。
mmilmf 2010-01-11
  • 打赏
  • 举报
回复
我们都知道控件也是窗体。包括按钮,静态控件等。
如果你会在对话框上,布局控件,显示文本,绘制图片等
那么绘制控件的话也就不那么难了。
在绘制的时候将其看成是对话框就可以了
当是也不完全是这样的。

每个类自绘需要处理的消息还略有不同,这些需要针对不同类
查MSDN,在MSDN上对于这部分都有讲解的。

其实个人觉得,上来就看别人写自绘的功能较全的程序。倒不好
这样对于没有自绘经验的人来说,看起来比较困难。

可以从简单的开始,功能可以不断地完善起来的。
lz可以试着写个自绘的按钮,静态控件等,
向立天 2010-01-11
  • 打赏
  • 举报
回复
因为背景的单位是像素
而图像的单位也是像素
所以获取到你要填充的背景的宽和高
你就知道了你要填充多少个像素了
高是多少就是多少行
宽是多少就是多少例
用两个for循环就可以遍历所有的像素
然后每个像素想设置成什么颜色就是你自己决定了
zengdezhi 2010-01-11
  • 打赏
  • 举报
回复
UP
shen_wei 2010-01-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xianglitian 的回复:]
你这不都写出来了么?
再说为什么要这么做呢?
[/Quote]
这个是别人的,不是很理解,请教下这样做的思路。

向立天 2010-01-11
  • 打赏
  • 举报
回复
你这不都写出来了么?
再说为什么要这么做呢?

15,979

社区成员

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

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