SOL9 2.0 Sample: BitmapViewer

SOL9 2.0 Samples

1 Screenshot


2 Source code

/*
 * BitmapViewer.cpp 
 * Copyright (c) 2009 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL++2000
// 2000.02.16
// 2008/09/13 Modified to use DIBSection class.
// 2008/09/16 Modified to use restoreFileFolder/saveFileFolder to manage a selected folder
// in FileDialog.

#include <sol\ApplicationView.h>
#include <sol\PaintDC.h>
#include <sol\ClientDC.h>
#include <sol\FileDialog.h>
#include <sol\DIBSection.h>
#include <sol\Profile.h>
#include <sol\Folder.h>

#include "resource.h"

namespace SOL {

class BitmapViewer :public ApplicationView {
private:

    DIBSection    loadedImage;

    FileDialog        fileDialog;
 
public:
    /**
     * Constructor
     */
    BitmapViewer(Application& applet, const TCHAR* name, Args& args)
    :ApplicationView(applet, name,
        args.set(XmNstyle, (ulong)WS_VSCROLL|WS_HSCROLL))
    {

        addCallback(XmNmenuCallback, IDM_OPEN, this,
            (Callback)&BitmapViewer::open, NULL);
        addCallback(XmNmenuCallback, IDM_EXIT, this,
            (Callback)&BitmapViewer::exit, NULL);

        addCallback(XmNmenuCallback, IDM_VERSION, this,
            (Callback)&BitmapViewer::version, NULL);

        addEventHandler(WM_PAINT, this, 
            (Handler)&BitmapViewer::paint, NULL);

        addEventHandler(WM_SIZE, this, 
            (Handler)&BitmapViewer::size, NULL);
        addEventHandler(WM_CLOSE, this, 
            (Handler)&BitmapViewer::close, NULL);

    
        Args ar;
        ar.set(XmNfilter, _T("BitmapFiles (*.bmp)\0 *.bmp\0"));
        fileDialog.create(this, _T(""), ar);

        restorePlacement();
    }

public:
    ~BitmapViewer()
    {
    }

private:
    long BitmapViewer::close(Event& event)
    {
        savePlacement();
        return defaultProc(event);
    }

private:
    void    open(Action& action)
    {
        Args ar;
        
        TCHAR dir[MAX_PATH];
        memset(dir, (TCHAR)0, SizeOf(dir));
        //Call getFileFolder method in SOL::ApplicationView.
        //This gets a previously select folder from a registry(profile of this application) for fileDialog
        if (restoreFileFolder(dir, sizeof(dir))) {
            ar.set(XmNdirectory, dir);
            fileDialog.setValues(ar);
        }
    
        if(fileDialog.open()){
            TCHAR title[MAX_PATH];
            TCHAR* filename = fileDialog.getFileName();
            TCHAR* ftitle = fileDialog.getFileTitle();
        
            //Call saveFileFolder method in SOL::ApplicationView.
            saveFileFolder(filename);

            ClientDC cdc(this);
            loadedImage.load(cdc, filename);
            
            _stprintf_s(title, SizeOf(title), _T("%s - BitmapViewer"), filename);

            setText(title);

            setScrollPos(HORIZONTAL, 0);

            setScrollPos(VERTICAL, 0);

            updateScrollRange();
            invalidate((const RECT*)NULL);

            update();
        }
    }

private:
    void updateScrollRange()
    {
        int bw = loadedImage.getWidth();
        int bh = loadedImage.getHeight();
        setScrollExtent(bw, bh);
    }

private:
    long size(Event& event)
    {
        updateScrollRange();
        return 0;
    }

private:
    void version(Action& action)
    {
        
        showMessageDialog(_T("Version"),
            _T("BitmapViewer 1.0.0.2 \r\n Copyright(c) 2009 Antillia.com"), MB_ICONINFORMATION|MB_OK);

    }

private:
    long paint(Event& event)
    {
        int x = getScrollPos(Composite::HORIZONTAL);
        int y = getScrollPos(Composite::VERTICAL);

        PaintDC pdc(this);
        loadedImage.draw(pdc, -x, -y);

        return 0;
    }

};

}

//////////////////////////////////////////////
//
void    Main(int argc, TCHAR** argv)
{
    const TCHAR* appClass = _T("BitmapViewer");
    Application applet(appClass, argc, argv);

    Args args;
    
    args.set(XmNclassStyle, 0);

    BitmapViewer bitmapView(applet, appClass, args);
    bitmapView.realize();

    applet.run();
}


Last modified: 11 Nov 2009

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