我正在使用 GDI* plus 进行自定义绘图,但是当我的窗口在 Windows 资源管理器窗口下绘制时出现绘图错误,它看起来像这样: 你可以在资源管理器窗口下看到.. 颜色很奇怪..右上角是按钮,复选框也是按钮..“是你..”是一个静态控件..它们都被继承并实现为自定义控件..接收WM_PAINT时。我还在 WM_PAINT 中使用缓冲图像.. 无论如何.. 我无法解释这一点,有什么想法吗?当不在 Windows 资源管理器窗口下时,它可以正常工作,正如您在窗口的左侧站点中看到的那样。
该复选框是一个按钮控件,使用MSG_OCM_DRAWITEM(OnPaintImpl)
我得到 DC 的处理程序:
LRESULT OnPaintImpl(UINT ctrlID, LPDRAWITEMSTRUCT lpDIS)
{
ATLASSERT(GdiPlus::IsInitialized());
OnPaintGdiPlus(lpDIS->hDC, lpDIS->rcItem, lpDIS->itemState);
return S_OK;
}
在我的OnPaintGdiPlus(HDC hDC, CRect rc, UINT nState)
我这样做:
CMemoryDC dcMem(hDC, rc);
Graphics graphics(dcMem);
Rect rcClient = GdiPlus::GetRect(rc);
其他一切都只是从图形中调用基本的绘图函数。
在对话框中,我WM_PAINT
在这里得到并处理它:
LRESULT OnPaintImpl(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
PAINTSTRUCT ps;
HDC hDC = BeginPaint(&ps);
if (ps.rcPaint.right || ps.rcPaint.bottom) // draw rect is defined
{
if (GdiPlus::IsInitialized())
OnPaintGdiPlus(hDC, ps, GetClientRect(m_hWnd));
else
::MessageBox(m_hWnd, L"Graphics mode not initialized properly!", L"Graphics", MB_OK | MB_ICONWARNING);
}
EndPaint(&ps);
return S_OK;
}
基于这个hDC,我创建了一个图形对象并使用它进行绘制。我应该在这里添加任何其他东西吗?