#include "stdafx.h"
#include <commctrl.h>
#include <math.h>
#pragma comment(lib, "comctl32.lib")
double A[40][40] = {0};
double pi = 3.14159265358979323846264338327950288419716939937510;
// DLG PROCEDURE -----------------------------------------------
// процедура обработки сообщений диалогового окна
LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
{
int wmId = LOWORD(wParam);
int wmEvent = HIWORD(wParam);
switch(wmId)
{
// если нажали [x]
case IDCANCEL:
if(IDOK == MessageBox(hWnd, "quit ?", "confirmation", MB_OKCANCEL|MB_DEFBUTTON2|MB_ICONQUESTION))
PostQuitMessage(0);
break;
}
}
break;
case WM_PAINT:
{
RECT rc;
GetClientRect(hWnd, &rc);
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
HDC cdc = CreateCompatibleDC(hdc);
HBITMAP hBmp = CreateCompatibleBitmap(hdc, rc.right, rc.bottom);
HBITMAP hBmpOld = (HBITMAP)SelectObject(cdc, hBmp);
//
double L = 2.0*364;
double C = 0.8*L;
int ex = 450;
int ey = 450;
BYTE bt;
DWORD dwClr;
double dbl1, dbl2;
int i=3;
int j=3;
double iPow = i%2?-1.0:1.0;
double jPow = j%2?-1.0:1.0;
int im = 1;
DWORD *lpdw = (DWORD *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ex*ey*4*im*im);
for(int y=0; y<ey; y++)
{
for(int x=0; x<ex; x++)
{
A[i][j] = 125.0;
dbl1 = cos( pi*(double)i*(x-ex/2)/L/1 - (1.0+iPow)*pi/4 );
dbl2 = cos( pi*(double)j*(y-ey/2)/C/1 - (1.0+jPow)*pi/4 );
dbl1 = (A[i][j] * dbl1 * dbl2);
dbl1 = (dbl1 + A[i][j]); // shift
bt = (BYTE)(255* dbl1 / (2*A[i][j])); // align
dwClr = RGB(bt, bt, bt);
//dwClr = (0xffffff)*(dbl1)/(2*A[i][j]); // align
for(int iy =0; iy<im; iy++)
{
for(int ix =0; ix<im; ix++)
{
*(lpdw + (ix + x*im + (y*im+iy)*ex*im)) = 0xff000000 | dwClr;
}
}
}
}
int cx = ex*im;
int cy = ey*im;
BITMAPINFO bi;
memset(&bi, 0, sizeof BITMAPINFO);
bi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bi.bmiHeader.biBitCount = 32;
bi.bmiHeader.biWidth = cx;
bi.bmiHeader.biHeight = -(int)cy;
bi.bmiHeader.biPlanes = 1;
bi.bmiHeader.biCompression = 0;
bi.bmiHeader.biSizeImage = cx*cy*bi.bmiHeader.biBitCount/8;
SetDIBitsToDevice(cdc, 0, 0, cx, cy, 0, 0, 0, cy, lpdw, (BITMAPINFO *)&bi, DIB_RGB_COLORS);
HeapFree(GetProcessHeap(), HEAP_ZERO_MEMORY, lpdw);
BitBlt(hdc, 0, 0, rc.right, rc.bottom, cdc, 0, 0, SRCCOPY);
SelectObject(cdc, hBmpOld);
DeleteObject(hBmp);
DeleteDC(cdc);
EndPaint(hWnd, &ps);
}
break;
}
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// создаём диалоговое окно и кнопку [Go!]
HWND hWndMain = CreateWindowEx(/*WS_EX_TOPMOST*/0, "#32770", "Main window", WS_OVERLAPPEDWINDOW|WS_VISIBLE|WS_CLIPCHILDREN|DS_3DLOOK, 300, 300, 470, 490, NULL, NULL, GetModuleHandle(NULL), NULL);
// приписываем функцию обработки к нашему дилоговому окну
SetWindowLong(hWndMain, DWL_DLGPROC, (long)DlgProc);
InitCommonControls();
// стандартный цикл обрабоки сообщений Windows для приложения
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
if(!IsDialogMessage(hWndMain, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// если все окна закрыты - выходим
if(!IsWindow(hWndMain))
break;
}
return 0;
}
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.