首页 > 解决方案 > SetMarquee 函数不适用于 C++ 中的多字节字符集

问题描述

我在我的项目中使用多字节字符集。

当字符集为 MultiByte 时,不允许访问 SetMarquee 函数。

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxcmn2.inl中提供以下函数

#if defined(UNICODE)
_AFXCMN_INLINE BOOL CProgressCtrl::SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval)
{ ASSERT(::IsWindow(m_hWnd)); return (BOOL) ::SendMessage(m_hWnd, PBM_SETMARQUEE, (WPARAM)fMarqueeMode, (LPARAM)nInterval); }
#endif  // defined(UNICODE)

我正在尝试在我的代码上使用下面的 SendMessage 函数来实现 Marquee 样式。但它不工作。

::SendMessage(m_hWnd, PBM_SETMARQUEE, (WPARAM)TRUE, (LPARAM)1);

你能帮我解决这个问题吗?

谢谢!维杰·昆巴尼

标签: visual-c++visual-studio-2013visual-c++-2013

解决方案


找到了答案。

我需要创建一个 CProgressCtrl的类对象

CProgressCtrl progressCtrl;
LRESULT lResult = ::SendMessage(progressCtrl, PBM_SETMARQUEE, (WPARAM)TRUE, (LPARAM)1);

您需要在 SendMessage 函数上将Progress Ctrl对象作为 HANDLE 传递。


推荐阅读