Winapi 自定义绘图CProgressBarCtrl win32

Winapi 自定义绘图CProgressBarCtrl win32,winapi,mfc,atl,wtl,Winapi,Mfc,Atl,Wtl,我想有一个自定义的进度条控件,例如,显示一些移动的斜线或类似物,或者在进度条控件内绘制图像。我在web和一些自定义绘图示例中搜索了ListView和动态子类,但代码没有调用绘图方法: public: BOOL SubclassWindow(HWND hWnd) { ATLASSERT(m_hWnd==NULL); ATLASSERT(::IsWindow(hWnd)); BOOL bRet = CWindowImp

我想有一个自定义的进度条控件,例如,显示一些移动的斜线或类似物,或者在进度条控件内绘制图像。我在web和一些自定义绘图示例中搜索了ListView和动态子类,但代码没有调用绘图方法:

public:
     BOOL SubclassWindow(HWND hWnd)
      {
          ATLASSERT(m_hWnd==NULL);
          ATLASSERT(::IsWindow(hWnd));
          BOOL bRet = CWindowImpl<CMyProgressControl, CProgressBarCtrl>::SubclassWindow(hWnd);
          return bRet;
       }

    BEGIN_MSG_MAP(CMyProgressControl)
      CHAIN_MSG_MAP(CCustomDraw<CMyProgressControl>)
   END_MSG_MAP()

   DWORD OnPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW /*lpNMCustomDraw*/)
    {        
        return  CDRF_NOTIFYITEMDRAW;
    }
     DWORD OnItemPrePaint(int /*idCtrl*/, LPNMCUSTOMDRAW lpNMCustomDraw)
    {
        NMLVCUSTOMDRAW* pLVCD = reinterpret_cast<NMLVCUSTOMDRAW*>( lpNMCustomDraw );

        // This is the prepaint stage for an item. Here's where we set the
        // item's text color. Our return value will tell Windows to draw the
        // item itself, but it will use the new color we set here for the background

        COLORREF crText;


            crText = RGB(200,200,255);

        // Store the color back in the NMLVCUSTOMDRAW struct.
        pLVCD->clrTextBk = crText;


        // Tell Windows to paint the control itself.
        return CDRF_DODEFAULT;
    }
公共:
BOOL子类窗口(HWND-HWND)
{
ATLASSERT(m_hWnd==NULL);
ATLASSERT(::IsWindow(hWnd));
BOOL-bRet=CWindowImpl::子类窗口(hWnd);
返回布雷特;
}
开始消息映射(CMyProgressControl)
链图(CCustomDraw)
END_MSG_MAP()
DWORD OnPrePaint(int/*idCtrl*/,LPNMCUSTOMDRAW/*LPNMCUSTOMDRAW*/)
{        
返回CDRF\u NOTIFYITEMDRAW;
}
DWORD ONTEMPREPAINT(int/*idCtrl*/,LPNMCUSTOMDRAW LPNMCUSTOMDRAW)
{
NMLVCUSTOMDRAW*pLVCD=重新解释(lpNMCustomDraw);
//这是一个项目的预涂阶段。这里是我们设置
//项目的文本颜色。我们的返回值将告诉Windows绘制
//项目本身,但它将使用我们在此处设置的新颜色作为背景
彩色参考文本;
crText=RGB(200255);
//将颜色存储回NMLVCUSTOMDRAW结构中。
pLVCD->clrTextBk=crText;
//告诉Windows绘制控件本身。
返回CDRF_DODEFAULT;
}

您引用的代码没有机会开始工作:
NMLVCUSTOMDRAW
属于列表视图控件,您正在对该控件进行子类化以使其成为所有者绘制的控件?不,它不是这样工作的

进度条是一个简单的类,它不提供所有者绘制自定义。取而代之的是,您最好实现完全自定义的控件,并根据自己的判断进行可视化显示


可以在此处查看自定义进度条窗口的框架:添加
MSG\u WM\u PAINT
OnPaint
将使您按所需方式进行绘制。

您引用的代码没有机会开始工作:
NMLVCUSTOMDRAW
属于列表视图控件,您正在对控件进行子类化,以使其成为所有者绘制的控件?不,它不是这样工作的

进度条是一个简单的类,它不提供所有者绘制自定义。取而代之的是,您最好实现完全自定义的控件,并根据自己的判断进行可视化显示

可以在这里查看自定义进度条窗口的框架:添加
MSG\u WM\u PAINT
OnPaint
可以让您按照自己的方式进行绘制