彻底被打败了。。。

枫桦沐阳 2011-03-15 11:09:51
我想创建一个拖拽效果的位图,但总是现实灰黑色,不知道什么原因。各位高手帮看一下。

CDC *orgDC = this->GetDC();
CDC memDC;

memDC.CreateCompatibleDC(orgDC);

CBitmap *bmpTemp = new CBitmap();

bmpTemp->CreateCompatibleBitmap(orgDC, width, heigth);

memDC.SelectObject(bmpTemp);

memDC.FillSolidRect(CRect(0, 0, width, heigth), RGB(255, 0, 0));

CImagelist *dragImage = new CImagelist();

dragImage->Create(width, heigth, ILC_COLOR4 | ILC_MASK, 0, 1);

dragImage->Add(bmpTemp, RGB(0, 0, 0));

dragImage->BeginDrag(参数省略);

dragImage->DragEnter(参数省略);
...全文
202 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫桦沐阳 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jwybobo2007 的回复:]
memDC.FillSolidRect(CRect(0, 0, width, heigth), RGB(255, 0, 0));
这里执行完后,你绘制出来,看是否为灰度图
[/Quote]

不是,我直接bitblt到画面上,是彩图。
jwybobo2007 2011-03-15
  • 打赏
  • 举报
回复
memDC.FillSolidRect(CRect(0, 0, width, heigth), RGB(255, 0, 0));
这里执行完后,你绘制出来,看是否为灰度图
枫桦沐阳 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tandyt 的回复:]
在上面的绘制图片列表里的图片时,ImageList.Draw()的最后一个参数,不能为ILD_MASK,否则就是显示全黑色了。
[/Quote]

非常感谢。不过我不用ImageList.Draw()方法。我用ImageList.BeginDrag方法。
如果是你的代码,.Draw()直接换成.BeginDrag()是好用的。
但我现在不用LoadBitMap,要自绘一个位图,就不好用了。
TandyT 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ynb119 的回复:]
引用 3 楼 tandyt 的回复:
你这个拖拽什么的啊?什么时候要这个效果图啊?拖拽界面?拖拽图标?


自己制作的控件。这个并不重要吧,关键是怎么制作这个位图。

loadbitmap好用,自绘的就不好使。。。

真是郁闷
[/Quote]

你是在资源视图里自绘的BITMAP 资源么?这和从资源里 LoadBitmap 不是一样的么?
TandyT 2011-03-15
  • 打赏
  • 举报
回复
不知道你是怎么显示的、、、、、、、

一个简单的例子:


CImageList ImageList;
ImageList.Create(32, 32, ILC_COLOR24|ILC_MASK, 3, 1);
CBitmap Bmp;
Bmp.LoadBitmap(IDB_XXXX);
ImageList.Add(&Bmp, RGB(255,0,0));

....

//在pDC的(0,0)位置画第1个Image,将是以透明方式画
ImageList.Draw(&pDC, 0, CPoint(0,0), NULL);



在上面的绘制图片列表里的图片时,ImageList.Draw()的最后一个参数,不能为ILD_MASK,否则就是显示全黑色了。
枫桦沐阳 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tandyt 的回复:]
你这个拖拽什么的啊?什么时候要这个效果图啊?拖拽界面?拖拽图标?
[/Quote]

自己制作的控件。这个并不重要吧,关键是怎么制作这个位图。

loadbitmap好用,自绘的就不好使。。。

真是郁闷
TandyT 2011-03-15
  • 打赏
  • 举报
回复
你这个拖拽什么的啊?什么时候要这个效果图啊?拖拽界面?拖拽图标?
枫桦沐阳 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 m_tornado 的回复:]
ILC_COLOR4 (0x00000004)
Use a 4-bit (16-color) device-independent bitmap (DIB) section as the bitmap for the image list.

16色是不是都灰色的?改成ILC_COLOR24看看?
[/Quote]

16, 24, 32都用过了,还是不行。。
m_tornado 2011-03-15
  • 打赏
  • 举报
回复
ILC_COLOR4 (0x00000004)
Use a 4-bit (16-color) device-independent bitmap (DIB) section as the bitmap for the image list.

16色是不是都灰色的?改成ILC_COLOR24看看?
向立天 2011-03-15
  • 打赏
  • 举报
回复
枫桦沐阳 2011-03-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wwgddx 的回复:]
memDC.FillSolidRect(CRect(0, 0, width, heigth), RGB(255, 0, 0));
//加上这一句
bitblt(orgDC,memDC);//参数部分省略
CImagelist *dragImage = new CImagelist();
[/Quote]

谢谢。

但那不就是表示在画面上了么?表示是没有问题的,关键是后边的CImagelist里不好用。
wwgddx 2011-03-15
  • 打赏
  • 举报
回复
memDC.FillSolidRect(CRect(0, 0, width, heigth), RGB(255, 0, 0));
//加上这一句
bitblt(orgDC,memDC);//参数部分省略

CImagelist *dragImage = new CImagelist();
枫桦沐阳 2011-03-15
  • 打赏
  • 举报
回复
没人知道么?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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