我想自己创建一个自定义画刷,为什么下面的代码不对呢,大家改一下,不用现成的位图

sulong1234 2006-04-20 02:28:01
BITMAP bitmap;
COLORREF PATTEN[8][8]={
RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(255,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(255,0 ,0 )};
bitmap.bmType = 19778;

bitmap.bmWidth = 8;
bitmap.bmHeight = 8;
bitmap.bmWidthBytes = 8;
bitmap.bmPlanes = 1;
bitmap.bmBitsPixel = 24;
bitmap.bmBits = (LPVOID)PATTEN;
HBITMAP hb = CreateBitmapIndirect(&bitmap);

HDC dc = GetDC(hwnd);

//HBRUSH hr= CreateSolidBrush(RGB(255,0,0));//CreatePatternBrush(hb);
SelectObject(dc, CreateSolidBrush(RGB(255,0,0)));
Rectangle(dc, 0, 0, 300, 300);
HBRUSH hr= CreatePatternBrush(hb);
HGDIOBJ gdi = SelectObject(dc, hr);
Rectangle(dc, 300, 300, 600, 600);
...全文
255 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2006-04-26
  • 打赏
  • 举报
回复
我这个代码是在对话框中试验过的,绝对没有问题。请仔细再检查一下。
sulong1234 2006-04-24
  • 打赏
  • 举报
回复
楼上的,你看到的是什么结果????
我看到的是白色的画刷填充的,而不是我自已定义的刷
菜牛 2006-04-24
  • 打赏
  • 举报
回复
黑地绿色斜线
菜牛 2006-04-21
  • 打赏
  • 举报
回复
CPaintDC dc(this)
COLORREF pBits[8][8]={
RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,255,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(255,0 ,0 ), RGB(0 ,0 ,0 ),
RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(0 ,0 ,0 ), RGB(255,0 ,0 )};
BITMAP bitmap = {0};
bitmap.bmType = 0;
bitmap.bmWidth = 8;
bitmap.bmHeight = 8;
bitmap.bmWidthBytes = 8 * sizeof(COLORREF);
bitmap.bmPlanes = 1;
bitmap.bmBitsPixel = 32;
bitmap.bmBits = (LPVOID)pBits;

HBITMAP ht = ::CreateBitmapIndirect(&bitmap);
if (ht)
{
HBRUSH hbr = ::CreatePatternBrush(ht);
HBRUSH hbrOld = (HBRUSH)dc.SelectObject(hbr);
dc.Rectangle(0, 0, 100, 100);
dc.SelectObject(hbrOld);
::DeleteObject(hbr);
::DeleteObject(ht);
}
这是在对话框中OnPaint()里试的,完全可以
对了,注意:
bmType
Specifies the bitmap type. This member must be zero.
sulong1234 2006-04-21
  • 打赏
  • 举报
回复
按上面的说明还是不对,画刷是一个白的
xing_xing_xing 2006-04-20
  • 打赏
  • 举报
回复
CreateBitmapIndirect创建设备无关位图
如果是当前颜色深度是24位
bitmap.bmWidthBytes = 8 * 3;
如果是16位
bitmap.bmWidthBytes = 8 * 2;
bitmap.bmBitsPixel = 16;
32位就是楼上的

要通用可以使用CreateDIBitmap
菜牛 2006-04-20
  • 打赏
  • 举报
回复
bitmap.bmWidthBytes = 8; ==> 8 * sizeof(COLORREF)

bitmap.bmBitsPixel = 24; ==> 32
ripyu 2006-04-20
  • 打赏
  • 举报
回复
HDC dc = GetDC(hwnd);//能得到么?得不到后面得操作就是全部免谈

16,550

社区成员

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

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

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