【发布时间】: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