It is possible to receive a WM_PAINT message in Windows without there
being an update region. For example, this can be caused by someone
calling RedrawWindow() with the RDW_INTERNALPAINT flag set. In this
case, GetUpdateRect() will indicate that there is no update region and
calling BeginPaint()/EndPaint() results in incorrect behavior.
The credentials window in Network Identity Manager needs to perform
special handling for this case by obtaining a proper device context
and completing the drawing operation.
ticket: new
component: windows
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@19859
dc483132-0cff-0310-8789-
dd5450dbe970
int selected = 0;
int rowheight = 0;
BOOL has_dc = FALSE;
+ BOOL has_updaterect = TRUE;
tbl = (khui_credwnd_tbl *)(LONG_PTR) GetWindowLongPtr(hwnd, 0);
if (tbl == NULL)
has_dc = TRUE;
}
- if(!has_dc && !GetUpdateRect(hwnd, &r, FALSE)) {
-#ifdef DEBUG
- assert(FALSE);
-#endif
- goto _exit;
+ if (!has_dc && !GetUpdateRect(hwnd, &r, FALSE)) {
+ has_updaterect = FALSE;
}
- if (!has_dc)
- hdc = BeginPaint(hwnd, &ps);
+ if (!has_dc) {
+ if (has_updaterect)
+ hdc = BeginPaint(hwnd, &ps);
+ else
+ hdc = GetDC(hwnd);
+ }
if(tbl->hf_normal)
hf_old = SelectFont(hdc, tbl->hf_normal);
if(tbl->hf_normal)
SelectFont(hdc, hf_old);
- if (!has_dc)
- EndPaint(hwnd,&ps);
+ if (!has_dc) {
+ if (has_updaterect)
+ EndPaint(hwnd,&ps);
+ else
+ ReleaseDC(hwnd, hdc);
+ }
_exit:
return TRUE;