Karkun |
Отправлено: 03 Февраля, 2021 - 14:12:29
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
Здравствуйте. Нашел на форуме код окна и хочу приспособить его для своих нужд. Подскажите как изменить отображаемый прямоугольник на ромб, и вообще это возможно?
CODE:#define WS_EX_LAYERED 524288
#define PS_SOLID 0
#define LWA_ALPHA 2
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "Rectangle", "Rectangle", "Gdi32.dll");
external(INT, "CreatePen", "CreatePen", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
int color=65280; // öâåò
int trasp=100; // ïðîçðà÷íîñòü îò 0 äî 255
int coord[4]={500, 500, 700, 700}; // êîîðäèíàòû ïðÿìîóãîëüíèêà
int HDC, startX, startY, endX, endY;
createdialog(2);
enabletimer(0);
loop()sleep(10);
function getmessage(2, WM_CREATE)
{
SetWindowLong(gethwnd(2), GWL_EXSTYLE, WS_EX_LAYERED);
SetWindowLong(gethwnd(2), GWL_STYLE, 0);
SetLayeredWindowAttributes(gethwnd(2), 0, trasp, LWA_ALPHA);
HDC=GetDC(gethwnd(2));
SelectObject(HDC, CreatePen(PS_SOLID, 1, color));
SelectObject(HDC, CreateSolidBrush(color));
showdialog(2, "Äèàëîã", coord[0], coord[1], coord[2] - coord[0], coord[3] - coord[1], 1, 1);
}
CREATE_TIMER(0, 100)
{
Rectangle(HDC, 0, 0, coord[2] - coord[0], coord[3] - coord[1]);
} |
|
|
Zireael |
Отправлено: 03 Февраля, 2021 - 16:48:33
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Возможно, но без прозрачности и клик через нарисованную фигуру нельзя сделать.
Нарисовать ромб (Отобразить)CODE:#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define WS_EX_LAYERED 0x00080000
#define PS_SOLID 0
#define LWA_ALPHA 2
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define SRCCOPY 0x00CC0020
#define LWA_COLORKEY 0x00000001
#define COLOR_3DFACE 15
external(INT, "GetSysColor", "GetSysColor", "User32.dll");
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetDC", "GetDC", "User32.dll");
external(INT, "Rectangle", "Rectangle", "Gdi32.dll");
external(INT, "CreatePen", "CreatePen", "Gdi32.dll");
external(INT, "SelectObject", "SelectObject", "Gdi32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "BeginPath", "BeginPath", "Gdi32.dll");
external(INT, "MoveToEx", "MoveToEx", "Gdi32.dll");
external(INT, "LineTo", "LineTo", "Gdi32.dll");
external(INT, "EndPath", "EndPath", "Gdi32.dll");
external(INT, "FillPath", "FillPath", "Gdi32.dll");
external(INT, "CreateCompatibleDC", "CreateCompatibleDC", "Gdi32.dll");
external(INT, "CreateCompatibleBitmap", "CreateCompatibleBitmap", "Gdi32.dll");
external(INT, "BitBlt", "BitBlt", "Gdi32.dll");
int color=rgb(255, 0, 255); // цвет
int width = 1000, height = 1000; // размеры окна для рисования, можно указать больше чем нужно
int PosX = 500, PosY = 300; // позиция вывода изображения, левый верхний угол
// точки, по которым рисуется фигура
int point[10]={200, 0, 350, 200, 200, 400, 50, 200, 200, 0};
int dialog_background = GetSysColor(COLOR_3DFACE);
int brush=CreateSolidBrush(dialog_background);
int pen = CreatePen(PS_SOLID, 1, dialog_background);
int HDC, Comp, bitmap;
createdialog(2);
enabletimer(0);
showdialog(2, "Диалог", PosX, PosY, width, height, 1, 1);
loop()sleep(10);
function getmessage(2, WM_CREATE)
{
SetWindowLong(gethwnd(2), GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TOPMOST);
SetWindowLong(gethwnd(2), GWL_STYLE, WS_VISIBLE | WS_CHILD);
SetLayeredWindowAttributes(gethwnd(2), dialog_background, 0, LWA_COLORKEY);
HDC=GetDC(gethwnd(2));
Comp=CreateCompatibleDC(HDC);
bitmap=CreateCompatibleBitmap(HDC, width, height);
SelectObject(Comp, bitmap);
SelectObject(Comp, pen);
SelectObject(Comp, brush);
Rectangle(Comp, 0, 0, width, height); // нарисовать прямоугольник
SelectObject(Comp, CreateSolidBrush(color));
// нарисовать фигуру по указанным точкам
BeginPath(Comp);
MoveToEx(Comp, point[0], point[1], 0);
LineTo(Comp, point[2], point[3]);
LineTo(Comp, point[4], point[5]);
LineTo(Comp, point[6], point[7]);
LineTo(Comp, point[8], point[9]);
EndPath(Comp);
FillPath(Comp); // закрасить фигуру
}
CREATE_TIMER(0, 100)
{
BitBlt(HDC, 0, 0, width, height, Comp, 0, 0, SRCCOPY);
} |
|
|
|