📄 dialog.c
字号:
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, ¢er);
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 + -