Winapi 自定义绘图CProgressBarCtrl win32
我想有一个自定义的进度条控件,例如,显示一些移动的斜线或类似物,或者在进度条控件内绘制图像。我在web和一些自定义绘图示例中搜索了ListView和动态子类,但代码没有调用绘图方法: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
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
可以让您按照自己的方式进行绘制