【问题标题】:Progress bar not updating in Win32Win32中进度条不更新
【发布时间】:2013-08-28 13:16:42
【问题描述】:

我在 Win32 中创建了一个进度条,当我在发布配置中构建应用程序时它不会更新,但在调试配置中工作。进度条创建如下:

progBar= CreateWindowEx(0,PROGRESS_CLASS,NULL,WS_CHILD | WS_VISIBLE|PBS_SMOOTH,rc.right/2-130,rc.bottom/2, 260, 17,hWnd, NULL, hInst, NULL);

        //Sets the range of progress bar
        SendMessage(progBar, PBM_SETRANGE, 0, MAKELPARAM(0,10));    //0->min value; 10->max value
        SetTimer(hWnd, TIMER_1, 1000, TimerProc);                   //set the timer

而我的 TimerProc 是:

void CALLBACK TimerProc(HWND hWnd, UINT msg, UINT idEvent, DWORD dwTime)
{

switch(msg)
{
    case WM_TIMER:
    {
        SendMessage(progBar, PBM_SETPOS,stepValue,0);       //stepValue
        InvalidateRect(progBar,NULL,TRUE);

        if(stepValue>9)
        {
            stepValue=0;
        }

        else
        {
            stepValue++;
        }
    }
  }
  return;
}

我正在使用 Visual Studio 2010。我是否可能缺少一些库,因为它在调试配置中工作。我选择的运行时库是多线程(/MT)

【问题讨论】:

  • 尝试调试发布配置。从这里的代码我只能想到未初始化的 stepValue 变量,但调试器可以告诉你更多。
  • 删除 InvalidateRect() 调用并确保 stepValue 已初始化。使用调试器。只是不要这样做,PBM_SETMARQUEE 消息已经支持这一点。
  • WM_TIMER 消息的优先级较低。它们仅在消息队列为空时生成。您是否已验证 WM_TIMER 消息是在发布版本中创建的?
  • 是的,我正在获取 wm_timer 测量值。我保留了断点,并且 stepvalue 也增加了。@hans:我已经将 stepvalue 初始化为 0。但是相同的代码如何适用于调试构建?这曾经完美地工作过,不知道我之间有什么变化

标签: visual-studio-2010 winapi visual-c++ timer


【解决方案1】:

根据 Hans 的说法,我尝试了 Marquee 风格的进度条,并且效果很好。代码更改如下:

        progBar= CreateWindowEx(0,PROGRESS_CLASS,NULL,WS_CHILD | WS_VISIBLE|PBS_MARQUEE,rc.right/2-130,rc.bottom/2, 260, 17,hWnd, NULL, hInst, NULL);

        SendMessage(progBar, PBM_SETMARQUEE,TRUE,50); 

我删除了 SetRange 语句。根据此链接

http://social.msdn.microsoft.com/Forums/vstudio/en-US/407cf8d0-02cc-4276-adb1-3fc619ce4f3a/progress-bar-with-marquee-style

我必须添加

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 

否则 Marquee 进度条将不起作用。有人可以解释一下吗?但这也适用于发布版本。

【讨论】:

    猜你喜欢
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多