⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog.c

📁 frasr200的win 版本源码(18.21),使用make文件,使用的vc版本较低,在我的环境下编译有问题! 很不错的分形程序代码!
💻 C
📖 第 1 页 / 共 5 页
字号:
unsigned message;
WORD wParam;
LONG lParam;
{

    int i, numanswers;
    char temp[80];

    numanswers = 5;

    switch (message) {

        case WM_INITDIALOG:
            win_answers[0] = XLIGHT;
            win_answers[1] = YLIGHT;
            win_answers[2] = ZLIGHT;
            win_answers[3] = LIGHTAVG;
            win_answers[4] = Ambient;
            for (i = 0; i < numanswers+1;i++) {
                sprintf(temp,"%d", win_answers[i]);
                SetDlgItemText(hDlg, ID_ANS1+i,temp);
                }
            return (TRUE);

        case WM_COMMAND:
            switch (wParam) {

                case IDOK:
                    for (i = 0; i < numanswers+1; i++) {
                        GetDlgItemText(hDlg, ID_ANS1+i, temp, 20);
                        win_answers[i] = atof(temp);
                        }
                    XLIGHT   =  win_answers[0];
                    YLIGHT   =  win_answers[1];
                    ZLIGHT   =  win_answers[2];
                    LIGHTAVG =  win_answers[3];
                    Ambient  =  win_answers[4];
                    EndDialog(hDlg, 1);
                    break;
                  
                case IDCANCEL:
                    EndDialog(hDlg, 0);
                    break;

                }
        
        }
    return (FALSE);
}

BOOL FAR PASCAL Select3DSpherical(hDlg, message, wParam, lParam)
HWND hDlg;
unsigned message;
WORD wParam;
LONG lParam;
{

    int i;
    char temp[80];

    switch (message) {

        case WM_INITDIALOG:
            win_answers[0] = XROT;
            win_answers[1] = YROT;
            win_answers[2] = ZROT;
            win_answers[3] = XSCALE;
            win_answers[4] = YSCALE;
            win_answers[5] = ROUGH;
            win_answers[6] = WATERLINE;
            win_answers[7] = ZVIEWER;
            win_answers[8] = XSHIFT;
            win_answers[9] = YSHIFT;
            win_answers[10] = xtrans;
            win_answers[11] = ytrans;
            win_answers[12] = transparent[0];
            win_answers[13] = transparent[1];
            win_answers[14] = RANDOMIZE;
            for (i = 0; i < 15; i++) {
                sprintf(temp,"%d", win_answers[i]);
                SetDlgItemText(hDlg, ID_ANS1+i,temp);
                }
            return (TRUE);

        case WM_COMMAND:
            switch (wParam) {

                case IDOK:
                    for (i = 0; i < 15; i++) {
                        GetDlgItemText(hDlg, ID_ANS1+i, temp, 10);
                        win_answers[i] = atof(temp);
                        }
                    XROT =           win_answers[0];
                    YROT =           win_answers[1];
                    ZROT =           win_answers[2];
                    XSCALE =         win_answers[3];
                    YSCALE =         win_answers[4];
                    ROUGH =          win_answers[5];
                    WATERLINE =      win_answers[6];
                    ZVIEWER =        win_answers[7];
                    XSHIFT =         win_answers[8];
                    YSHIFT =         win_answers[9];
                    xtrans =         win_answers[10];
                    ytrans =         win_answers[11];
                    transparent[0] = win_answers[12];
                    transparent[1] = win_answers[13];
                    RANDOMIZE =      win_answers[14];
                    if (RANDOMIZE >= 7) RANDOMIZE = 7;
                    if (RANDOMIZE <= 0) RANDOMIZE = 0;
                    EndDialog(hDlg, 1);
                    break;
                  
                case IDCANCEL:
                    EndDialog(hDlg, 0);
                    break;

                }
        
        }
    return (FALSE);
}

BOOL FAR PASCAL SelectStarfield(hDlg, message, wParam, lParam)
HWND hDlg;
unsigned message;
WORD wParam;
LONG lParam;
{
extern double starfield_values[4];

   switch (message) {

        case WM_INITDIALOG:
            SetDlgItemInt(hDlg, ID_NUMSTARS,   (int)starfield_values[0], FALSE);
            SetDlgItemInt(hDlg, ID_CLUMPINESS, (int)starfield_values[1], FALSE);
            SetDlgItemInt(hDlg, ID_DIMRATIO,   (int)starfield_values[2], FALSE);
            return (TRUE);

        case WM_COMMAND:
            switch (wParam) {

                case IDOK:
                    starfield_values[0] = GetDlgItemInt(hDlg, ID_NUMSTARS,   NULL, FALSE);
                    starfield_values[1] = GetDlgItemInt(hDlg, ID_CLUMPINESS, NULL, FALSE);
                    starfield_values[2] = GetDlgItemInt(hDlg, ID_DIMRATIO,   NULL, FALSE);
                    EndDialog(hDlg, 1);
                    break;
                  
                case IDCANCEL:
                    EndDialog(hDlg, 0);
                    break;

                }
        
        }
    return (FALSE);
}

extern int time_to_save;
extern int gif87a_flag;
int FileFormat = 0;
FARPROC lpStatusBox = NULL;
HWND hStatusBox;
BOOL OperCancelled;
char far StatusTitle[80];

extern LPBITMAPINFO pDibInfo;
extern char huge *pixels;
extern LPLOGPALETTE pLogPal;

BOOL FAR PASCAL StatusBoxProc(HWND hDlg, unsigned Msg, WORD wParam,
                LONG lParam)
{
   char PerStr[10];
   RECT Rect, TextRect;
   HWND hBar, hCancel;
   HDC hBarDC;
   unsigned Percent;

   switch(Msg)
   {
      case WM_INITDIALOG:
         SetWindowText(hDlg, StatusTitle);
         hCancel = GetDlgItem(hDlg, ID_CANCEL);
         SetFocus(hCancel);
         return(FALSE);

      case WM_CHAR:
         if(wParam == VK_RETURN || wParam == VK_ESCAPE)
            OperCancelled = TRUE;
         break;

      case WM_COMMAND:

         if(wParam == ID_CANCEL)
            OperCancelled = TRUE;
         break;

      case WM_USER:
         /* Invalidate Bar Window */
         hBar = GetDlgItem(hDlg, ID_PERCENT);
         GetClientRect(hBar, &TextRect);

         /* Calculate Percentage */
         hBarDC = GetDC(hBar);
         Percent = (unsigned)((lParam * 100) / wParam);
         if(Percent <= 100)
         {
            wsprintf(PerStr, "%d", Percent);
            strcat(PerStr, "%");

            /* Display Bar */
            Rect = TextRect;
            Rect.right = (unsigned)((((long)Percent) * Rect.right) / 100);
            Rect.top += 2;
            Rect.bottom -= 2;
            Rectangle(hBarDC, Rect.left, Rect.top, Rect.right, Rect.bottom);

            /* Display Percentage */
            DrawText(hBarDC, PerStr, lstrlen(PerStr), &TextRect,
                     DT_CENTER | DT_VCENTER | DT_SINGLELINE);
         }

         ReleaseDC(hBar, hBarDC);
         break;

      case WM_DESTROY:
         break;

      default:
         return(FALSE);
   }
   return(TRUE);
}

void OpenStatusBox(HWND hWnd, HANDLE hInst)
{
   if(lpStatusBox == NULL)
      lpStatusBox = MakeProcInstance(StatusBoxProc, hInst);
   hStatusBox = CreateDialog(hInst, "StatusBox", hWnd, lpStatusBox);
}

void CloseStatusBox(void)
{
   DestroyWindow(hStatusBox);
}

void UpdateStatusBox(unsigned long Partial, unsigned long Total)
{
   if(Total > 0xffff)
   {
      Total >>= 16;
      Partial >>= 16;
   }
   SendMessage(hStatusBox, WM_USER, (unsigned)Total, Partial);
}

void center_window(HWND hchild, int xadj, int yadj)
{
    RECT crect,prect;
    int i,cwidth,cheight;
    POINT center;
    GetWindowRect(hchild, &crect);
    GetClientRect(hwnd, &prect);   /* main Fractint window */
    cwidth  = crect.right - crect.left;
    cheight = crect.bottom - crect.top;
    center.x = (prect.right + prect.left) / 2;
    center.y = (prect.bottom + prect.top) / 2;
    ClientToScreen(hwnd, &center);
    if ((center.x += xadj - (cwidth  / 2)) < 0) center.x = 0;
    if ((center.y += yadj - (cheight / 2)) < 0) center.y = 0;
    if ((i = GetSystemMetrics(SM_CXSCREEN) - cwidth ) < center.x) center.x = i;
    if ((i = GetSystemMetrics(SM_CYSCREEN) - cheight) < center.y) center.y = i;
    MoveWindow(hchild, center.x, center.y, cwidth, cheight, FALSE);
}

void SaveBitmapFile(HWND hWnd, char *FullPathName)
{
   long TotalSize, Saved = 0, ImageSize, n;
   BITMAPFILEHEADER FileHeader;
   unsigned PalSize, BitCount;
   unsigned BlockSize = 10240;
   int hFile;
   char Temp[128];
   OFSTRUCT OfStruct;
   HANDLE hPal;
   RGBQUAD FAR *Pal;

   hFile = OpenFile(FullPathName, &OfStruct, OF_CREATE);
   if(hFile == NULL)
   {
FileError:
      wsprintf(Temp, "File I/O error while saving %s.", (LPSTR)FullPathName);
      MessageBox(hWnd, Temp, "File Error . . .", MB_OK | MB_ICONEXCLAMATION);

GeneralError:
      _lclose(hFile);
      OpenFile(FullPathName, &OfStruct, OF_DELETE);
      CloseStatusBox();
      return;
   }

   BitCount = pDibInfo->bmiHeader.biBitCount;
   if(BitCount != 24)
      PalSize = (1 << BitCount) * sizeof(RGBQUAD);
   else
      PalSize = 0;

   ImageSize = pDibInfo->bmiHeader.biSizeImage;
   FileHeader.bfType = 0x4d42; /* 'BM'; */
   FileHeader.bfSize = sizeof(FileHeader) +
                       pDibInfo->bmiHeader.biSize +
                       PalSize + ImageSize;
   TotalSize = FileHeader.bfSize;
   FileHeader.bfReserved1 = FileHeader.bfReserved2 = 0;
   FileHeader.bfOffBits = FileHeader.bfSize - ImageSize;
   Saved += _lwrite(hFile, (LPSTR)&FileHeader, sizeof(FileHeader));
   Saved += _lwrite(hFile, (LPSTR)pDibInfo, (int)pDibInfo->bmiHeader.biSize);
   if(PalSize)
   {
      hPal = GlobalAlloc(GMEM_FIXED, PalSize);
      Pal = (RGBQUAD FAR *)GlobalLock(hPal);
      if(Pal == NULL)
      {
         MessageBox(hWnd, "Insufficient Memory", "Memory Error . . .",
                          MB_ICONEXCLAMATION | MB_OK);
         goto GeneralError;
      }
      for(n = 0; n < (1 << BitCount); n++)
      {
         Pal[n].rgbRed   = pLogPal->palPalEntry[n].peRed;
         Pal[n].rgbGreen = pLogPal->palPalEntry[n].peGreen;
         Pal[n].rgbBlue  = pLogPal->palPalEntry[n].peBlue;
         Pal[n].rgbReserved = 0;
      }
      Saved += _lwrite(hFile, (LPSTR)Pal, PalSize);
      GlobalUnlock(hPal);
      GlobalFree(hPal);
   }
   UpdateStatusBox(Saved, TotalSize);
   keypressed();

   /* We should have saved enough bytes to reach the image offset.  If not,
      then there was an error. */
   if(Saved != FileHeader.bfOffBits)
      goto FileError;

   for(n = 0; n < (ImageSize - BlockSize); n += BlockSize)
   {
      if(_lwrite(hFile, (LPSTR)&pixels[n], BlockSize) != BlockSize)
         goto FileError;
      Saved += BlockSize;
      UpdateStatusBox(Saved, TotalSize);
      keypressed();
      if(OperCancelled)
      {
         MessageBox(hWnd, "File save cancelled.", "Save Cancelled", MB_OK);
         goto GeneralError;
      }
   }
   Saved += _lwrite(hFile, (LPSTR)&pixels[n], (int)(ImageSize - n));
   if(Saved != TotalSize)
      goto FileError;

   UpdateStatusBox(Saved, TotalSize);
   _lclose(hFile);
   CloseStatusBox();
}

/* common d

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -