On March 19, 2003 06:39 am, Mike Hearn wrote: > - > + LONG *dlgWndProc; > + > if (!(wndPtr = WIN_FindWndPtr(hwnd))) return FALSE; > - retvalue = (WINPROC_GetProcType( wndPtr->winproc ) == WIN_PROC_32W); > + /* dialog boxes store their window proc in a different location, so check where > we should look here */ > + dlgWndProc = (LONG *)(((char *)wndPtr->wExtra) + DWL_DLGPROC); > + > + if (wndPtr->flags & WIN_ISDIALOG) > + retvalue = (WINPROC_GetProcType( (WNDPROC)*dlgWndProc ) == WIN_PROC_32W); > + else > + retvalue = (WINPROC_GetProcType( wndPtr->winproc ) == WIN_PROC_32W); > + TRACE("hwnd=%p, proc=%p, retvalue=%d\n", hwnd, wndPtr->winproc, > retvalue);
Very nice! But why not code it a bit more "streamlined" (hand made diff): + WNDPROC wndproc = (wndPtr->flags & WIN_ISDIALOG) ? + *(WNDPROC *)(((char *)wndPtr->wExtra) + DWL_DLGPROC) : wndPtr->winproc; + - retvalue = (WINPROC_GetProcType( wndPtr->winproc ) == WIN_PROC_32W); + retvalue = (WINPROC_GetProcType( winproc ) == WIN_PROC_32W); -- Dimi.