Windows资源管理器窗口下的GDI +错误绘图

时间:2013-09-14 16:21:36

标签: winapi mfc gdi+ gdi atl

我正在使用GDI * plus来进行自定义绘图,但是当我的窗口在Windows资源管理器窗口下绘制时出现绘图错误,它看起来像这样:  enter image description here 正如你可以在浏览器窗口下看到的那样......颜色很奇怪..右上角是按钮,复选框也是一个按钮..“你是......”是一个静态控件..它们都是继承和实现的接收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我创建了一个Graphics对象并使用它进行绘制。 我应该在这里添加其他任何东西吗?

0 个答案:

没有答案