wine X button on top bar

A B dianaxxyyzz at gmail.com
Mon Oct 10 15:48:27 CDT 2016


I made it to finnaly work for visual studio 6 , to do not crash if user
click X ,and a menu is oppened.
I had to send WM_KILLFOCUS .
I know this is a ugly patch but somebody maybe inspire and make the correct
fix.
Is just what works for me till now .Must be improved.

I modified user32/message.c

Here are all mods I did :


void DoSomething(HWND hwnd);
BOOL CALLBACK DoSomethingHelper(HWND hwnd, LPARAM lParam);
void DoSomethingToWindowTree(HWND hwndRoot);

void DoSomething(HWND hwnd)
{

   WCHAR str[80];

   PostMessageW( hwnd, WM_KILLFOCUS, WM_SETFOCUS ,0);

   GetWindowTextW( hwnd, str, sizeof(str)/sizeof(WCHAR) );
   printf("\n Window name: %s  " , debugstr_w(str) );

}

BOOL CALLBACK DoSomethingHelper(HWND hwnd, LPARAM lParam)
{
    DoSomething(hwnd);

    return TRUE;
}

void DoSomethingToWindowTree(HWND hwndRoot)
{

    DWORD pid;

    EnumThreadWindows(  GetWindowThreadProcessId(hwndRoot, &pid) ,
DoSomethingHelper, 0);
}



/***********************************************************************
 *        SendMessageW  (USER32.@)
 */
LRESULT WINAPI SendMessageW( HWND hwnd, UINT msg, WPARAM wparam, LPARAM
lparam )
{
    DWORD_PTR res = 0;
    struct send_message_info info;

    info.type    = MSG_UNICODE;
    info.hwnd    = hwnd;
    info.msg     = msg;
    info.wparam  = wparam;
    info.lparam  = lparam;
    info.flags   = SMTO_NORMAL;
    info.timeout = 0;

    if ( msg == WM_CLOSE)
    {
       DoSomethingToWindowTree(hwnd);
       PostMessageW( hwnd, WM_CLOSE, 0 ,0);
       return TRUE;
    }

    send_message( &info, &res, TRUE );
    return res;
}


On Mon, Oct 10, 2016 at 9:30 PM, Ken Thomases <ken at codeweavers.com> wrote:

> On Oct 10, 2016, at 1:15 PM, A B <dianaxxyyzz at gmail.com> wrote:
>
> > Thank you for your response.
> > I ' m trying to send WM_QUIT before send WM_CLOSE,when a user click on X
> ,but only when he close the main window . This is a ugly patch that prevent
> visual studio 6 to crash if a menu is opened and user click on X .
> > That way I need to know if the hwnd from handle_wm_protocols() is the
> one of the main window or not , cause I need to send WM_QUIT only if user
> close his main program window.
>
> Rather than sending WM_QUIT, I recommend that you try sending
> WM_CANCELMODE.  You can send that to any window which the window manager
> closes without unintended consequences, so you don't need to attempt to
> determine which is the "main" window.  In fact, this may not even be a
> hack; it might be the right thing to do.
>
>
> On Oct 10, 2016, at 1:20 PM, A B <dianaxxyyzz at gmail.com> wrote:
>
> > Thinking from wine perspective , what will be the logic to find out if a
> hwnd is for the main window of a program ?
>
> There is no logic to find that out because "main window" is not a
> well-defined concept and means nothing in terms of Wine/Windows internals.
> Visual Studio itself may consider one of its windows "main", but that is
> not exposed to Wine.  The only significance is how VS behaves.
>
> -Ken
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20161010/997867a0/attachment-0001.html>


More information about the wine-devel mailing list