OK, I understand what you are saying now.

What about using NVI?

class Window
{
protected void processMessage_impl(int message) // virtual call
  {}
  final public void processMessage(int message)
  {
    if(message == WM_CREATE)
    {
       // handle specially
    }
    else if(message == WM_DELETE)
    {
       // handle specially
    }
    else
    {
        processMessage_impl(int message);
    }
  }
  private HWND window;
  this()
  {
window = CreateWindow(&processMessage); // or whatever mechanism, you get the idea
  }
  ~this()
  {
    DestroyWindow(window);
  }
}

-Steve

The trouble is that if you "handle these specially", then your subclasses won't.... But your subclasses MUST still be able to handle these messages, because they might need to do something special when the messages are sent. (For example, you might need to calculate the size of the window when WM_CREATE or WM_NCCREATE is sent. Or something else... there are a ton of situations that can happen -- such as MDI window creation, etc. -- that don't happen too often, but happen often enough that you simply can't assume you can get by without allowing them to handle the messages.)

Reply via email to