Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 9030741
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 16, 20262026-06-16T07:33:55+00:00 2026-06-16T07:33:55+00:00

I have a problem with the Logitech LCD SDK. Everything works but 2 simple

  • 0

I have a problem with the Logitech LCD SDK. Everything works but 2 simple things don’t work. First I can’t get the progressbar to work. I update every second the value of the progressbar and i update the screen. Nothing happend. I have tested the values from 0 to 100 and from 0 to 1 with no differents.

Second problem is the images in VS2012. I can’t load images in a c++ Dll.
The code below is my Logitech class with all the data for the screen.
The full source can be found at BitBucket.

I hope somebody can help me with it?

EDIT: The problem lies in the progressbar. The code for all the rest works eg. It draws everything on the logitech LCD screen, even the progressbar, times, … But the real problem lies in the progressbar’s progress. This meens the bar background draws perfect, but the progressbar doesnt move, it seems to have fixed at around 15% progress. Normaly the progress must be linked at the time of the music eg if the musicfile is 3 minutes that means that 180 seconds must transend as 100% progress. But this doesnt work!

  //-----------------------------------------------------------------
// 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;
    }

    //Create home screen Logitech Color LCD
    if(m_lcd.IsDeviceAvailable(LG_COLOR))
    {
        m_lcd.ModifyDisplay(LG_COLOR);
        logo = m_lcd.AddText(LG_STATIC_TEXT, LG_BIG, DT_CENTER, LGLCD_BW_BMP_WIDTH);
        m_lcd.SetOrigin(logo, 0, 50);
        m_lcd.SetText(logo, _T("MusicBee"));
        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->durationString, 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;
    }

    artist = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, 320);
    m_lcd.SetOrigin(artist, 5, 5);

    album = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, 320);
    m_lcd.SetOrigin(album, 5, 30);

    title = m_lcd.AddText(LG_SCROLLING_TEXT, LG_MEDIUM, DT_CENTER, 320);
    m_lcd.SetOrigin(title, 5, 55);

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

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

    progressbar = m_lcd.AddProgressBar(LG_DOT_CURSOR);//320×240 pixel color screen
    m_lcd.SetProgressBarSize(progressbar, 310, 15);
    m_lcd.SetOrigin(progressbar, 5, 100);

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

    /*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->durationString, 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++;

                LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, static_cast<FLOAT>(((float)LogitechObject->position / LogitechObject->duration)*100));
                LogitechObject->m_lcd.SetText(LogitechObject->time, LogitechObject->getPositionString().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->getPositionString().c_str());
            }

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

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

    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, getPositionString().c_str());

        string s( duration.begin(), duration.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();
        duration.clear();
    }
}

//Set current playing position
void Logitech::setPosition(int pos)
{
    this->position = pos/1000;
    m_lcd.SetText(time, getPositionString().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();
        }
    }
}

//Gets the music duration
int Logitech::getDuration(wstring duration)
{
    string s( duration.begin(), duration.end() );

    int position = s.find(":");
    string minutes = s.substr(0, s.size() -position);
    string seconds = s.substr(position);
    int minutesInt = atoi(minutes.c_str());
    int secondsInt = atoi(seconds.c_str());

    return (minutesInt *60) + secondsInt;
}

//Change current position in string
wstring Logitech::getPositionString()
{
    string minutes = to_string((int)position /60);
    string seconds = to_string((int)position%60);

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

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

    string time = minutes + ":" + seconds;

    return wstring( time.begin(), time.end() );
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-16T07:33:56+00:00Added an answer on June 16, 2026 at 7:33 am

    Before you go trying to figure out what’s wrong with your code, you should verify that the SDK operates as you expect it to.

    Please add this code at the top of your Logitech::startThread() and let me know what happens:

    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST SEQUENCE");
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 0%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 0);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 10%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 10);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 20%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 20);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 30%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 30);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 40%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 40);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 50%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 50);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 60%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 60);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 70%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 70);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 80%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 80);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 90%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 90);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST 100%");
    LogitechObject->m_lcd.SetProgressBarPosition(LogitechObject->progressbar, 100);
    this_thread::sleep_for( chrono::milliseconds(2000) );
    LogitechObject->m_lcd.SetText(LogitechObject->time, "ProgressBar TEST COMPLETE");
    this_thread::sleep_for( chrono::milliseconds(2000) );
    

    Ideally it would set the progress bar to each percentage for two seconds at a time, allowing you to verify that the progress bar operates as you expect it to. If this doesn’t work, there’s not much point in trying to figure out what’s wrong with your own code; either somethings’s wrong with the SDK or else your understanding of its control parameters does not match the SDK’s requirements.

    Let me know your results.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have problem with spacing between images. I've tried everything but in firefox /
I have problem to make work a resource file. This is my simple code
I have problem with passing variables through views. But, first some code // i
I have problem SIMILAR to preventing form data reposting, but not quite the same
I have problem with my code. I don't know what am I doing wrong.
I have problem. I have this code, and I can`t add session. This is
I have problem with my own Subversion repository. It worked yesterday. But I received
Have problem with linq expressions. I want to get from db some data ordered
I have problem in my xampp server php file not work if I write
I have problem with chrome.extension and jQuery Post. I want post some data (get

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.