// 画刷初始化 CBitmap bodybmp, headbmp, beanbmp, bgbmp; bgbmp.LoadBitmapW(IDB_BITMAP1); beanbmp.LoadBitmapW(IDB_BITMAP4); bodybmp.LoadBitmapW(IDB_BITMAP2); headbmp.LoadBitmapW(IDB_BITMAP3); m_brush[0].CreatePatternBrush(&bodybmp); m_brush[1].CreatePatternBrush(&headbmp); m_brush[2].CreatePatternBrush(&beanbmp); m_brush[3].CreatePatternBrush(&bgbmp);
时间: 2024-04-02 08:34:14 浏览: 170
这是一个 MFC 程序中的对话框类的成员函数,用于初始化画刷(brush)。首先创建四个 CBitmap 对象 bodybmp、headbmp、beanbmp 和 bgbmp,并分别调用 LoadBitmapW() 函数加载位图资源。然后分别创建四个画刷对象 m_brush[0]、m_brush[1]、m_brush[2] 和 m_brush[3],并分别调用 CreatePatternBrush() 函数将位图对象作为参数初始化画刷对象。其中,m_brush[0] 和 m_brush[1] 分别用于绘制蛇的身体和头部,m_brush[2] 用于绘制豆子,m_brush[3] 用于绘制背景。可以根据实际需要更改参数,加载不同的位图资源,创建不同类型的画刷对象。
相关问题
bmpMain.LoadBitmapW(IDB_MAIN_BG);
这是一个 Windows SDK 中的函数调用,用于加载一个位图资源。其中,bmpMain 是一个 CBitmap 类型的对象,LoadBitmapW 是该类的一个成员函数,IDB_MAIN_BG 是位图资源的 ID。
具体实现过程为:通过该函数,将位图资源 IDB_MAIN_BG 加载到 bmpMain 对象中,以便后续在程序中使用。
if (!strpointmap.empty()) if (strpointmap[n].Find(L"png") != -1 || strpointmap[n].Find(L"PNG") != -1) { image.Load(strpointmap[n]); CDC* pDialogDC = GetDC(); CRect mrect; CPen pen(PS_SOLID, 3, RGB(200, 200, 200)); CBrush pbrush; pbrush.CreateSolidBrush(RGB(200, 200, 200)); pDialogDC->SelectObject(&pen); pDialogDC->SelectObject(&pbrush); pDialogDC->Rectangle(rectPicture); int mleft = move_x[changenum]; int mright = change_x[changenum] + image.GetWidth(); int mtop = move_y[changenum]; int mbottom = change_y[changenum] + image.GetHeight(); int width = (int)(image.GetWidth() * nScalePercent / 100.0f); int height = (int)(image.GetHeight() * nScalePercent / 100.0f); CBitmap bitmap; bitmap.CreateBitmap(width, height, image.GetBPP(), 1, NULL); CDC* pDC = m_pictureCtrl.GetDC(); CDC memDC; memDC.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = memDC.SelectObject(&bitmap); memDC.SetStretchBltMode(COLORONCOLOR); image.StretchBlt(memDC.GetSafeHdc(), 0, 0, width, height, SRCCOPY); memDC.SelectObject(pOldBitmap); m_pictureCtrl.SetBitmap(bitmap.Detach()); m_nScalePercent = nScalePercent;代码中有错误HGDIOBJ" 类型的实参与 "HBITMAP" 类型的形参不兼容,而且在CBitmap* pOldBitmap = memDC.SelectObject(bitmap);中memDC"HGDIOBJ" 类型的值不能用于初始化 "CBitmap *" 类型的实体
这段代码中的错误是将一个 HGDIOBJ 类型的对象作为参数传递给了一个需要 HBITMAP 类型对象的函数。具体来说,是在以下代码中出现的问题:
```C++
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
```
应该将其改为:
```C++
CBitmap* pOldBitmap = memDC.SelectObject(bitmap);
```
另外,在以下代码中,应该将 memDC 的类型从 CDC 改为 CMemDC,以避免内存泄漏:
```C++
CDC memDC;
```
改为:
```C++
CMemDC memDC(pDC, &bitmap);
```
阅读全文