2015-08-11 2 views
2

Я пытаюсь добавить изображения в ImageList на панели инструментов, которая является членом CMainFrameМФЦ: доступ к CImageList CMainFrame от ChildView

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)); 

то мне нужно открыть ImageList из childview. Я пытаюсь сделать с ним, как этот

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

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

Но те изображения, которые я добавил в методе мэйнфрейма теперь отсутствуют. Как решить этот вопрос?

+0

Если вам нужен список изображений в дочернем, создайте его в этом классе. Плохой дизайн - доступ к таким членам по классам. – xMRi

ответ

1

Я предполагаю, что ваш CBitmapstartStopPicture - это локальная переменная, так как вы не указали иначе или не предшествовали имени переменной с любым классом-идентификатором. Затем вы пытаетесь сохранить через 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.

+0

То, что мне нужно :) thanx! – goodking

Смежные вопросы