home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / library / windows / barcode / barcode.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-05-17  |  16.1 KB  |  573 lines

  1. #include    "barcode.h"
  2.  
  3. char            cBuff[200];            
  4. char            szappname[] = "barcode 1.0"; 
  5. HINSTANCE    hInst;
  6.  
  7. int Bar (HDC, BOOL, int, HPEN, HBRUSH, int);
  8. void BarCode (HDC, char *, int, int);
  9. void TextToControls (HWND, char *, int);
  10. void PrintBarCode (HWND, char *, int);
  11. void PaintBarCode (HWND);
  12. int ControlsToText (HWND, char *);
  13. HWND GetDlgButtonChecked (HWND, int, int);
  14.  
  15. /****************************************************************************
  16.  
  17.     FUNCTION :    WinMain
  18.  
  19.     RETURN   :    
  20.     COMMENTS :    Main loop
  21.  
  22. ****************************************************************************/
  23.  
  24. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  25. {
  26.     DLGPROC        DlgProc;
  27.     
  28.     hInst = hInstance;
  29.  
  30.     if (!hPrevInstance) {
  31.         DlgProc = (DLGPROC)MakeProcInstance ((FARPROC)WndProc, hInst);
  32.         DialogBox (hInst, MAKEINTRESOURCE (IDD_DIALOG1), (HWND)NULL, DlgProc);
  33.         FreeProcInstance ((FARPROC)DlgProc);                         
  34.         return 0;
  35.     }
  36.     else 
  37.         return -1;
  38. }
  39.  
  40. /****************************************************************************
  41.  
  42.     FUNCTION :    WndProc
  43.  
  44.     RETURN   :
  45.     COMMENTS :    Window Proc for the main window
  46.  
  47. ****************************************************************************/
  48. BOOL CALLBACK WndProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
  49. {
  50.  
  51.             int            slen, i;
  52. static    char            cString[20];
  53.             char            cComp[16][5] = {    "+4.0","+3.5","+3.0","+2.5","+2.0","+1.5","+1.0","+0.5","0",
  54.                                                     "-0.5","-1.0","-1.5","-2.0","-2.5","-3.0","-3.5"};
  55.             char            cSpeed[35][7] = { "30\"", "20\"", "15\"", "10\"", "8\"", "6\"", "4\"", "3\"",
  56.                                                     "2\"", "1.5\"", "1\"", "0.7\"", "1/2", "1/3", "1/4", "1/6",
  57.                                                     "1/8", "1/10", "1/15", "1/20", "1/30", "1/45", "1/60", "1/90",
  58.                                                     "1/125", "1/180", "1/250", "1/350", "1/500", "1/750", "1/1000",
  59.                                                     "1/1500", "1/2000", "1/3000", "1/4000"};
  60.             char            cAp[11][6] = {        "f/1.0", "f/1.4", "f/2.0", "f/2.8", "f/4.0", "f/5.6", "f/8.0",
  61.                                                     "f/11", "f/16", "f/22", "f/32"};                                                    
  62.  
  63.    switch (uMsg) {
  64.  
  65.         case WM_INITDIALOG:
  66.             for (i = 0; i < 16; i++){
  67.                 ComboBox_AddString (GetDlgItem (hWnd, IDC_COMBO1), cComp[i]);
  68.                 ComboBox_AddString (GetDlgItem (hWnd, IDC_COMBO2), cComp[i]);
  69.             }
  70.             for (i = 0; i < 35; i++)
  71.                 ComboBox_AddString (GetDlgItem (hWnd, IDC_COMBO3), cSpeed[i]);
  72.             for (i = 0; i < 11; i++)
  73.                 ComboBox_AddString (GetDlgItem (hWnd, IDC_COMBO4), cAp[i]);
  74.             
  75.             lstrcpy ((LPSTR)cString, "00304000070300");                         
  76.             slen = 14;
  77.             SetWindowText (GetDlgItem (hWnd, IDC_EDIT2), (LPSTR)cString);
  78.             TextToControls (hWnd, cString, slen);
  79.             PaintBarCode (hWnd);
  80.             return TRUE;                           
  81.     
  82.         case WM_PAINT:
  83.             PaintBarCode (hWnd);
  84.             return FALSE;
  85.             
  86.         case WM_COMMAND:
  87.             switch (GET_WM_COMMAND_ID (wParam, lParam)){
  88.  
  89.                 case IDC_EDIT2:
  90.                     if (GET_WM_COMMAND_CMD (wParam, lParam) == EN_CHANGE){
  91.                         GetWindowText (GetDlgItem (hWnd, IDC_EDIT2), (LPSTR)cString, sizeof (cString));
  92.                         slen = lstrlen (cString);
  93.                         if (slen & 1){            
  94.                             for (i = slen; i > 0; i--)
  95.                                 cString[i] = cString[i-1];
  96.                             cString[0] = '0';
  97.                             cString [slen+1] = 0;           
  98.                             slen++;
  99.                         }                   
  100.                         TextToControls (hWnd, cString, slen);
  101.                         PaintBarCode (hWnd);
  102.                     }
  103.                     return TRUE;  
  104.  
  105.                 case IDC_EDIT1:
  106.                     if (GET_WM_COMMAND_CMD (wParam, lParam) != EN_KILLFOCUS)
  107.                         return FALSE;                                     
  108.                         
  109.                 case IDC_RADIO1:
  110.                 case IDC_RADIO2:
  111.                 case IDC_RADIO3:
  112.                 case IDC_RADIO4:
  113.                 case IDC_RADIO5:
  114.                 case IDC_RADIO6:
  115.                 case IDC_RADIO7:
  116.                 case IDC_RADIO8:
  117.                 case IDC_RADIO11:
  118.                 case IDC_RADIO12:
  119.                 case IDC_RADIO13:
  120.                 case IDC_RADIO14:
  121.                 case IDC_RADIO15:
  122.                 case IDC_RADIO16:
  123.                 case IDC_RADIO17:
  124.                 case IDC_CHECK1:
  125.                     slen = ControlsToText (hWnd, cString);
  126.                     if (slen){
  127.                         SetWindowText (GetDlgItem (hWnd, IDC_EDIT2), (LPSTR)cString);
  128.                         PaintBarCode (hWnd);
  129.                     }
  130.                     return FALSE;  
  131.  
  132.                 case IDC_COMBO1:
  133.                 case IDC_COMBO2:
  134.                 case IDC_COMBO3:
  135.                 case IDC_COMBO4:
  136.                     if (GET_WM_COMMAND_CMD (wParam, lParam) == LBN_SELCHANGE){
  137.                         slen = ControlsToText (hWnd, cString);
  138.                         if (slen){
  139.                             SetWindowText (GetDlgItem (hWnd, IDC_EDIT2), (LPSTR)cString);
  140.                             PaintBarCode (hWnd);
  141.                         }
  142.                     }
  143.                     return TRUE;
  144.  
  145.                 case IDC_BUTTON2:      
  146.                     slen = ControlsToText (hWnd, cString);
  147.                     if (slen){
  148.                         SetWindowText (GetDlgItem (hWnd, IDC_EDIT2), (LPSTR)cString);
  149.                         PrintBarCode(hWnd, cString, slen);
  150.                     }
  151.                     return TRUE;
  152.                     
  153.                 case IDCANCEL:
  154.                     EndDialog (hWnd, 0);
  155.                     return TRUE;
  156.             }
  157.             break;
  158.             
  159.         case WM_CLOSE :           
  160.             EndDialog (hWnd, 0);
  161.             return TRUE;
  162.  
  163.        case WM_DESTROY :
  164.             return TRUE;
  165.  
  166.     }                                                    
  167.     return FALSE;
  168. }  
  169.  
  170. void PaintBarCode (HWND hWnd)
  171. {
  172.     HDC    hDC;
  173.     char    cString[50];
  174.     int    slen, i;                 
  175.     RECT    Rect;
  176.  
  177.     hDC = GetDC (GetDlgItem (hWnd, IDC_STATIC1));                
  178.  
  179.     GetClientRect (GetDlgItem (hWnd, IDC_STATIC1), &Rect);
  180.    Rectangle (hDC, Rect.left, Rect.top, Rect.right, Rect.bottom);
  181.     
  182.     GetWindowText (GetDlgItem (hWnd, IDC_EDIT2), (LPSTR)cString, sizeof (cString));
  183.     slen = lstrlen (cString);
  184.     if (slen & 1){
  185.         for (i = slen; i > 0; i--)
  186.             cString[i] = cString[i-1];
  187.         cString[0] = '0';
  188.         cString [slen+1] = 0;           
  189.         slen++;
  190.     }                   
  191.     if (slen){
  192.         SetTextColor (hDC, GetSysColor (COLOR_WINDOWTEXT));
  193.         SetBkColor (hDC, GetSysColor (COLOR_WINDOW));
  194.         BarCode (hDC, cString, slen, 1);
  195.     }
  196.     ReleaseDC (GetDlgItem (hWnd, IDC_STATIC1), hDC);  
  197.     
  198.     return;
  199. }
  200.  
  201.  
  202. void PrintBarCode (HWND hwnd, char *cString, int slen)
  203. {
  204. #define LEN  50
  205.  
  206.     PRINTDLG pd;
  207.     DOCINFO    di;
  208.     char        lpszDocName[] = "BARCODE";
  209.     int        nRes, nFact;
  210.  
  211.     memset(&pd, 0, sizeof(PRINTDLG));
  212.     di.cbSize = sizeof (DOCINFO);
  213.     di.lpszDocName = lpszDocName;
  214.     di.lpszOutput = NULL;
  215.  
  216.     pd.lStructSize = sizeof(PRINTDLG);
  217.     pd.hwndOwner = hwnd;
  218.     pd.Flags = PD_RETURNDC;
  219.  
  220.     if (PrintDlg(&pd) != 0) {
  221.        StartDoc (pd.hDC, &di);
  222.         StartPage (pd.hDC);
  223.         
  224.         nRes = GetDeviceCaps (pd.hDC, LOGPIXELSX);
  225.         nFact = ((LEN / 25) * nRes) / ((14 + 1) * 9);
  226.         BarCode (pd.hDC, cString, slen, nFact);
  227.         if (IsDlgButtonChecked (hwnd, IDC_CHECK3)){
  228.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC11), cBuff, sizeof (cBuff));
  229.             TextOut (pd.hDC, 10, 50 * nFact + 10, cBuff, nRes); 
  230.             TextOut (pd.hDC, 800, 50 * nFact + 10, cString, slen); 
  231.         }
  232.         if (IsDlgButtonChecked (hwnd, IDC_CHECK2)){
  233.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC2), cBuff, sizeof (cBuff));
  234.             TextOut (pd.hDC, 10, 50 * nFact + 60, cBuff, nRes); 
  235.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_EDIT1), cBuff, sizeof (cBuff));
  236.             TextOut (pd.hDC, 800, 50 * nFact + 60, cBuff, nRes); 
  237.  
  238.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC3), cBuff, sizeof (cBuff));
  239.             TextOut (pd.hDC, 10, 50 * nFact + 110, cBuff, nRes); 
  240.             nRes = GetWindowText (GetDlgButtonChecked (hwnd, IDC_RADIO1, IDC_RADIO4), cBuff, sizeof (cBuff));
  241.             TextOut (pd.hDC, 800, 50 * nFact + 110, cBuff, nRes); 
  242.  
  243.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC4), cBuff, sizeof (cBuff));
  244.             TextOut (pd.hDC, 10, 50 * nFact + 160, cBuff, nRes); 
  245.             nRes = GetWindowText (GetDlgButtonChecked (hwnd, IDC_RADIO5, IDC_RADIO8), cBuff, sizeof (cBuff));
  246.             TextOut (pd.hDC, 800, 50 * nFact + 160, cBuff, nRes); 
  247.  
  248.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC5), cBuff, sizeof (cBuff));
  249.             TextOut (pd.hDC, 10, 50 * nFact + 210, cBuff, nRes); 
  250.             nRes = GetWindowText (GetDlgButtonChecked (hwnd, IDC_RADIO11, IDC_RADIO14), cBuff, sizeof (cBuff));
  251.             TextOut (pd.hDC, 800, 50 * nFact + 210, cBuff, nRes); 
  252.  
  253.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC6), cBuff, sizeof (cBuff));
  254.             TextOut (pd.hDC, 10, 50 * nFact + 260, cBuff, nRes); 
  255.             nRes = GetWindowText (GetDlgButtonChecked (hwnd, IDC_RADIO15, IDC_RADIO17), cBuff, sizeof (cBuff));
  256.             TextOut (pd.hDC, 800, 50 * nFact + 260, cBuff, nRes); 
  257.  
  258.             if (IsDlgButtonChecked (hwnd, IDC_CHECK1)) {
  259.                 nRes = GetWindowText (GetDlgItem (hwnd, IDC_CHECK1), cBuff, sizeof (cBuff));
  260.                 TextOut (pd.hDC, 10, 50 * nFact + 310, cBuff, nRes); 
  261.             }                                      
  262.  
  263.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC7), cBuff, sizeof (cBuff));
  264.             TextOut (pd.hDC, 10, 50 * nFact + 360, cBuff, nRes); 
  265.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_COMBO1), cBuff, sizeof (cBuff));
  266.             TextOut (pd.hDC, 800, 50 * nFact + 360, cBuff, nRes); 
  267.  
  268.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC8), cBuff, sizeof (cBuff));
  269.             TextOut (pd.hDC, 10, 50 * nFact + 410, cBuff, nRes); 
  270.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_COMBO2), cBuff, sizeof (cBuff));
  271.             TextOut (pd.hDC, 800, 50 * nFact + 410, cBuff, nRes); 
  272.  
  273.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC9), cBuff, sizeof (cBuff));
  274.             TextOut (pd.hDC, 10, 50 * nFact + 460, cBuff, nRes); 
  275.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_COMBO3), cBuff, sizeof (cBuff));
  276.             TextOut (pd.hDC, 800, 50 * nFact + 460, cBuff, nRes); 
  277.  
  278.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_STATIC10), cBuff, sizeof (cBuff));
  279.             TextOut (pd.hDC, 10, 50 * nFact + 510, cBuff, nRes); 
  280.             nRes = GetWindowText (GetDlgItem (hwnd, IDC_COMBO4), cBuff, sizeof (cBuff));
  281.             TextOut (pd.hDC, 800, 50 * nFact + 510, cBuff, nRes); 
  282.             
  283.         }
  284.  
  285.        EndPage (pd.hDC);
  286.        EndDoc (pd.hDC);
  287.        DeleteDC(pd.hDC);
  288.         if (pd.hDevMode != NULL)
  289.           GlobalFree(pd.hDevMode);
  290.         if (pd.hDevNames != NULL)
  291.            GlobalFree(pd.hDevNames);
  292.     }
  293.     
  294.     return;
  295. }             
  296.              
  297. void BarCode (HDC hDC, char *cString, int slen, int nFact)
  298. {
  299.     char        T[10] = {0x0c, 0x11, 0x12, 0x03, 0x14, 0x05, 0x06, 0x18, 0x09, 0x0a};
  300.     char        cMask;
  301.     int        index, i, j;
  302.     HPEN        hPen, hNoPen;
  303.     HBRUSH   hBrush, hNoBrush;
  304.     
  305.     index = 10;
  306.     hPen = GetStockObject(BLACK_PEN);
  307.     hNoPen = GetStockObject(WHITE_PEN);
  308.     hBrush = GetStockObject (BLACK_BRUSH);
  309.     hNoBrush = GetStockObject (WHITE_BRUSH);
  310.     index = Bar (hDC, 0, index, hPen, hBrush, nFact);
  311.     index = Bar (hDC, 0, index, hNoPen, hNoBrush, nFact);
  312.     index = Bar (hDC, 0, index, hPen, hBrush, nFact);
  313.     index = Bar (hDC, 0, index, hNoPen, hNoBrush, nFact);
  314.     
  315.     for (i = 0; i < (slen / 2); i++){
  316.         cMask = 0x01;
  317.         for (j = 0; j < 5; j++){
  318.             index = Bar (hDC, (T[cString[i*2] - '0'] & cMask), index, hPen, hBrush, nFact);
  319.             index = Bar (hDC, (T[cString[i*2+1] - '0'] & cMask), index, hNoPen, hNoBrush, nFact);
  320.             cMask = (char)(cMask << 1);
  321.         }
  322.     }
  323.     
  324.     index = Bar (hDC, 1, index, hPen, hBrush, nFact);
  325.     index = Bar (hDC, 0, index, hNoPen, hNoBrush, nFact);
  326.     index = Bar (hDC, 0, index, hPen, hBrush, nFact);
  327.     
  328.     return;    
  329. }
  330.  
  331. int Bar (HDC hDC, BOOL bWide, int index, HPEN hPen, HBRUSH hBrush, int nFact)
  332. {         
  333.     int         idx, nSize;            
  334.     HPEN      hOldPen;           
  335.     HBRUSH     hOldBrush;
  336.     
  337.     idx = index;
  338.     hOldPen = SelectObject (hDC, hPen);
  339.     hOldBrush = SelectObject (hDC, hBrush);
  340.  
  341.     if (bWide)
  342.         nSize = WIDE * nFact;
  343.     else
  344.         nSize = NARROW * nFact;
  345.     
  346.     idx += nSize;
  347.    Rectangle (hDC, index, 2 * nFact, index + nSize, 50 * nFact);
  348.     
  349.     SelectObject (hDC, hOldPen);
  350.     SelectObject (hDC, hOldBrush);
  351.  
  352.     return idx;
  353. }
  354.  
  355.  
  356. void TextToControls (HWND hDlg, char *cString, int slen)
  357. {  
  358.     BOOL        b4Even, b5Even;
  359.     int        nComp;
  360.     char        cNb[3];
  361.     
  362.     /* AE MODE */
  363.     switch (cString[1] - '0'){
  364.         case 0:  
  365.             CheckRadioButton (hDlg, IDC_RADIO1, IDC_RADIO4, IDC_RADIO1);
  366.             break;
  367.             
  368.         case 1:
  369.             CheckRadioButton (hDlg, IDC_RADIO1, IDC_RADIO4, IDC_RADIO2);
  370.             break;
  371.             
  372.         case 2:
  373.             CheckRadioButton (hDlg, IDC_RADIO1, IDC_RADIO4, IDC_RADIO3);
  374.             break;
  375.         
  376.         case 4:
  377.             CheckRadioButton (hDlg, IDC_RADIO1, IDC_RADIO4, IDC_RADIO4);
  378.             break;
  379.     }  
  380.                    
  381.     /* WINDING */
  382.     if (cString[2] >= '4')
  383.         Button_SetCheck (GetDlgItem (hDlg, IDC_CHECK1), TRUE);
  384.     else
  385.         Button_SetCheck (GetDlgItem (hDlg, IDC_CHECK1), FALSE);
  386.  
  387.     /* AF MODE */        
  388.     switch (cString[2] - '0'){
  389.         case 0:     
  390.         case 4:
  391.             CheckRadioButton (hDlg, IDC_RADIO5, IDC_RADIO8, IDC_RADIO5);
  392.             break;
  393.             
  394.         case 1:
  395.         case 5:
  396.             CheckRadioButton (hDlg, IDC_RADIO5, IDC_RADIO8, IDC_RADIO6);
  397.             break;
  398.             
  399.         case 2:
  400.         case 6:
  401.             CheckRadioButton (hDlg, IDC_RADIO5, IDC_RADIO8, IDC_RADIO7);
  402.             break;
  403.         
  404.         case 3:
  405.         case 7:
  406.             CheckRadioButton (hDlg, IDC_RADIO5, IDC_RADIO8, IDC_RADIO8);
  407.             break;
  408.     }
  409.  
  410.     /* METERING MODE */        
  411.     b4Even = !((cString[3]    - '0') & 0x01);
  412.         
  413.     switch (cString[3] - '0'){
  414.         case 0:  
  415.         case 1:
  416.             CheckRadioButton (hDlg, IDC_RADIO11, IDC_RADIO14, IDC_RADIO11);
  417.             break;
  418.             
  419.         case 2:
  420.         case 3:
  421.             CheckRadioButton (hDlg, IDC_RADIO11, IDC_RADIO14, IDC_RADIO12);
  422.             break;
  423.             
  424.         case 4:
  425.         case 5:
  426.             CheckRadioButton (hDlg, IDC_RADIO11, IDC_RADIO14, IDC_RADIO13);
  427.             break;
  428.         
  429.         case 6:
  430.         case 7:
  431.             CheckRadioButton (hDlg, IDC_RADIO11, IDC_RADIO14, IDC_RADIO14);
  432.             break;
  433.     }
  434.  
  435.     /* FLASH MODE */        
  436.     b5Even = !((cString[4]    - '0') & 0x01);
  437.         
  438.     switch (cString[4] - '0'){
  439.         case 0:  
  440.         case 1:
  441.             CheckRadioButton (hDlg, IDC_RADIO15, IDC_RADIO17, IDC_RADIO15);
  442.             break;
  443.             
  444.         case 2:
  445.         case 3:
  446.             CheckRadioButton (hDlg, IDC_RADIO15, IDC_RADIO17, IDC_RADIO16);
  447.             break;
  448.             
  449.         case 4:
  450.         case 5:
  451.             CheckRadioButton (hDlg, IDC_RADIO15, IDC_RADIO17, IDC_RADIO17);
  452.             break;
  453.         
  454.     }        
  455.     cNb[0] = cString[5];
  456.     cNb[1] = cString[6];
  457.     cNb[2] = 0;       
  458.     Edit_SetText (GetDlgItem (hDlg, IDC_EDIT1), cNb);
  459.     
  460.     nComp = cString[7] - '0';
  461.     if (b4Even)
  462.         nComp += 8;
  463.     ComboBox_SetCurSel (GetDlgItem (hDlg, IDC_COMBO1), nComp);    
  464.  
  465.     nComp = cString[8] - '0';
  466.     if (b5Even)
  467.         nComp += 8;
  468.     ComboBox_SetCurSel (GetDlgItem (hDlg, IDC_COMBO2), nComp);    
  469.  
  470.     nComp = ((cString[9] - '0') * 4) + ((cString[10] - '0') / 2) - 4;
  471.     ComboBox_SetCurSel (GetDlgItem (hDlg, IDC_COMBO3), nComp);    
  472.  
  473.     nComp = ((cString[11] - '0') * 2) + ((cString[10] - '0') % 2) - 1;
  474.     ComboBox_SetCurSel (GetDlgItem (hDlg, IDC_COMBO4), nComp);    
  475.     return;
  476. }  
  477.  
  478. int ControlsToText (HWND hDlg, char *cString)
  479. {                           
  480.     int    nComp, nSpeed, nAp;
  481.     char    cNb[3];
  482.  
  483.     cString[0] = '0';
  484.     
  485.     /* AE MODE */
  486.     if (IsDlgButtonChecked (hDlg, IDC_RADIO1))
  487.         cString[1] = '0';
  488.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO2))
  489.         cString[1] = '1';
  490.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO3))
  491.         cString[1] = '2';
  492.     else
  493.         cString[1] = '4';                
  494.  
  495.     /* AF MODE */        
  496.     if (IsDlgButtonChecked (hDlg, IDC_RADIO5))
  497.         cString[2] = '0';
  498.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO6))
  499.         cString[2] = '1';
  500.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO7))
  501.         cString[2] = '2';
  502.     else
  503.         cString[2] = '3';                
  504.         
  505.     /* WINDING */
  506.     if (IsDlgButtonChecked (hDlg, IDC_CHECK1))
  507.         cString[2] += 4;
  508.  
  509.  
  510.     /* METERING MODE */        
  511.     if (IsDlgButtonChecked (hDlg, IDC_RADIO11))
  512.         cString[3] = '0';
  513.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO12))
  514.         cString[3] = '2';
  515.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO13))
  516.         cString[3] = '4';
  517.     else
  518.         cString[3] = '6';
  519.         
  520.     /* FLASH MODE */        
  521.     if (IsDlgButtonChecked (hDlg, IDC_RADIO15))
  522.         cString[4] = '0';
  523.     else if (IsDlgButtonChecked (hDlg, IDC_RADIO16))
  524.         cString[4] = '2';
  525.     else
  526.         cString[4] = '4';
  527.         
  528.     Edit_GetText (GetDlgItem (hDlg, IDC_EDIT1), cNb, 3); 
  529.     if (cNb[1] == 0)
  530.         cNb[1] = '0';
  531.     if (cNb[0] == 0)
  532.         cNb[0] = '0';
  533.     cString[5] = cNb[0];
  534.     cString[6] = cNb[1];
  535.     
  536.     nComp = ComboBox_GetCurSel (GetDlgItem (hDlg, IDC_COMBO1));    
  537.     if (nComp < 8)
  538.         cString[3]++;
  539.     cString[7] = (char)('0' + (nComp % 8));
  540.     
  541.     nComp = ComboBox_GetCurSel (GetDlgItem (hDlg, IDC_COMBO2));    
  542.     if (nComp < 8)
  543.         cString[4]++;
  544.     cString[8] = (char)('0' + (nComp % 8));
  545.     
  546.     nSpeed = ComboBox_GetCurSel (GetDlgItem (hDlg, IDC_COMBO3));    
  547.     nSpeed += 4;
  548.     cString[9] = (char)('0' + (nSpeed / 4));
  549.  
  550.     nAp = ComboBox_GetCurSel (GetDlgItem (hDlg, IDC_COMBO4));    
  551.     nAp += 1;
  552.     cString[11] = (char)('0' + (nAp / 2));
  553.     
  554.     cString [10] = (char)('0' + ((nSpeed % 4) * 2) + ((nAp % 2)));
  555.  
  556.     cString [12] = '0';    
  557.     cString [13] = '0';    
  558.     cString [14] = '\0';    
  559.  
  560.     return 14;
  561. }
  562.  
  563. HWND GetDlgButtonChecked (HWND hDlg, int First, int Last)
  564. {
  565.     int i;
  566.     
  567.     for (i = First; i <= Last; i++)
  568.         if (IsDlgButtonChecked (hDlg, i))
  569.             return GetDlgItem (hDlg, i);                   
  570.             
  571.     return GetDlgItem (hDlg, First);
  572. }
  573.