SOL9 2.0 Class: ExtendedComboBox

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

Source code

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


// SOL++2000
// 1999.09.23 Modified the super class from Primitive to ComboBox.
// 2000.02.18

#pragma once

#include <sol\ComboBox.h>
#include <sol/ImageList.h>

namespace SOL {

class ExtendedComboBox :public ComboBox {
private:
    static const long STYLE = (const long)(WS_TABSTOP|WS_VSCROLL|CBS_NOINTEGRALHEIGHT);

    static int stylesCount()
    {
        int count = 0;
        styles(&count);
        return count;
    }

private:
    static Arg*  styles(int* count=NULL)
    {
// ExtendedComboBox can use the standard combobox style
        static Arg _styles[] = {
        {XmNsortItems,          CBS_SORT},
        {XmNdisableNoScroll, CBS_DISABLENOSCROLL},
        {XmNoemConvert,      CBS_OEMCONVERT}
        };
        if (count) {
            *count = XtNumber(_styles);
        }
        return _styles;
    }  

public:
    ExtendedComboBox():ComboBox() { }
      ExtendedComboBox(View* parent, HWND hwnd)
        :ComboBox(parent, hwnd) { }


public:
    ExtendedComboBox(View* parent, const TCHAR* name, Args& args)
    :ComboBox(parent, name, 
            args.set(styles(), stylesCount())
                .set(XmNpredefined, TRUE)
                .set(XmNstyle, (ulong)STYLE)
                .set(XmNclassName, (ulong)WC_COMBOBOXEX))

{
    setValues(args);
}


public:
    virtual Boolean create(View* parent, const TCHAR* name, Args& args)
    {
        Boolean rc = ComboBox::create(parent, name, 
            args.set(styles(), stylesCount())
                .set(XmNpredefined, TRUE)
                .set(XmNstyle, (ulong)STYLE)
                .set(XmNclassName, (ulong)WC_COMBOBOXEX));


        setValues(args);

        return rc;
    }

public:
    Arg* ExtendedComboBox::getCallbackTable(int* num)
    {
        static Arg table[] = {
        {XmNcloseUpCallback,        CBN_CLOSEUP},
         {XmNdefaultActionCallback,    CBN_DBLCLK},
         {XmNdropDownCallback,        CBN_DROPDOWN},
        {XmNeditChangeCallback,        CBN_EDITCHANGE},
        {XmNeditUpdateCallback,        CBN_EDITUPDATE},
        {XmNerrorSpaceCallback,        (ulong)CBN_ERRSPACE},

        {XmNkillFocusCallback,        CBN_KILLFOCUS},
        {XmNselChangeCallback,        CBN_SELCHANGE},
        {XmNselEndCancelCallback,    CBN_SELENDCANCEL},
        {XmNselEndOkCallback,        CBN_SELENDOK},
        {XmNsetFocusCallback,        CBN_SETFOCUS},

        {XmNbeginEditCallback,        CBEN_BEGINEDIT},
         {XmNdeleteItemCallback,        CBEN_DELETEITEM},
         {XmNdragBeginCallback,        CBEN_DRAGBEGIN},
        {XmNendEditCallback,        CBEN_ENDEDIT},
        {XmNgetDispInfoCallback,    CBEN_GETDISPINFO},
        {XmNinsertItemCallback,        CBEN_INSERTITEM},
        };

        *num = XtNumber(table);
        return table;
    }



//    ExtendedComboBox(View* parent, const TCHAR* name, Args& args);

//    virtual Boolean create(View* parent, const TCHAR* name, Args& args);

    //
    int    deleteItem(int index) {
        return (int)send(CBEM_DELETEITEM, index, 0);
    }
//    Arg*    getCallbackTable(int* num);

    HWND    getComboControl() {
            return (HWND)send(CBEM_GETCOMBOCONTROL, 0, 0);
    }

    HWND    getEditControl() {
            return (HWND)send(CBEM_GETEDITCONTROL, 0, 0);
    }
    DWORD    getExtendedStyle() {
            return (DWORD)send(CBEM_GETEXTENDEDSTYLE, 0, 0);
    }

    HIMAGELIST    getImageList() {
            return (HIMAGELIST)send(CBEM_GETIMAGELIST, 0, 0L);
    }

    int        getItem(COMBOBOXEXITEM* item) {
            return (int)send(CBEM_GETITEM, 0, (LPARAM)item);
    }

    int        getUnicodeFormat() {
            return (int)send(CBEM_GETUNICODEFORMAT, 0, 0);
    }

    int        hasEditChanged() {
            return (int)send(CBEM_HASEDITCHANGED, 0, 0);
    }

    int        insertItem(COMBOBOXEXITEM* item) {
        if (item) {
            return (int)send(CBEM_INSERTITEM, 0, (LPARAM)item);
        } else {
            return -1;
        }
    }

    DWORD    setExtendedStyle(DWORD mask, DWORD style) {
            return (DWORD)send(CBEM_SETEXTENDEDSTYLE, mask, style);
    }

    HIMAGELIST    setImageList(ImageList* imageList) {
        if (imageList) {
            return (HIMAGELIST)send(CBEM_SETIMAGELIST, 0, (LPARAM)imageList->getImageList());
        } else {
            return NULL;
        }
    }
    //2009/11/06
    HIMAGELIST    setImageList(ImageList& imageList) {
        return (HIMAGELIST)send(CBEM_SETIMAGELIST, 0, (LPARAM)imageList.getImageList());
    }

    HIMAGELIST    setImageList(HIMAGELIST himl) {
            return (HIMAGELIST)send(CBEM_SETIMAGELIST, 0, (LPARAM)himl);
    }

    int        setItem(COMBOBOXEXITEM* item) {
        if (item) {
            return (int)send(CBEM_SETITEM, 0, (LPARAM)item);
        } else {
            return -1;
        }
    }
    int        setUnicodeFormat(BOOL flag) {
            return (int)send(CBEM_GETUNICODEFORMAT, (WPARAM)flag, 0);
    }
};

}


Last modified: 1 Feb 2012

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