Handling dialog messages for non-template based dialogs
Dmitry Timoshkov
dmitry at baikal.ru
Tue Apr 13 09:08:02 CDT 2004
"Santosh Siddheshwar" <santosh.s at sonata-software.com> wrote:
> I didnt get the second point that you mention
> Another one might be that WM_CREATE must be always
> passed to DEFDLG_Proc regardless of what result an application
> returned to DefDlgProc16/A/W.
Here is a snippet of DefDlgProc16 (DefDlgProcA/W are the same):
LRESULT WINAPI DefDlgProc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam,
LPARAM lParam )
{
WNDPROC16 dlgproc;
HWND hwnd32 = WIN_Handle32( hwnd );
BOOL result = FALSE;
=====
Perhaps WM_CREATE handling code should be moved here:
if (msg == WM_CREATE)
{
wndPtr->flags |= WIN_ISDIALOG;
blah-blah-blah
}
=====
SetWindowLongW( hwnd32, DWL_MSGRESULT, 0 );
if ((dlgproc = (WNDPROC16)DEFDLG_GetDlgProc( hwnd32 )))
{
/* Call dialog procedure */
result = CallWindowProc16( dlgproc, hwnd, msg, wParam, lParam );
/* 16 bit dlg procs only return BOOL16 */
if( WINPROC_GetProcType( (WNDPROC)dlgproc ) == WIN_PROC_16 )
result = LOWORD(result);
}
if (!result && IsWindow(hwnd32)) <== here we check whether an app handled the message
{
/* callback didn't process this message */
switch(msg)
{
case WM_ERASEBKGND:
Probably WM_CREATE handling should be performed even before control
is passed to an application.
--
Dmitry.
More information about the wine-devel
mailing list