home *** CD-ROM | disk | FTP | other *** search
/ Mastering Visual Basic 6 / mastvb6.iso / leadtools / ocx32.lt / SAVEOPT.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1997-05-29  |  19.8 KB  |  777 lines

  1. // saveopt.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "mfcdemo.h"
  6. #include "saveopt.h"
  7.  
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char BASED_CODE THIS_FILE[] = __FILE__;
  11. #endif
  12.  
  13. enum SO_FORMATS {
  14.         SO_LEAD,
  15.         SO_JPEG,
  16.         SO_CALS,
  17.         SO_FAX,
  18.         SO_EPS,
  19.         SO_GEM,
  20.         SO_GIF,
  21.         SO_IOCA,
  22.         SO_PCT,
  23.         SO_MAC,
  24.         SO_MSP,
  25.         SO_OS2,
  26.         SO_PCX,
  27.         SO_SUN,
  28.         SO_TGA,
  29.         SO_TIF,
  30.         SO_WIN,
  31.         SO_WFX,
  32.         SO_WMF,
  33.         SO_WPG,
  34.         SO_PNG,
  35.         SO_PSD,
  36.         SO_RLE,
  37.         SO_DIC_G,
  38.         SO_DIC_C,
  39.         SO_ICO,
  40.         SO_CUR,
  41.         SO_EXIF,
  42. #ifdef WIN32
  43.         SO_FPX,
  44.         SO_AWD,
  45. #endif
  46. };
  47.  
  48. #define SO_1  0x0001
  49. #define SO_4  0x0002
  50. #define SO_8  0x0004
  51. #define SO_16 0x0008
  52. #define SO_24 0x0010
  53. #define SO_32 0x0020
  54. #define SO_MULTI 0x0040
  55. #define SO_QFACTOR 0x0080
  56.  
  57.  
  58. #define MAXFLAVORS 20
  59.  
  60. typedef struct tagFLAVOR
  61. {
  62.         int nType;
  63.         char strType[32];
  64.         UINT uFlags;
  65. } FLAVOR;
  66.  
  67. typedef struct tagFMT
  68. {
  69.         char strType[32];
  70.         UINT uNumFlavors;
  71.         FLAVOR aFlavors[MAXFLAVORS];
  72. } FMT;
  73.  
  74. static char *pszLeadQ[] = 
  75. {
  76.         "Custom",
  77.         "PQ1",
  78.         "PQ2",
  79.         "QFS",
  80.         "QMS",
  81.         "QS",
  82.         "SQS",
  83.         "SQT",
  84.         "MCQ",
  85.         "MC"
  86. };
  87.  
  88. #define NUMLEADQ (sizeof(pszLeadQ) / sizeof(*pszLeadQ))
  89.  
  90. static int nLeadQ[] =
  91. {
  92.         0,
  93.         CLead::QFACTOR_PQ1,
  94.         CLead::QFACTOR_PQ2,
  95.         CLead::QFACTOR_QFS,
  96.         CLead::QFACTOR_QMS,
  97.         CLead::QFACTOR_QS,
  98.         CLead::QFACTOR_SQS,
  99.         CLead::QFACTOR_SQT,
  100.         CLead::QFACTOR_MCQ,
  101.         CLead::QFACTOR_MC
  102. };
  103.  
  104. static char *pszLead1Q[] = 
  105. {
  106.         "LEAD_0",
  107.         "LEAD_1",
  108. };
  109.  
  110. #define NUMLEAD1Q (sizeof(pszLead1Q) / sizeof(*pszLead1Q))
  111.  
  112. static int nLead1Q[] =
  113. {
  114.         CLead::QFACTOR_LEAD_0,
  115.         CLead::QFACTOR_LEAD_1,
  116. };
  117.  
  118. FMT aFormats[] = 
  119. {
  120.         {
  121.                 "LEAD",
  122.                 1,
  123.                 {
  124.                         {CLead::FILE_LEAD,  "" , SO_1 | SO_8 | SO_24 | SO_QFACTOR}
  125.                 }
  126.         },
  127.         {
  128.                 "JPEG",
  129.                 3,
  130.                 {
  131.                         {CLead::FILE_LEAD1JFIF, "JFIF 4:1:1", SO_8 | SO_24 | SO_QFACTOR},
  132.                         {CLead::FILE_LEAD2JFIF, "JFIF 4:2:2", SO_8 | SO_24 | SO_QFACTOR},
  133.                         {CLead::FILE_JFIF, "JFIF 4:4:4", SO_8 | SO_24 | SO_QFACTOR},
  134.                 }
  135.         },
  136.         {
  137.                 "CALS",
  138.                 1,
  139.                 {
  140.                         {CLead::FILE_CALS, "", SO_1 },
  141.                 }
  142.         },
  143.         {
  144.                 "CCITT Fax",
  145.                 3,
  146.                 {
  147.                         { CLead::FILE_FAX_G3_1D, "Group 3, 1D", SO_1 },
  148.                         { CLead::FILE_FAX_G3_2D, "Group 3, 2D", SO_1 },
  149.                         { CLead::FILE_FAX_G4, "Group 4", SO_1 },
  150.                 }
  151.         },
  152.         {
  153.                 "Encapsulated Postscript",
  154.                 1,
  155.                 {
  156.                         { CLead::FILE_EPS, "", SO_8 },
  157.                 }
  158.         },
  159.         {
  160.                 "GEM Image",
  161.                 1,
  162.                 {
  163.                         { CLead::FILE_IMG, "", SO_1 },
  164.                 }
  165.         },
  166.         {
  167.                 "Compuserve GIF",
  168.                 1,
  169.                 {
  170.                         { CLead::FILE_GIF, "", SO_8 },
  171.                 }
  172.         },
  173.         {
  174.                 "IBM IOCA",
  175.                 3,
  176.                 {
  177.                         { CLead::FILE_ICA_G3_1D, "Group 3, 1D", SO_1 | SO_MULTI},
  178.                         { CLead::FILE_ICA_G3_2D, "Group 3, 2D", SO_1 | SO_MULTI},
  179.                         { CLead::FILE_ICA_G4, "Group 4", SO_1 | SO_MULTI},
  180.                 }
  181.         },
  182.         {
  183.                 "Macintosh Picture",
  184.                 1,
  185.                 {
  186.                         { CLead::FILE_PCT, "", SO_1 | SO_4 | SO_8 | SO_24 },
  187.                 }
  188.         },
  189.         {
  190.                 "MacPaint",
  191.                 1,
  192.                 {
  193.                         { CLead::FILE_MAC, "", SO_1 },
  194.                 }
  195.         },
  196.         {
  197.                 "Microsoft Paint",
  198.                 1,
  199.                 {
  200.                         { CLead::FILE_MSP, "", SO_1 },
  201.                 }
  202.         },
  203.         {
  204.                 "OS/2 Bitmap",
  205.                 2,
  206.                 {
  207.                         { CLead::FILE_OS2, "Type 1", SO_1 | SO_4 | SO_8 | SO_24 },
  208.                         { CLead::FILE_OS2_2, "Type 2", SO_1 | SO_4 | SO_8 | SO_24 },
  209.                 }
  210.         },
  211.         {
  212.                 "ZSoft PCX",
  213.                 1,
  214.                 {
  215.                         { CLead::FILE_PCX, "", SO_1 | SO_4 | SO_8 | SO_24 | SO_MULTI},
  216.                 }
  217.         },
  218.         {
  219.                 "SUN Raster",
  220.                 1,
  221.                 {
  222.                         { CLead::FILE_RAS, "", SO_1 | SO_8 | SO_16 | SO_24 | SO_32 },
  223.                 }
  224.         },
  225.         {
  226.                 "Targa",
  227.                 1,
  228.                 {
  229.                         { CLead::FILE_TGA, "", SO_8 | SO_16 | SO_24 | SO_32 },
  230.                 }
  231.         },
  232.         {
  233.                 "TIFF",
  234.                 15,
  235.                 {
  236.                         { CLead::FILE_TIF, "Uncompressed", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_MULTI },
  237.                         { CLead::FILE_CCITT_GROUP3_1DIM, "CCITT Group 3, 1D", SO_1 | SO_MULTI },
  238.                         { CLead::FILE_CCITT_GROUP3_2DIM, "CCITT Group 3, 2D", SO_1 | SO_MULTI },
  239.                         { CLead::FILE_CCITT_GROUP4, "CCITT Group 4", SO_1 | SO_MULTI },
  240.                         { CLead::FILE_LEAD1JTIF, "JTIF 4:1:1", SO_24 | SO_QFACTOR},
  241.                         { CLead::FILE_LEAD2JTIF, "JTIF 4:2:2", SO_24 | SO_QFACTOR},
  242.                         { CLead::FILE_JTIF, "JTIF 4:4:4", SO_24 | SO_QFACTOR},
  243.                         { CLead::FILE_TIFLZW, "LZW encoded", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_MULTI },
  244.                         { CLead::FILE_TIF_CMYK, "CMYK", SO_32 | SO_MULTI },
  245.                         { CLead::FILE_TIFLZW_CMYK, "LZW encoded CMYK", SO_32 | SO_MULTI },
  246.                         { CLead::FILE_TIF_PACKBITS, "RLE encoded", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_32 | SO_MULTI },
  247.                         { CLead::FILE_TIF_PACKBITS_CMYK, "RLE encoded CMYK", SO_32 | SO_MULTI },
  248.                         { CLead::FILE_TIF_YCC, "YCbCr", SO_24 | SO_MULTI },
  249.                         { CLead::FILE_TIFLZW_YCC, "LZW encoded YCbCr", SO_24 | SO_MULTI },
  250.                         { CLead::FILE_TIF_PACKBITS_YCC, "RLE encoded YCbCr", SO_24 | SO_MULTI },
  251.                 }
  252.         },
  253.         {
  254.                 "Windows Bitmap",
  255.                 1,
  256.                 {
  257.                         { CLead::FILE_BMP, "", SO_1 | SO_4 | SO_8 | SO_16 | SO_24 | SO_32 },
  258.                 }
  259.         },
  260.         {
  261.                 "WinFax",
  262.                 2,
  263.                 {
  264.                         { CLead::FILE_WFX_G3_1D, "Group 3, 1D", SO_1 | SO_MULTI },
  265.                         { CLead::FILE_WFX_G4, "Group 4", SO_1 | SO_MULTI },
  266.                 }
  267.         },
  268.         {
  269.                 "Windows Metafile",
  270.                 1,
  271.                 {
  272.                         { CLead::FILE_WMF, "", SO_8 | SO_24 },
  273.                 }
  274.         },
  275.         {
  276.                 "WordPerfect",
  277.                 1,
  278.                 {
  279.                         { CLead::FILE_WPG, "", SO_1 | SO_4 | SO_8 },
  280.                 }
  281.         },
  282.         {
  283.                 "Compuserve PNG",
  284.                 1,
  285.                 {
  286.                         { CLead::FILE_PNG, "", SO_1 | SO_4 | SO_8 | SO_24 },
  287.                 }
  288.         },
  289.         {
  290.                 "Adobe PSD",
  291.                 1,
  292.                 {
  293.                         { CLead::FILE_PSD, "", SO_1 | SO_8 | SO_24 },
  294.                 }
  295.         },
  296.         {
  297.                 "Windows RLE BMP",
  298.                 1,
  299.                 {
  300.                         { CLead::FILE_BMP_RLE, "", SO_4 | SO_8 },
  301.                 }
  302.         },
  303.         {
  304.                 "DICOM (Gray)",
  305.                 1,
  306.                 {
  307.                         { CLead::FILE_DICOM_GRAY, "", SO_8 },
  308.                 }
  309.         },
  310.         {
  311.                 "DICOM (Color)",
  312.                 1,
  313.                 {
  314.                         { CLead::FILE_DICOM_COLOR, "", SO_24 },
  315.                 }
  316.         },
  317.         {
  318.                 "ICON",
  319.                 1,
  320.                 {
  321.                         { CLead::FILE_WIN_ICO, "", SO_4 },
  322.                 }
  323.         },
  324.         {
  325.                 "CURSOR",
  326.                 1,
  327.                 {
  328.                         { CLead::FILE_WIN_CUR, "", SO_1 },
  329.                 }
  330.         },
  331.         {
  332.                 "EXIF",
  333.                 3,
  334.                 {
  335.                         { CLead::FILE_EXIF, "RGB", SO_24 },
  336.                         { CLead::FILE_EXIF_YCC, "YCC", SO_24 },
  337.                         { CLead::FILE_EXIF_JPEG, "JPEG", SO_24 | SO_QFACTOR },
  338.                 }
  339.         },
  340. #ifdef WIN32
  341.         {
  342.                 "Kodak FPX",
  343.                 4,
  344.                 {
  345.                         { CLead::FILE_FPX, "Uncompressed", SO_8 | SO_24 },
  346.                         { CLead::FILE_FPX_SINGLE_COLOR, "Single color", SO_8 | SO_24 },
  347.                         { CLead::FILE_FPX_JPEG, "Jpeg default", SO_8 | SO_24 },
  348.                         { CLead::FILE_FPX_JPEG_QFACTOR, "Jpeg custom", SO_8 | SO_24 | SO_QFACTOR },
  349.                 }
  350.         },
  351.         {
  352.                 "Microsoft AWD",
  353.                 1,
  354.                 {
  355.                         { CLead::FILE_AWD, "", SO_1 },
  356.                 }
  357.         },
  358. #endif
  359. };
  360.  
  361. #define NUMFORMATS (sizeof(aFormats) / sizeof(FMT))
  362.  
  363. static CString strJPEGflavors = _T(
  364.         "JFIF 4:1:1|"
  365.         "JFIF 4:2:2|"
  366.         "JFIF 4:4:4|"
  367. );
  368.  
  369. static CString strFAXflavors = _T(
  370.         "Group 3, 1D|"
  371.         "Group 3, 2D|"
  372.         "Group 4|"
  373. );
  374.  
  375. static CString strWFXflavors = _T(
  376.         "Group 3, 1D|"
  377.         "Group 4|"
  378. );
  379.  
  380. static CString strTIFflavors = _T(
  381.         "Uncompressed|"
  382.         "CCITT Group 3, 1D|"
  383.         "CCITT Group 3, 2D|"
  384.         "CCITT Group 4|"
  385.         "JTIF 4:1:1|"
  386.         "JTIF 4:2:2|"
  387.         "JTIF 4:4:4|"
  388.         "LZW encoded|"
  389.         "CMYK|"
  390.         "LZW encoded CMYK|"
  391.         "RLE encoded|"
  392.         "RLE encoded CMYK|"
  393.         "YCC|"
  394.         "LZW encoded YCC|"
  395.         "RLE encoded YCC|"
  396. );
  397.  
  398. static CString strEXIFflavors = _T(
  399.         "Uncompressed|"
  400.         "YCC|"
  401.         "JPEG|"
  402. );
  403.  
  404. static CString strFPXflavors = _T(
  405.         "Uncompressed|"
  406.         "Single Color|"
  407.         "JPEG Def. QFactor|"
  408.         "JPEG Custom QFactor|"
  409. );
  410.  
  411.  
  412. /////////////////////////////////////////////////////////////////////////////
  413. // CSaveOptDlg dialog
  414.  
  415.  
  416. CSaveOptDlg::CSaveOptDlg(CWnd* pParent /*=NULL*/)
  417.    : CDialog(CSaveOptDlg::IDD, pParent)
  418. {
  419.    //{{AFX_DATA_INIT(CSaveOptDlg)
  420.    m_nQFactor = 0;
  421.         m_nList = 0;
  422.         m_nFlavor = 0;
  423.         m_nMin = 2;
  424.         m_nMax = 255;
  425.         m_nStep = 1;
  426.         m_nPage = 10;
  427.         m_nQList = 0;
  428.         m_nQFactor = 2;
  429.         m_nBitsPerPixel = 1;
  430.         m_fAppend = FALSE;
  431.         m_nFormat = 0;
  432.  
  433.    //}}AFX_DATA_INIT
  434. }
  435.  
  436.  
  437. void CSaveOptDlg::DoDataExchange(CDataExchange* pDX)
  438. {
  439.    CDialog::DoDataExchange(pDX);
  440.    //{{AFX_DATA_MAP(CSaveOptDlg)
  441.    DDX_Control(pDX, IDC_CHECK1, m_Check1);
  442.    DDX_Control(pDX, IDC_STATIC5, m_Static5);
  443.    DDX_Control(pDX, IDC_STATIC1, m_Static1);
  444.    DDX_Control(pDX, IDC_STATIC2, m_Static2);
  445.    DDX_Control(pDX, IDC_SCROLLBAR1, m_ScrollBar);
  446.    DDX_Control(pDX, IDC_LIST1, m_List1);
  447.    DDX_Control(pDX, IDC_COMBO2, m_Combo2);
  448.    DDX_Control(pDX, IDC_COMBO1, m_Combo1);
  449.    DDX_Text(pDX, IDC_EDIT1, m_nQFactor);
  450.    DDV_MinMaxInt(pDX, m_nQFactor, m_nMin, m_nMax);
  451.    //}}AFX_DATA_MAP
  452. }
  453.  
  454.  
  455. BEGIN_MESSAGE_MAP(CSaveOptDlg, CDialog)
  456.    //{{AFX_MSG_MAP(CSaveOptDlg)
  457.    ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
  458.    ON_CBN_SELCHANGE(IDC_COMBO2, OnSelchangeCombo2)
  459.    ON_EN_CHANGE(IDC_EDIT1, OnChangeEdit1)
  460.    ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
  461.    ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
  462.    ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
  463.    ON_BN_CLICKED(IDC_RADIO3, OnRadio3)
  464.    ON_BN_CLICKED(IDC_RADIO4, OnRadio4)
  465.    ON_BN_CLICKED(IDC_RADIO5, OnRadio5)
  466.    ON_BN_CLICKED(IDC_RADIO6, OnRadio6)
  467.    ON_WM_HSCROLL()
  468.    //}}AFX_MSG_MAP
  469. END_MESSAGE_MAP()
  470.  
  471.  
  472. /////////////////////////////////////////////////////////////////////////////
  473. // CSaveOptDlg message handlers
  474.  
  475.  
  476. void CSaveOptDlg::DoQChange()
  477. {
  478.     UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
  479.     BOOL fEnable = FALSE;
  480.  
  481.     if(uFlags & SO_QFACTOR)
  482.     {
  483.         if(m_nList == SO_LEAD)
  484.         {
  485.             if(m_nBitsPerPixel != 1)
  486.                 fEnable = !m_nQList;
  487.         }
  488.         else
  489.         {
  490.             fEnable = TRUE;
  491.         }
  492.     }
  493.     GetDlgItem(IDC_EDIT1)->EnableWindow(fEnable);
  494.     m_ScrollBar.EnableWindow(fEnable);
  495. }
  496.  
  497. void CSaveOptDlg::DoBitChange()
  498. {
  499.     UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
  500.     BOOL fEnable = FALSE;
  501.     m_Static2.EnableWindow(uFlags & SO_QFACTOR);
  502.     if(uFlags & SO_QFACTOR)
  503.     {
  504.         m_nQList = 0;
  505.         m_Combo2.ResetContent();
  506.         if(m_nList == SO_LEAD)
  507.         {
  508.             fEnable = TRUE;
  509.             if(m_nBitsPerPixel == 1)
  510.             {
  511.                 for(int i = 0; i < NUMLEAD1Q; i++)
  512.                     m_Combo2.AddString(pszLead1Q[i]);
  513.             }
  514.             else
  515.             {
  516.                 for(int i = 0; i < NUMLEADQ; i++)
  517.                     m_Combo2.AddString(pszLeadQ[i]);
  518.             }                                        
  519.             m_Combo2.SetCurSel(m_nQList);
  520.         }
  521.     }
  522.     m_Combo2.EnableWindow(fEnable);
  523.     DoQChange();
  524. }
  525.  
  526.  
  527. int CSaveOptDlg::GetBitMatch()
  528. {
  529.     UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
  530.     int nLastMatch = 0;
  531.  
  532.     if(uFlags & SO_32)
  533.     {
  534.         if(m_nBitsPerPixel == 32)
  535.             return(m_nBitsPerPixel);
  536.         nLastMatch = 32;
  537.     }
  538.     if(uFlags & SO_24)
  539.     {
  540.         if(m_nBitsPerPixel == 24)
  541.             return(m_nBitsPerPixel);
  542.         if(m_nBitsPerPixel > 24 && nLastMatch)
  543.             return(nLastMatch);
  544.         nLastMatch = 24;
  545.     }
  546.     if(uFlags & SO_16)
  547.     {
  548.         if(m_nBitsPerPixel == 16)
  549.             return(m_nBitsPerPixel);
  550.         if(m_nBitsPerPixel > 16 && nLastMatch)
  551.             return(nLastMatch);
  552.         nLastMatch = 16;
  553.     }
  554.     if(uFlags & SO_8)
  555.     {
  556.         if(m_nBitsPerPixel == 8)
  557.             return(m_nBitsPerPixel);
  558.         if(m_nBitsPerPixel > 8 && nLastMatch)
  559.             return(nLastMatch);
  560.         nLastMatch = 8;
  561.     }
  562.     if(uFlags & SO_4)
  563.     {
  564.          if(m_nBitsPerPixel == 4)
  565.              return(m_nBitsPerPixel);
  566.          if(m_nBitsPerPixel > 4 && nLastMatch)
  567.              return(nLastMatch);
  568.          nLastMatch = 4;
  569.     }
  570.     if(uFlags & SO_1)
  571.     {
  572.         if(m_nBitsPerPixel == 1)
  573.             return(m_nBitsPerPixel);
  574.         if(m_nBitsPerPixel > 1 && nLastMatch)
  575.             return(nLastMatch);
  576.         nLastMatch = 1;
  577.     }
  578.     return(nLastMatch);
  579. }
  580.  
  581. void CSaveOptDlg::DoFlavorChange()
  582. {
  583.     UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
  584.     GetDlgItem(IDC_RADIO1)->EnableWindow(uFlags & SO_1);
  585.     GetDlgItem(IDC_RADIO2)->EnableWindow(uFlags & SO_4);
  586.     GetDlgItem(IDC_RADIO3)->EnableWindow(uFlags & SO_8);
  587.     GetDlgItem(IDC_RADIO4)->EnableWindow(uFlags & SO_16);
  588.     GetDlgItem(IDC_RADIO5)->EnableWindow(uFlags & SO_24);
  589.     GetDlgItem(IDC_RADIO6)->EnableWindow(uFlags & SO_32);
  590.     m_Check1.EnableWindow(uFlags & SO_MULTI);
  591.     m_nBitsPerPixel = GetBitMatch();
  592.     CheckDlgButton (IDC_RADIO1, m_nBitsPerPixel == 1);
  593.     CheckDlgButton (IDC_RADIO2, m_nBitsPerPixel == 4);
  594.     CheckDlgButton (IDC_RADIO3, m_nBitsPerPixel == 8);
  595.     CheckDlgButton (IDC_RADIO4, m_nBitsPerPixel == 16);
  596.     CheckDlgButton (IDC_RADIO5, m_nBitsPerPixel == 24);
  597.     CheckDlgButton (IDC_RADIO6, m_nBitsPerPixel == 32);
  598.  
  599.     DoBitChange();
  600. }
  601.  
  602. void CSaveOptDlg::DoFormatChange()
  603. {
  604.     UINT i;
  605.  
  606.     m_Combo1.ResetContent();
  607.     m_nFlavor = 0;
  608.  
  609.     if(aFormats[m_nList].uNumFlavors > 1)
  610.     {
  611.         for(i = 0; i < aFormats[m_nList].uNumFlavors; i++)
  612.         {
  613.             m_Combo1.AddString(aFormats[m_nList].aFlavors[i].strType);
  614.         }
  615.         m_Combo1.SetCurSel(m_nFlavor);
  616.         m_Combo1.EnableWindow(TRUE);
  617.     }
  618.     else
  619.     {
  620.         m_Combo1.EnableWindow(FALSE);
  621.     }
  622.     DoFlavorChange();
  623. }
  624.  
  625.  
  626. void CSaveOptDlg::OnSelchangeCombo1() 
  627. {
  628.     m_nFlavor = m_Combo1.GetCurSel();
  629.     DoFlavorChange();
  630. }
  631.  
  632. void CSaveOptDlg::OnSelchangeCombo2() 
  633. {
  634.     m_nQList = m_Combo2.GetCurSel();
  635.     DoQChange();
  636. }
  637.  
  638. void CSaveOptDlg::OnChangeEdit1() 
  639. {
  640.     if(GetValue())
  641.         m_ScrollBar.SetScrollPos(m_nQFactor);
  642. }
  643.  
  644. void CSaveOptDlg::OnSelchangeList1() 
  645. {
  646.         m_nList = m_List1.GetCurSel();
  647.         DoFormatChange();
  648. }
  649.  
  650. void CSaveOptDlg::OnRadio1() 
  651. {
  652.         m_nBitsPerPixel = 1;
  653.         DoBitChange();
  654. }
  655.  
  656. void CSaveOptDlg::OnRadio2() 
  657. {
  658.         m_nBitsPerPixel = 4;
  659.         DoBitChange();
  660. }
  661.  
  662. void CSaveOptDlg::OnRadio3() 
  663. {
  664.         m_nBitsPerPixel = 8;
  665.         DoBitChange();
  666. }
  667.  
  668. void CSaveOptDlg::OnRadio4() 
  669. {
  670.         m_nBitsPerPixel = 16;
  671.         DoBitChange();
  672.    
  673. }
  674.  
  675. void CSaveOptDlg::OnRadio5() 
  676. {
  677.         m_nBitsPerPixel = 24;
  678.         DoBitChange();
  679.    
  680. }
  681.  
  682. void CSaveOptDlg::OnRadio6() 
  683. {
  684.         m_nBitsPerPixel = 32;
  685.         DoBitChange();
  686.    
  687. }
  688.  
  689. void CSaveOptDlg::OnOK() 
  690. {
  691.     UINT uFlags = aFormats[m_nList].aFlavors[m_nFlavor].uFlags;
  692.  
  693.     m_fAppend = (m_Check1.GetCheck() ? TRUE : FALSE);
  694.     m_nFormat = aFormats[m_nList].aFlavors[m_nFlavor].nType;
  695.     if(m_nList == SO_LEAD)
  696.     { 
  697.         if(m_nBitsPerPixel == 1)
  698.         {
  699.             m_nQFactor = 2;
  700.             SetValue();
  701.             m_nMin = m_nQFactor = nLead1Q[m_nQList];
  702.             m_nFormat = CLead::FILE_LEAD1BIT;
  703.             UpdateData(FALSE);
  704.         }
  705.         else if(m_nQList)
  706.         {
  707.             m_nQFactor = 2;
  708.             SetValue();
  709.             m_nMin = m_nQFactor = nLeadQ[m_nQList];
  710.             UpdateData(FALSE);
  711.         }
  712.     }
  713.    CDialog::OnOK();
  714. }
  715.  
  716. BOOL CSaveOptDlg::OnInitDialog() 
  717. {
  718.    CDialog::OnInitDialog();
  719.    
  720.     m_ScrollBar.SetScrollRange(m_nMin, m_nMax, TRUE);
  721.     m_ScrollBar.SetScrollPos(m_nQList);
  722.     for(int i = 0; i < NUMFORMATS; i++)
  723.         m_List1.AddString(aFormats[i].strType);
  724.     m_List1.SetCurSel(m_nList);
  725.     DoFormatChange();   
  726.    return TRUE;  // return TRUE unless you set the focus to a control
  727.                  // EXCEPTION: OCX Property Pages should return FALSE
  728. }
  729.  
  730. BOOL CSaveOptDlg::GetValue()
  731. {
  732.     BOOL fTranslated;
  733.     int n;
  734.     n = GetDlgItemInt (IDC_EDIT1, &fTranslated, TRUE);
  735.     if (!fTranslated || n < m_nMin || n > m_nMax)
  736.         return(FALSE);
  737.     m_nQFactor = n;
  738.         return(TRUE);
  739. }
  740.  
  741. void CSaveOptDlg::SetValue()
  742. {
  743.     SetDlgItemInt (IDC_EDIT1, m_nQFactor, TRUE);
  744. }
  745.  
  746. void CSaveOptDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  747. {
  748.       GetValue();
  749.       switch (nSBCode)
  750.       {
  751.       case SB_LEFT:
  752.          m_nQFactor = m_nMin;
  753.          break;
  754.       case SB_RIGHT:
  755.          m_nQFactor = m_nMax;
  756.          break;
  757.       case SB_THUMBPOSITION:
  758.       case SB_THUMBTRACK:
  759.          m_nQFactor = (int) nPos;
  760.          break;
  761.       case SB_LINELEFT:
  762.          m_nQFactor = max (m_nQFactor - m_nStep, m_nMin);
  763.          break;
  764.       case SB_LINERIGHT:
  765.          m_nQFactor = min (m_nQFactor + m_nStep, m_nMax);
  766.          break;
  767.       case SB_PAGELEFT:
  768.          m_nQFactor = max (m_nQFactor - m_nPage, m_nMin);
  769.          break;
  770.       case SB_PAGERIGHT:
  771.          m_nQFactor = min (m_nQFactor + m_nPage, m_nMax);
  772.          break;
  773.       }
  774.       pScrollBar->SetScrollPos(m_nQFactor);
  775.       SetValue();
  776. }
  777.