Boost logo

Boost Users :

Subject: Re: [Boost-users] Connecting Windows Messages/Events with Boost callbacks
From: asif saeed (asif.lse2_at_[hidden])
Date: 2011-03-24 08:16:57


Hi Igor,

Thank you very much.

The thing that I don't understand is that how folks such as those from
SmartWin++ are able to seemlessly connect functions with Windows messages
without using a case statement in a message loop. An example is at the
following page:

http://smartwin.sourceforge.net/getting_started.php

Using your approach, I need to use a case statement inside a message loop.
That's what I don't want to do. I am familiar with CRTP that SmartWin++
folks seem to have used as deriving new classes is very easy and the
resulting code is very clean. So, I can at least imagine the design behind
this library. But I wonder if they have written such case statements in
message loops under the hood for every single GUI element. Someone on Boost
Users mailing list did provide a solution to this a few months back (I do
recall but cannot seem to find that post - I starred it in my thunderbird
inbox but I have lost my inbox backup - I can scan the whole boost users
list but I have limited time available to accomplish what I want).

Best regards, Asif

On Thu, Mar 24, 2011 at 4:02 PM, Igor R <boost.lists_at_[hidden]> wrote:

> > Yes, exactly. Windows messages (I want to avoid having to write long case
> > statements in message loops) - that's what I mean.
> > I'd be thankful if anyone could point me to the right direction.
>
> // pseudo-code!
>
> // Lets say it's a botton;
> switch(message)
> {
> case WM_LBUTTONDBLCLK:
> onDoubleClick(message);
> break;
> //...
> };
>
> // member function
> void onDoubleClick(Message message)
> {
> doSomething(message);
> onDoubleClick_(arg1, arg2);
> }
>
> // member
> boost::signals2::signal<void(Arg1, Arg2)> onDoubleClick_;
>
>
> Now multiple listeners of your button can connect the signal:
>
> struct Handler
> {
> void onDoubleClick(Arg1 a1, Arg2 a2);
> };
> button->onDoubleClick.connect(boost::bind(&Handler::onDoubleClick,
> handler, _1, _2));
>
> This's only a sketch, in real code hou have to care about proper
> encapsulation, appropriate arguments etc.
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net