SOL9 2.0 Class: PrintDialog

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

Source code

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


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

#include <sol\CommonDialog.h>

namespace SOL {

class PrintDialog :public CommonDialog {
private:
PRINTDLG pd;

public:

PrintDialog():CommonDialog() { }

public:
    PrintDialog(View* parent, const TCHAR* name, Args& args)
    :CommonDialog(parent, &pd)
    {
        memset(&pd, 0, sizeof(PRINTDLG));
        pd.lStructSize = sizeof(PRINTDLG);
        if (parent) {
            pd.hwndOwner = parent -> getWindow();
        }
        pd.Flags     = PD_RETURNDC;

        pd.hInstance = GetModuleHandle(NULL);//parent -> getInstanceHandle();

        setValues(args);
    }

public:
    ~PrintDialog() 
    {
    }

public:
    Boolean create(View* parent, const TCHAR* name, Args& args)
    {
        Boolean rc = CommonDialog::create(parent, new PRINTDLG);

        memset(&pd, 0, sizeof(PRINTDLG));
        pd.lStructSize = sizeof(PRINTDLG);
        if (parent) {
            pd.hwndOwner = parent -> getWindow();
        }
        pd.Flags     = PD_RETURNDC;

        pd.hInstance = GetModuleHandle(NULL);//parent -> getInstanceHandle();

        setValues(args);

        return rc;
    }

public:
    void getValues(Args& args)
    {
        ulong* val = NULL;
        int num   = args.getCount();
        Arg* arg  = args.getArgList();

        for (int i = 0; i<num; i++) {
            const TCHAR* name = arg[i].name;
            //<modified date="2000.01.09">
            val = (ulong*)arg[i].value;
            //</modified>

            if(name == XmNflags) {
                *val = (ulong)pd.Flags;
                continue;
            }
            if(name == XmNdc) {
                *val = (ulong)pd.hDC;
                continue;
            }
        }
    }

public:
    void setValues(Args& args)
    {
        ulong val;
        if (args.get(XmNhook, &val)) {
            pd.Flags |= PD_ENABLEPRINTHOOK;
            pd.lpfnPrintHook = (HOOKFUN)hookProc;
        }
        if (args.get(XmNtemplateName, &val)) {
            pd.Flags |= PD_ENABLEPRINTTEMPLATE;
            pd.lpPrintTemplateName  = (TCHAR*)val;
        }
        if (args.get(XmNflags, &val)) {
            pd.Flags |= (DWORD)val;
        }
    }

public:
    void popup(Action& action)
    {
        int result = print();
        action.setResult(result);
    }


public:
    PRINTDLG* get() {
        return &pd;
    }

    BOOL    print() {
        return ::PrintDlg(&pd);
    }

    HDC    getDC() {
        return pd.hDC;
    }

};

}


Last modified: 1 Feb 2012

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