CODE:#define RUSSIAN_CHARSET 204
#define OUT_DEFAULT_PRECIS 0
#define CLEARTYPE_QUALITY 5
#define FF_DONTCARE 0
#define CLIP_DEFAULT_PRECIS 0
#define PS_SOLID 0
#define PS_NULL 5
#define SRCCOPY 13369376
external(INT, "GetDC", "GetDC", "User32.dll" );
external(INT, "CreatePen", "CreatePen", "Gdi32.dll" );
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll" );
external(INT, "SelectObject", "SelectObject", "Gdi32.dll" );
external(INT, "Ellipse", "Ellipse", "Gdi32.dll" );
external(INT, "Rectangle", "Rectangle", "Gdi32.dll" );
external(INT, "MoveToEx", "MoveToEx", "Gdi32.dll" );
external(INT, "LineTo", "LineTo", "Gdi32.dll" );
external(INT, "CreateFont", "CreateFontA", "Gdi32.dll" );
external(INT, "TextOut", "TextOutA", "Gdi32.dll" );
external(INT, "SetTextColor", "SetTextColor", "Gdi32.dll" );
external(INT, "SetBkMode", "SetBkMode", "Gdi32.dll" );
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll" );
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll" );
external(INT, "BitBlt", "BitBlt", "Gdi32.dll" );
external(INT, "GetTextExtentPoint32", "GetTextExtentPoint32A", "Gdi32.dll" );
createdialog(0);
showdialog(0, "Диалог", 250, 250, 300, 300, 1, 1);
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
int i, x, y, font1, font2;
int hdc_dialog=GetDC(gethwnd(0)); // дескриптор контекста
int hdc=CreateCompatibleDC(hdc_dialog); // контекст в памяти
int hdc_bitmap=CreateCompatibleBitmap(hdc_dialog, 300, 300); // изображение в памяти
SelectObject(hdc, hdc_bitmap);
int brush_fill=CreateSolidBrush(3729028); // кисть чтоб заполнить зелёный круг
int brush_point=CreateSolidBrush(16148371); // цвет точек
int brush_fon=CreateSolidBrush(16769966); // цвет фона
int pen0=CreatePen(PS_NULL, 0, 0); // невидимый контур
int pen1=CreatePen(PS_SOLID, 5, 1280747); // контур круга
int pen2=CreatePen(PS_SOLID, 3, 16148371); // маленькие и большие точки
int pen3=CreatePen(PS_SOLID, 2, 3074545); // секундная стрелка
int pen4=CreatePen(PS_SOLID, 4, 16148371); // минутная стрелка
int pen5=CreatePen(PS_SOLID, 6, 1376392); // часовая стрелка
char number[3], time[9];
string t;
int num[12]={1,2,3,4,5,6,7,8,9,10,11,12}; // цифры
int size_rect[2]; // ширина и высота строки textout
int pos_x_text=20, pos_y_text=235; // позиция вывода времени
int star[22]={0,14,14,14,20,0,25,14,40,14,28,25,32,36,20,28,8,36,13,24,0,14}; // звезда
int pos_x_clock=125, pos_y_clock=125; // позиция часов
// координаты точек
int pos_x_point[60], pos_y_point[60];
int pos_x_point2[12], pos_y_point2[12];
int tmp=0;
for(i=0; i<360; i=i+6){pos_x_point[tmp]=pos_x_clock + 100 * cos(i); pos_y_point[tmp]=pos_y_clock + 100 * sin(i); tmp++;}tmp=0;
for(i=0; i<360; i=i+30){pos_x_point2[tmp]=pos_x_clock + 100 * cos(i); pos_y_point2[tmp]=pos_y_clock + 100 * sin(i); tmp++;}tmp=0;
// координаты цифр
int pos_x[12], pos_y[12];
for(i=-60; i<300; i=i+30){pos_x[tmp]=pos_x_clock + 87 * cos(i) - 6; pos_y[tmp]=pos_y_clock + 87 * sin(i) - 9; tmp++;}
enabletimer(0);
loop()sleep(10);
function getmessage(0, WM_CREATE)
{
font1 = CreateFont(20, 0, 0, 0, 700, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
font2 = CreateFont(28, 0, 0, 0, 500, 0, 0, 0, RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, CLEARTYPE_QUALITY, FF_DONTCARE, "Arial");
}
function text(int HDC, int X, int Y, int FONT, int COLOR, char #array, int size_array)
{
SelectObject (HDC, FONT); SetBkMode(HDC, 0); SetTextColor(HDC, COLOR);
TextOut(HDC, X, Y, address(#array[0]), size_array);
}
function f(int x)
{
if(x<10)return "0"+format(x);
return format(x);
}
function paint()
{
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
// рисуем прямоугольник, фон диалога
SelectObject(hdc, brush_fon); // выбираем кисть
SelectObject(hdc, pen0); // выбираем перо
Rectangle(hdc, 0, 0, 300, 300);
// рисуем зелёный круг
SelectObject(hdc, brush_fill);
SelectObject(hdc, pen1);
Ellipse(hdc, pos_x_clock-107, pos_y_clock-107, pos_x_clock+107, pos_y_clock+107);
// рисуем маленькие точки и точки
SelectObject(hdc, pen2);
SelectObject(hdc, brush_point);
for(i=0; i<sizearray(pos_x_point); i++)Ellipse(hdc, pos_x_point[i]-1, pos_y_point[i]-1, pos_x_point[i]+1, pos_y_point[i]+1);
for(i=0; i<sizearray(pos_x_point2); i++)Ellipse(hdc, pos_x_point2[i]-2, pos_y_point2[i]-2, pos_x_point2[i]+2, pos_y_point2[i]+2);
// цифры
for(i=0; i<12; i++){strcpy(#number[0], format(num[i])); text(hdc, pos_x[i], pos_y[i], font1, 255, #number[0], size(#number[0]));}
// часовая стрелка
SelectObject(hdc, pen5);
MoveToEx(hdc, pos_x_clock, pos_y_clock, 0); // из центра круга
x=pos_x_clock + 53 * cos((Hour + Minute / 60 - 15) * 30);
y=pos_y_clock + 53 * sin((Hour + Minute / 60 - 15) * 30);
LineTo(hdc, x, y); // рисуем линию
// минутная стрелка
SelectObject(hdc, pen4);
MoveToEx(hdc, pos_x_clock, pos_y_clock, 0);
x=pos_x_clock + 63 * cos((Minute - 15) * 6);
y=pos_y_clock + 63 * sin((Minute - 15) * 6);
LineTo(hdc, x, y);
// секундная стрелка
SelectObject(hdc, pen3);
MoveToEx(hdc, pos_x_clock, pos_y_clock, 0);
x=pos_x_clock + 73 * cos((Second - 15) * 6);
y=pos_y_clock + 73 * sin((Second - 15) * 6);
LineTo(hdc, x, y);
// прямоугольник, где выводится время
SelectObject (hdc, font2);
GetTextExtentPoint32(hdc, address(#time[0]), size(t), address(#size_rect[0]));
SelectObject(hdc, brush_fon);
SelectObject(hdc, pen0);
Rectangle(hdc, pos_x_text, pos_y_text, pos_x_text+size_rect[0], pos_y_text+size_rect[1]);
// вывод времени
t=f(Hour)+":"+f(Minute)+":"+f(Second); // текущее время
strcpy(#time[0], t);
SelectObject (hdc, font2);
SetTextColor(hdc, 128);
TextOut(hdc, pos_x_text, pos_y_text, address(#time[0]), size(t));
BitBlt(hdc_dialog, 0, 0, 300, 300, hdc, 0, 0, SRCCOPY); // вывод изображения на диалог
}
CREATE_TIMER(0, 200)
{
paint();
}