SOL9 2.0 Class: Sheet

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * Sheet.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
// 2000.02.18
#pragma once

#include <sol\Composite.h>

namespace SOL {

class Sheet :public Composite {
private:
    long defaultProc(Event& event) 
    {
        return FALSE;
    }


public:
    long close(Event& event)
    {
        return 0L;
    }

private:
    long Sheet::command(Event& event) 
    {
        WORD controlId = event.getControlId();

        HWND child     = event.getChild();
        if(controlId > 0) {
            HWND item = getItem(controlId);
            if(::IsWindow(item))
                child = item;
        }

        View* view = (View*)Application::lookup(child);
        const TCHAR* name = XmNactivateCallback;
        if(view) {    
            name = view->getCallbackName(event);
        }
        callCallback(name, (Key)child, NULL, event);

        return 0L;
    }

private:
    static BOOL FAR PASCAL procedure(HWND hwnd, 
        UINT message, WPARAM wParam, LPARAM lParam)
    {
        Event event(message, wParam, lParam);

        View* view = Application::lookup(hwnd);
        if(view == NULL) {
            return FALSE;
        }
        return (BOOL) view -> dispatch(event);
    }


public:
    Sheet(): Composite() { }

public:
    // WS_EX_CONTROLPARENT enables a keyboard interface 
    Sheet(View* parent, const TCHAR* name, Args& args)
    :Composite(parent, name,
             args.set(XmNstyle, (ulong)WS_CHILD)
                 .set(XmNexStyle, (ulong)(WS_EX_TRANSPARENT|WS_EX_CONTROLPARENT))
                 .set(XmNpredefined, TRUE)
                 .set(XmNclassName, (ulong)WC_DIALOG))
    {
        addEventHandler(WM_CLOSE, this,
            (Handler)&Sheet::close, NULL);
        setWindowLong(DWL_DLGPROC, (LPARAM)Sheet::procedure);    

        setValues(args);
    }    

public:
    ~Sheet()
    {
    }

public:
    virtual Boolean create(View* parent, const TCHAR* name, Args& args)
    {
        Boolean rc = Composite::create(parent, name,
                args.set(XmNstyle, (ulong)WS_CHILD)
                 .set(XmNexStyle, (ulong)(WS_EX_TRANSPARENT|WS_EX_CONTROLPARENT))
                 .set(XmNpredefined, TRUE)
                 .set(XmNclassName, (ulong)WC_DIALOG));

        addEventHandler(WM_CLOSE, this,
            (Handler)&Sheet::close, NULL);
        setWindowLong(DWL_DLGPROC, (LPARAM)Sheet::procedure);
    
        setValues(args);

        return rc;
    }    

};

}


Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.