C++ 从资源don'加载图像;t工作(C+;+;Dll)

C++ 从资源don'加载图像;t工作(C+;+;Dll),c++,dll,resources,icons,logitech,C++,Dll,Resources,Icons,Logitech,我正在为MusicBee编写一个Logitech插件。 唯一的问题是,我的作品,播放和暂停图像的图像不加载。 我已经测试了很多不同的方法来使用VS2012资源文件中的图像。但它们中没有一个起作用。我必须在dll文件中加载图像,并且图像必须是HICON或HBITMAP。 下面是我项目的全部课程。完整项目可在上找到 //这是我用来加载图像的代码。 playIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1)); playIcon

我正在为MusicBee编写一个Logitech插件。 唯一的问题是,我的作品,播放和暂停图像的图像不加载。 我已经测试了很多不同的方法来使用VS2012资源文件中的图像。但它们中没有一个起作用。我必须在dll文件中加载图像,并且图像必须是HICON或HBITMAP。 下面是我项目的全部课程。完整项目可在上找到

//这是我用来加载图像的代码。
playIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ICON1));
playIconHandle=m_lcd.AddIcon(playIcon,16,16);
m_lcd.SetOrigin(playIconHandle,2,2);
//-----------------------------------------------------------------
//罗技档案
//C++源- Logitech.cpp版本2012 V1.0
//-----------------------------------------------------------------
//-----------------------------------------------------------------
//包括文件
//-----------------------------------------------------------------
#包括“stdafx.h”
#包括“Logitech.h”
//-----------------------------------------------------------------
//罗技方法
//-----------------------------------------------------------------
//此LogitechObject是用于线程的Logitech类的实例
Logitech*Logitech::LogitechObject;
Logitech::Logitech():停止线程(false)、第一次(true)、位置(0)、持续时间(0)
{
LogitechObject=this;
}
罗技::~Logitech()
{
stopthread=true;
此->状态=状态播放::未定义;
timerThread.detach();
}
bool Logitech::getFirstTime()
{
第一次回来;
}
//初始化罗技液晶显示器
BOOL Logitech::OnInitDialog()
{
HRESULT hRes=m_lcd.Initialize(_T(“MusicBee”),LG_DUAL_模式,FALSE,TRUE);
如果(hRes!=S_OK)
{
返回FALSE;
}
m_lcd.SetAsForeground(真);
//创建主屏幕罗技彩色液晶显示器
if(m_lcd.IsDeviceAvailable(LG_颜色))
{
m_lcd.修改显示器(LG_颜色);
m_lcd.背景(RGB(245));
logo=m_lcd.AddText(LG_STATIC_TEXT,LG_BIG,DT_CENTER,LGLCD_QVGA_BMP_WIDTH);
m_lcd.SetOrigin(徽标,0,50);
m_lcd.SetText(logo,_T(“MusicBee”);
m_lcd.SetTextFontColor(徽标,RGB(0,0,0));
m_lcd.Update();
}
//创建主屏幕罗技单色LCD
else if(m_lcd.IsDeviceAvailable(LG_单色))
{
m_lcd.可修改显示器(LG_单色);
logo=m_lcd.AddText(LG_STATIC_TEXT,LG_BIG,DT_CENTER,LGLCD_BW_BMP_WIDTH);
m_lcd.SetOrigin(徽标,0,5);
m_lcd.SetText(logo,_T(“MusicBee”);
m_lcd.Update();
}
//起始线程
timerThread=thread(&Logitech::startThread);
return TRUE;//除非将焦点设置为控件,否则返回TRUE
}
//为罗技单色LCD创建播放屏幕
VOID Logitech::CreateNomonicle()
{
m_lcd.移除页面(0);
m_lcd.AddNewPage();
m_lcd.ShowPage(0);
如果(徽标!=0)
{
删除标志;
logo=0;
}
艺术家=m_lcd.AddText(LG_滚动_文本、LG_中等、DT_中心、LGLCD_BW_BMP_宽度);
m_lcd.SetOrigin(艺术家,0,0);
title=m_lcd.AddText(LG_滚动_文本、LG_媒体、DT_中心、LGLCD_BW_BMP_宽度);
m_lcd.SetOrigin(标题0,13);
progressbar=m_lcd.AddProgressBar(LG_填充);
m_lcd.SetProgressBarSize(progressbar,136,5);
m_lcd.SetOrigin(progressbar,12,38);
时间=m_lcd.AddText(LG_STATIC_TEXT,LG_SMALL,DT_LEFT,80);
m_lcd.SetOrigin(时间,12,29);
time1=m_lcd.AddText(LG_STATIC_TEXT,LG_SMALL,DT_LEFT,80);
m_lcd.SetOrigin(time1、125、29);
playIcon=static_cast(加载图像(GetModuleHandle(NULL)、MAKEINTRESOURCE(IDB_PNG2)、图像_位图、16、16、LR_单色);
playIconHandle=m_lcd.AddIcon(playIcon,16,16);
m_lcd.SetOrigin(playIconHandle,2,29);
第一次=错误;
更改艺人标题(此->艺人字符串,此->专辑字符串,此->标题串,此->持续时间,此->位置);
}
//为Logitech彩色LCD创建播放屏幕
VOID Logitech::createColor()
{
m_lcd.移除页面(0);
m_lcd.AddNewPage();
m_lcd.ShowPage(0);
如果(徽标!=0)
{
删除标志;
logo=0;
}
//LoadFromResource(NULL,AfxGetInstanceHandle(),IDB_G19; background,_T(“PNG”);
//HBITMAP bmpBkg_979;=background.GetHBITMAP();
//m_lcd.立根接地(bmpBkg_);
m_lcd.背景(RGB(184220240));
艺术家=m_lcd.AddText(LG_滚动_文本、LG_媒体、DT_中心、LGLCD_QVGA_BMP_宽度);
m_lcd.SetOrigin(艺术家,5,5);
m_lcd.SetTextFontColor(艺术家,RGB(0,0,0));
相册=m_lcd.AddText(LG_滚动_文本、LG_媒体、DT_中心、LGLCD_QVGA_BMP_宽度);
m_lcd.SetOrigin(相册,5,30);
m_lcd.SetTextFontColor(相册,RGB(0,0,0));
title=m_lcd.AddText(LG_滚动_文本、LG_媒体、DT_中心、LGLCD_QVGA_BMP_宽度);
m_lcd.SetOrigin(标题5,55);
m_lcd.SetTextFontColor(标题,RGB(0,0,0));
时间=m_lcd.AddText(LG_STATIC_TEXT,LG_SMALL,DT_LEFT,80);
m_lcd.SetOrigin(时间,5,80);
m_lcd.SetTextFontColor(时间,RGB(0,0,0));
time1=m_lcd.AddText(LG_STATIC_TEXT,LG_SMALL,DT_LEFT,40);
m_lcd.SetOrigin(time1,275,80);
m_lcd.SetTextFontColor(time1,RGB(0,0,0));
progressbar=m_lcd.AddProgressBar(LG_填充);//320×240像素彩色屏幕
m_lcd.SetProgressBarSize(progressbar,310,20);
m_lcd.SetProgressBarColor(progressbar,RGB(25,71,94),空);
m_lcd.SetOrigin(progressbar,5100);
/*playIcon=静态播放(LoadImage
//This is the code I have used for loading an image.
    playIcon = LoadIcon (GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1));
playIconHandle = m_lcd.AddIcon(playIcon, 16, 16);
m_lcd.SetOrigin(playIconHandle, 2, 2);



 //-----------------------------------------------------------------
    // Logitech File
    // C++ Source - Logitech.cpp - version 2012 v1.0
    //-----------------------------------------------------------------

    //-----------------------------------------------------------------
    // Include Files
    //-----------------------------------------------------------------
    #include "stdafx.h"
    #include "Logitech.h"

    //-----------------------------------------------------------------
    // Logitech methods
    //-----------------------------------------------------------------

    //This LogitechObject is a instance of the Logitech class for using in the thread
    Logitech * Logitech::LogitechObject;

    Logitech::Logitech():   stopthread(false), firstTime(true), position(0), duration(0)
    {
        LogitechObject = this;
    }

    Logitech::~Logitech()
    {
        stopthread = true;
        this->state = StatePlay::Undefined;
        timerThread.detach();
    }

    bool Logitech::getFirstTime()
    {
        return firstTime;
    }

    //Initialise Logitech LCD
    BOOL Logitech::OnInitDialog()
    {
        HRESULT hRes = m_lcd.Initialize(_T("MusicBee"), LG_DUAL_MODE, FALSE, TRUE);

        if (hRes != S_OK)
        {
            return FALSE;
        }

        m_lcd.SetAsForeground(true);

        //Create home screen Logitech Color LCD
        if(m_lcd.IsDeviceAvailable(LG_COLOR))
        {
            m_lcd.ModifyDisplay(LG_COLOR);
            m_lcd.SetBackground(RGB(245,245,245));
            logo = m_lcd.AddText(LG_STATIC_TEXT, LG_BIG, DT_CENTER, LGLCD_QVGA_BMP_WIDTH);
            m_lcd.SetOrigin(logo, 0, 50);
            m_lcd.SetText(logo, _T("MusicBee"));
            m_lcd.SetTextFontColor(logo, RGB(0,0,0));
            m_lcd.Update();
        }

        //Create home screen Logitech Monochrome LCD
        else if(m_lcd.IsDeviceAvailable(LG_MONOCHROME))
        {
            m_lcd.ModifyDisplay(LG_MONOCHROME);
            logo = m_lcd.AddText(LG_STATIC_TEXT, LG_BIG, DT_CENTER, LGLCD_BW_BMP_WIDTH);
            m_lcd.SetOrigin(logo, 0, 5);
            m_lcd.SetText(logo, _T("MusicBee"));
            m_lcd.Update();
        }

        //Start thread
        timerThread = thread(&Logitech::startThread);

        return TRUE;  // return TRUE  unless you set the focus to a control
    }

    //Create playing screen for Logitech Monochrome LCD
    VOID Logitech::createMonochrome()
    {
        m_lcd.RemovePage(0);
        m_lcd.AddNewPage();
        m_lcd.ShowPage(0);

        if (logo != 0)
        {
            delete logo;
            logo = 0;
        }

        artist = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, LGLCD_BW_BMP_WIDTH);
        m_lcd.SetOrigin(artist, 0, 0);

        title = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, LGLCD_BW_BMP_WIDTH);
        m_lcd.SetOrigin(title, 0, 13);

        progressbar = m_lcd.AddProgressBar(LG_FILLED);
        m_lcd.SetProgressBarSize(progressbar, 136, 5);
        m_lcd.SetOrigin(progressbar, 12, 38);

        time = m_lcd.AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 80);
        m_lcd.SetOrigin(time, 12, 29);

        time1 = m_lcd.AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 80);
        m_lcd.SetOrigin(time1, 125, 29);

        playIcon = static_cast<HICON>(LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_PNG2), IMAGE_BITMAP, 16, 16, LR_MONOCHROME));
        playIconHandle = m_lcd.AddIcon(playIcon, 16, 16);
        m_lcd.SetOrigin(playIconHandle, 2, 29);

        firstTime = false;
        changeArtistTitle(this->artistString, this->albumString, this->titleString, this->duration, this->position);
    }

    //Create playing screen for Logitech Color LCD
    VOID Logitech::createColor()
    {
        m_lcd.RemovePage(0);
        m_lcd.AddNewPage();
        m_lcd.ShowPage(0);

        if (logo != 0)
        {
            delete logo;
            logo = 0;
        }

        //background.LoadFromResource(NULL, AfxGetInstanceHandle(), IDB_G19BACKGROUND, _T("PNG"));
        //HBITMAP bmpBkg_ = background.GetHBITMAP();
        //m_lcd.SetBackground(bmpBkg_);

        m_lcd.SetBackground(RGB(184,220,240));

        artist = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, LGLCD_QVGA_BMP_WIDTH);
        m_lcd.SetOrigin(artist, 5, 5);
        m_lcd.SetTextFontColor(artist, RGB(0,0,0));

        album = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, LGLCD_QVGA_BMP_WIDTH);
        m_lcd.SetOrigin(album, 5, 30);
        m_lcd.SetTextFontColor(album, RGB(0,0,0));

        title = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, LGLCD_QVGA_BMP_WIDTH);
        m_lcd.SetOrigin(title, 5, 55);
        m_lcd.SetTextFontColor(title, RGB(0,0,0));

        time = m_lcd.AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 80);
        m_lcd.SetOrigin(time, 5, 80);
        m_lcd.SetTextFontColor(time, RGB(0,0,0));

        time1 = m_lcd.AddText(LG_STATIC_TEXT, LG_SMALL, DT_LEFT, 40);
        m_lcd.SetOrigin(time1, 275, 80);
        m_lcd.SetTextFontColor(time1, RGB(0,0,0));

        progressbar = m_lcd.AddProgressBar(LG_FILLED);//320×240 pixel color screen
        m_lcd.SetProgressBarSize(progressbar, 310, 20);
        m_lcd.SetProgressBarColors(progressbar, RGB(25,71,94),NULL);
        m_lcd.SetOrigin(progressbar, 5, 100);

        /*playIcon = static_cast<HICON>(LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_PNG1), IMAGE_ICON, 16, 16, LR_COLOR));
        playIconHandle = m_lcd.AddIcon(playIcon, 16, 16);
        m_lcd.SetOrigin(playIconHandle, 5, 29);*/

        firstTime = false;
        changeArtistTitle(this->artistString, this->albumString, this->titleString, this->duration, this->position);
    }

    void Logitech::startThread()
    {
        while(!LogitechObject->stopthread)
        {
            this_thread::sleep_for( chrono::milliseconds(500) );

            if(!LogitechObject->stopthread && LogitechObject->progressbar != NULL)
            {
                //Update progressbar and position time on the screen after 1 second of music.
                if(LogitechObject->state == StatePlay::Playing)
                {
                    this_thread::sleep_for( chrono::milliseconds(500) );
                    LogitechObject->position++;
                    float progresstime = ((float)LogitechObject->position / (float)LogitechObject->duration)*100;
                    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, static_cast<FLOAT>(progresstime));
                    LogitechObject->m_lcd.SetText(LogitechObject->time, LogitechObject->getTimeString(LogitechObject->position).c_str());
                }

                //If music stopped then the progressbar and time must stop immediately
                else if(LogitechObject->state == StatePlay::Stopped)
                {
                    LogitechObject->position = 0;
                    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 0);
                    LogitechObject->m_lcd.SetText(LogitechObject->time, LogitechObject->getTimeString(LogitechObject->position).c_str());
                }

                LogitechObject->m_lcd.Update();
            }
        }
    }

    void Logitech::changeArtistTitle(wstring artistStr, wstring albumStr, wstring titleStr, int duration, int position)
    {
        this->artistString = artistStr;
        this->albumString = albumStr;
        this->titleString = titleStr;
        this->durationString = getTimeString(duration/1000);
        this->position = position;
        this->duration = duration/1000;

        if(!firstTime)
        {
            if(m_lcd.IsDeviceAvailable(LG_COLOR))
            {
                m_lcd.SetText(album, albumStr.c_str());
            }


            m_lcd.SetText(artist, artistStr.c_str());
            m_lcd.SetText(title, titleStr.c_str());
            m_lcd.SetText(time, getTimeString(position).c_str());

            string s( durationString.begin(), durationString.end() );

            if(s.size() < 5)
            {
                s = "0" + s;
            }

            wstring ws( s.begin(), s.end() );

            m_lcd.SetText(time1, ws.c_str());
            ws.clear();

            ///*playIcon = static_cast<HICON>(LoadImage(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_PNG1), IMAGE_ICON, 16, 16, LR_COLOR));
            //playIconHandle = m_lcd.AddIcon(playIcon, 16, 16);
            //m_lcd.SetOrigin(playIconHandle, 5, 29);*/

            m_lcd.Update();

            artistStr.clear();
            albumStr.clear();
            titleStr.clear();

        }
    }

    //Set current playing position
    void Logitech::setPosition(int pos)
    {
        this->position = pos/1000;
        m_lcd.SetText(time, getTimeString(this->position).c_str());
        m_lcd.Update();
    }

    void Logitech::setDuration(int duration)
    {
        this->duration = duration/1000;
        m_lcd.SetText(time1, getTimeString(this->duration).c_str());
        m_lcd.Update();
    }

    //Change play state of the current playing song
    void Logitech::changeState(StatePlay state)
    {
        this->state = state;

        if(state == StatePlay::Playing && firstTime)
        {
            if(m_lcd.IsDeviceAvailable(LG_COLOR))
            {
                createColor();
            }

            else if(m_lcd.IsDeviceAvailable(LG_MONOCHROME))
            {
                createMonochrome();
            }
        }
    }


    //Change int of time to string
    wstring Logitech::getTimeString(int time)
    {
        string minutes = to_string((int)time /60);
        string seconds = to_string((int)time%60);

        if(minutes.size() < 2)
        {
            minutes = "0" + minutes;
        }

        if(seconds.size() < 2)
        {
            seconds = "0" + seconds;
        }

        string timeString = minutes + ":" + seconds;

        return wstring( timeString.begin(), timeString.end() );
    }
  LoadImage(GetModuleHandle(NULL), ...)