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

  1. # Show the standard print dialog
  2. critcl::cproc PrintDlg {Tcl_Interp* interp Tcl_Obj* parent} ok {
  3. PRINTDLG pd;
  4. int oldMode = 0;
  5.  
  6. ZeroMemory(&pd, sizeof(PRINTDLG));
  7. pd.lStructSize = sizeof(PRINTDLG);
  8. pd.hwndOwner = GetHWNDFromObj(interp, parent);
  9. pd.Flags = PD_ALLPAGES | PD_NOSELECTION;
  10.  
  11. oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL);
  12. if (PrintDlg(&pd)) {
  13. Tcl_Obj *resObj = NULL;
  14. LPDEVNAMES lpDev = NULL;
  15.  
  16. lpDev = (LPDEVNAMES)GlobalLock(pd.hDevNames);
  17. if (lpDev != NULL) {
  18. LPCTSTR szName = ((LPCTSTR)lpDev) + lpDev->wDeviceOffset;
  19. if (szName && *szName) {
  20. resObj = Tcl_NewStringObj(szName, -1);
  21. }
  22. }
  23. if (resObj != NULL) {
  24. Tcl_SetObjResult(interp, resObj);
  25. }
  26. }
  27.  
  28. Tcl_SetServiceMode(oldMode);
  29.  
  30. return TCL_OK;
  31. }