c++ - PBS_MARQUEE Progressbar WinApi

标签 c++ winapi progress-bar

我正在尝试让 PBS_MARQUEE 类型的进度条正常工作。 我可以创建进度条,但我无法让它移动。

如果找到这个,但我不清楚我必须做什么:

“事实证明,由于我将进度条作为资源而不是使用 CreateWindowEx(..),我不得不使用 SetWindowLongPtr(..) 来为此控件设置 PBS_MARQUEE 样式...”

我是这样创建进度条的:

   hwndPB = CreateWindowEx(0, PROGRESS_CLASS,
                            (LPSTR)NULL, WS_CHILD | WS_VISIBLE | PBS_MARQUEE ,
                            rcClient.left,
                            rcClient.bottom - cyVScroll,
                            rcClient.right, cyVScroll,
                            hwnd, (HMENU) 0, NULL, NULL);

然后我试着让它工作:

    SetWindowLongPtr(hwndPB,GWL_STYLE,PBS_MARQUEE);
    SendMessage(hwndPB,(UINT) PBM_SETMARQUEE,(WPARAM) 1,(LPARAM)NULL );

谢谢和问候

最佳答案

问题是您正在抹杀窗口样式。错误是行:

SetWindowLongPtr(hwndPB,GWL_STYLE,PBS_MARQUEE);

这设置了 PBS_MARQUEE 样式标志,但删除了所有其他标志,这绝对不是您想要的。

相反,您应该像这样使用按位或:

LONG_PTR style = GetWindowLongPtr(wndPB, GWL_STYLE);
SetWindowLongPtr(hwndPB, GWL_STYLE, style | PBS_MARQUEE);

我对 C++ 类型规则几乎一无所知,因此这段代码可能会有问题,但我确信这是你的问题!

事实上,由于您在调用 CreateWindowEx() 时设置了窗口样式,所以我根本不明白您为什么需要修改它。


最后的预感为什么您的选取框进度条不起作用。您是否包含通用控件 v6 的 list ?选取框样式仅在通用控件 v6 及更高版本中受支持。

您可以通过在例如 stdafx.h 中包含以下内容来最简单地完成此操作:

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

我在 Visual Studio 的空白 Win32 项目中添加了以下代码对此进行了测试:

HWND hwndPB = CreateWindowEx(
    0, PROGRESS_CLASS, (LPCWSTR)NULL,
    WS_CHILD | WS_VISIBLE | PBS_MARQUEE,
    0, 0, 400, 100,
    hWnd, (HMENU) 0, hInst, NULL
);
SendMessage(hwndPB,(UINT) PBM_SETMARQUEE,(WPARAM) 1,(LPARAM)NULL);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

我需要添加 list pragma 以获得 v6 comctl32,没有 pragma 就没有选取框。

关于c++ - PBS_MARQUEE Progressbar WinApi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681467/

相关文章:

c++ - QSharedMemory 不会在应用程序崩溃时被删除

C++ STD::find_if 使用结构谓词

c# - 表格中的圆角边缘

c# - 我不断在 DLL "Unable to find an entry point named ' 中收到 'user32.dll' GetWindowLongPtrA' ”

android - 如何控制进度条的出现/消失,就像在android fragment 中加载一样?

c++ - 使用jni时如何清理jfloat

c++ - 使用 c++ eigen 库的未知错误

c++ - 缓存位图

android - Android 中显示值的进度条

ios - 显示进度条,直到它在 UIWebView IOS7 中加载数据