MFC:从ChildView访问CMainFrame的CImageList

时间:2015-08-11 19:12:11

标签: c++ mfc

我正在尝试将图像添加到工具栏的图像列表中,这是CMainFrame

的成员
startStopPicture.LoadBitmapW(IDB_STOP_PIC);
m_ToolBar.GetToolBarCtrl().GetImageList()->Add(&startStopPicture, reinterpret_cast<CBitmap*>(NULL)); 

startStopPicture.DeleteObject();

startStopPicture.LoadBitmapW(IDB_START_PIC);
m_ToolBar.GetToolBarCtrl().GetImageList()->Add(&startStopPicture, reinterpret_cast<CBitmap*>(NULL)); 

然后我需要从子视图访问此图像列表。我正在尝试这样做

CMainFrame* mainFrame = dynamic_cast<CMainFrame*>(GetParentFrame());

CImageList* imList = mainFrame->m_ToolBar.GetToolBarCtrl().GetImageList();

但是我在大型机方法中添加的那些图像现在不存在了。如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我假设你的CBitmap startStopPicture是一个局部变量,因为你没有提到或在变量名之前加上任何类like-identifier。之后,您尝试通过引用存储CImageList::Add 本地变量。

您需要做的是分配CBitmap - new CBitmap或将startStopPicture变量作为成员添加到您的班级。

如果您选择分配变量而不必跟踪CBitmap,则可以使用std::vector<std::unique_ptr<CBitmap> >作为类成员。

如果您在CBitmap中存储了本地变量CImageList,则不会显示该图片。

示例:

//class declaration
private:
    std::vector<std::unique_ptr<CBitmap> > m_vLoadedBitmaps;
};

void CMyCtrl::SetBitmaps(CImageList &imgList)
{
    CBitmap *bmpDelete = new CBitmap();
    bmpDelete->LoadBitmapW(IDB_DELETE);
    m_vLoadedBitmaps.push_back(std::unique_ptr<CBitmap>(bmpDelete));

    imgList.Add(bmpDelete, static_cast<CBitmap*>(NULL));
}

另外,我建议在变量的所有者类中加载图像。如果需要,还有SendMessage