Posted to tcl by patthoyts at Wed Apr 29 22:35:56 GMT 2009view pretty

# Show the standard print dialog
    critcl::cproc PrintDlg {Tcl_Interp* interp Tcl_Obj* parent} ok {
        PRINTDLG pd;
        int oldMode = 0;

        ZeroMemory(&pd, sizeof(PRINTDLG));
        pd.lStructSize = sizeof(PRINTDLG);
        pd.hwndOwner = GetHWNDFromObj(interp, parent);
        pd.Flags = PD_ALLPAGES | PD_NOSELECTION;

        oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL);
        if (PrintDlg(&pd)) {
            Tcl_Obj *resObj = NULL;
            LPDEVNAMES lpDev = NULL;

            lpDev = (LPDEVNAMES)GlobalLock(pd.hDevNames);
            if (lpDev != NULL) {
                LPCTSTR szName = ((LPCTSTR)lpDev) + lpDev->wDeviceOffset;
                if (szName && *szName) {
                    resObj = Tcl_NewStringObj(szName, -1);
                }
            }
            if (resObj != NULL) {
                Tcl_SetObjResult(interp, resObj);
            }
        }

        Tcl_SetServiceMode(oldMode);

        return TCL_OK;
    }