From 9788ba6e54edc0c6cd8ddc9a45e9d395b3eef833 Mon Sep 17 00:00:00 2001 From: Gerard Patel Date: Sun, 16 Jul 2000 15:39:37 +0000 Subject: [PATCH] Set clipping region to client window before owner-drawn painting. --- controls/listbox.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/controls/listbox.c b/controls/listbox.c index befb4123202..de53175bef2 100644 --- a/controls/listbox.c +++ b/controls/listbox.c @@ -484,6 +484,8 @@ static void LISTBOX_PaintItem( WND *wnd, LB_DESCR *descr, HDC hdc, if (IS_OWNERDRAW(descr)) { DRAWITEMSTRUCT dis; + RECT r; + HRGN hrgn; if (!item) { @@ -493,6 +495,16 @@ static void LISTBOX_PaintItem( WND *wnd, LB_DESCR *descr, HDC hdc, FIXME("called with an out of bounds index %d(%d) in owner draw, Not good.\n",index,descr->nb_items); return; } + + /* some programs mess with the clipping region when + drawing the item, *and* restore the previous region + after they are done, so a region has better to exist + else everything ends clipped */ + GetClientRect(wnd->hwndSelf, &r); + hrgn = CreateRectRgnIndirect(&r); + SelectClipRgn( hdc, hrgn); + DeleteObject( hrgn ); + dis.CtlType = ODT_LISTBOX; dis.CtlID = wnd->wIDmenu; dis.hwndItem = wnd->hwndSelf; @@ -924,16 +936,6 @@ static LRESULT LISTBOX_Paint( WND *wnd, LB_DESCR *descr, HDC hdc ) rect.right += descr->horz_pos; } - if (IS_OWNERDRAW(descr)) - { - RECT r; - HRGN hrgn; - GetClientRect(wnd->hwndSelf, &r); - hrgn = CreateRectRgnIndirect(&r); - SelectClipRgn( hdc, hrgn); - DeleteObject( hrgn ); - } - if (descr->font) oldFont = SelectObject( hdc, descr->font ); hbrush = SendMessageA( descr->owner, WM_CTLCOLORLISTBOX, hdc, (LPARAM)wnd->hwndSelf );