1. KevinS - 19 Апреля, 2022 - 03:32:00 - перейти к сообщению
Здравствуйте. Можно ли создать диалоговое окно только с крестиком (без кнопки сворачивания и разворачивания на весь экран, только крестик) через WinApi? Если можно, то пожалалуйста, дайте пример
2. Zireael - 19 Апреля, 2022 - 03:41:24 - перейти к сообщению
Цитата:
CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_VISIBLE | WS_CAPTION | WS_SYSMENU, 200, 100, 400, 300, 0, 0, 0, 0);
3. KevinS - 19 Апреля, 2022 - 03:46:29 - перейти к сообщению
Zireael пишет:
Цитата:
CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_VISIBLE | WS_CAPTION | WS_SYSMENU, 200, 100, 400, 300, 0, 0, 0, 0);
Огромное спасибо!) Как не гуглил, не мог найти ничего...
(Добавление)
А можно ли как-то покрасить белвую полоску наверху?
[img](для просмотра ссылки Вам необходимо авторизоваться) /img]
CODE:
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define WS_CAPTION 0x00C00000
#define WS_SYSMENU 0x00080000
#define IDC_ARROW 32512
#define ACTCTX_FLAG_RESOURCe_NAME_VALID 0x008
#define ACTCTX_FLAG_SET_PROCESS_DEFAULT 0x010
#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 0x004
external(INT, "CreateActCtx", "CreateActCtxA", "Kernel32.dll");
external(INT, "GetSystemDirectory", "GetSystemDirectoryA", "Kernel32.dll");
external(INT, "RegisterClass", "RegisterClassA", "User32.dll");
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadCursor", "LoadCursorA", "User32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
EnableVisualStyles();
int fon_color = rgb(130, 151, 255); // цвет фона окна
char Class[99];
strcpy(#Class[0], "myclass");
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = address("WindowProc"); // функция обработки сообщений от окна
PWNDCLASS[5] = LoadIcon(GetModuleHandle(0), 128); // иконка
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW); // курсор
PWNDCLASS[7] = CreateSolidBrush(fon_color); // цвет фона диалога
PWNDCLASS[9] = address(#Class[0]); // имя класса окна
if (RegisterClass(CLASS)==0){messagebox("Не удалось зарегистрировать класс"); goto er;}
int button0;
// создание окна
int Win = CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_VISIBLE | WS_CAPTION | WS_SYSMENU, 200, 100, 400, 300, 0, 0, 0, 0);
loop()sleep(10);
end:;
UnregisterClass(address(#Class[0]), 0);
er:;
function getmessage(WM_CREATE)
{
// создание контролов
button0 = CreateWindow(0, "BUTTON", "Кнопка", WS_VISIBLE | WS_CHILD, 10, 10, 100, 24, message.hwnd, 0, 0, 0);
}
function getmessage(WM_COMMAND)
{
if (message.lparam==button0) // если нажата кнопка
{
messagebox("Нажата кнопка");
}
}
function getmessage(WM_CLOSE)
{
goto global end;
}
function EnableVisualStyles()
{
char Directory[260], Source[260];
strcpy(#Source[0], "shell32.dll");
GetSystemDirectory(address(#Directory[0]), sizearray(Directory));
int ACTCTX[8] = {32, ACTCTX_FLAG_RESOURCe_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,
address(#Source[0]), 0, address(#Directory[0]), 124, 0, 0};
CreateActCtx(address(#ACTCTX[0]));
}
#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define WS_CAPTION 0x00C00000
#define WS_SYSMENU 0x00080000
#define IDC_ARROW 32512
#define ACTCTX_FLAG_RESOURCe_NAME_VALID 0x008
#define ACTCTX_FLAG_SET_PROCESS_DEFAULT 0x010
#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 0x004
external(INT, "CreateActCtx", "CreateActCtxA", "Kernel32.dll");
external(INT, "GetSystemDirectory", "GetSystemDirectoryA", "Kernel32.dll");
external(INT, "RegisterClass", "RegisterClassA", "User32.dll");
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadCursor", "LoadCursorA", "User32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
EnableVisualStyles();
int fon_color = rgb(130, 151, 255); // цвет фона окна
char Class[99];
strcpy(#Class[0], "myclass");
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = address("WindowProc"); // функция обработки сообщений от окна
PWNDCLASS[5] = LoadIcon(GetModuleHandle(0), 128); // иконка
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW); // курсор
PWNDCLASS[7] = CreateSolidBrush(fon_color); // цвет фона диалога
PWNDCLASS[9] = address(#Class[0]); // имя класса окна
if (RegisterClass(CLASS)==0){messagebox("Не удалось зарегистрировать класс"); goto er;}
int button0;
// создание окна
int Win = CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_VISIBLE | WS_CAPTION | WS_SYSMENU, 200, 100, 400, 300, 0, 0, 0, 0);
loop()sleep(10);
end:;
UnregisterClass(address(#Class[0]), 0);
er:;
function getmessage(WM_CREATE)
{
// создание контролов
button0 = CreateWindow(0, "BUTTON", "Кнопка", WS_VISIBLE | WS_CHILD, 10, 10, 100, 24, message.hwnd, 0, 0, 0);
}
function getmessage(WM_COMMAND)
{
if (message.lparam==button0) // если нажата кнопка
{
messagebox("Нажата кнопка");
}
}
function getmessage(WM_CLOSE)
{
goto global end;
}
function EnableVisualStyles()
{
char Directory[260], Source[260];
strcpy(#Source[0], "shell32.dll");
GetSystemDirectory(address(#Directory[0]), sizearray(Directory));
int ACTCTX[8] = {32, ACTCTX_FLAG_RESOURCe_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,
address(#Source[0]), 0, address(#Directory[0]), 124, 0, 0};
CreateActCtx(address(#ACTCTX[0]));
}
4. neba2101 - 20 Августа, 2024 - 06:01:36 - перейти к сообщению
Zireael пишет:
Цитата:
CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_VISIBLE | WS_CAPTION | WS_SYSMENU, 200, 100, 400, 300, 0, 0, 0, 0);
А можно создать диалог только с крестиком через createdialog(0); ? Спасибо.
5. Zireael - 20 Августа, 2024 - 06:59:37 - перейти к сообщению
Цитата:
А можно создать диалог только с крестиком через createdialog(0); ?
CODE:
#define GWL_STYLE -16
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_CAPTION 0x00C00000
#define WS_SYSMENU 0x00080000
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
createdialog(0);
showdialog(0, "Dialog", 258, 234, 250, 150, 1, 1);
SetWindowLong(gethwnd(0), GWL_STYLE, WS_VISIBLE | WS_CAPTION | WS_SYSMENU); // изменить стиль окна
loop()sleep(10);
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_CAPTION 0x00C00000
#define WS_SYSMENU 0x00080000
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
createdialog(0);
showdialog(0, "Dialog", 258, 234, 250, 150, 1, 1);
SetWindowLong(gethwnd(0), GWL_STYLE, WS_VISIBLE | WS_CAPTION | WS_SYSMENU); // изменить стиль окна
loop()sleep(10);
6. Geoteh - 20 Августа, 2024 - 15:36:13 - перейти к сообщению
мне понравился такой вариант диалога
CODE:
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define WS_CAPTION 0x00C00000
#define WS_SYSMENU 0x00080000
#define IDC_ARROW 32512
#define ACTCTX_FLAG_RESOURCe_NAME_VALID 0x008
#define ACTCTX_FLAG_SET_PROCESS_DEFAULT 0x010
#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 0x004
external(INT, "CreateActCtx", "CreateActCtxA", "Kernel32.dll");
external(INT, "GetSystemDirectory", "GetSystemDirectoryA", "Kernel32.dll");
external(INT, "RegisterClass", "RegisterClassA", "User32.dll");
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadCursor", "LoadCursorA", "User32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
#define WS_POPUP 0x80000000
#define HTCAPTION 2
_start:;
EnableVisualStyles();
int fon_color = rgb(130, 151, 255); // цвет фона окна
char Class[99];
strcpy(#Class[0], "myclass");
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = address("WindowProc"); // функция обработки сообщений от окна
PWNDCLASS[5] = LoadIcon(GetModuleHandle(0), 128); // иконка
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW); // курсор
PWNDCLASS[7] = CreateSolidBrush(fon_color); // цвет фона диалога
PWNDCLASS[9] = address(#Class[0]); // имя класса окна
if (RegisterClass(CLASS)==0){UnregisterClass(address(#Class[0]), 0);goto _start;}
int button0;
// создание окна
int Win = CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_POPUP | WS_VISIBLE, 200, 100, 400, 300, 0, 0, 0, 0);
loop()sleep(10);
end:;
er:;
function getmessage(WM_CREATE)
{
// создание контролов
button0 = CreateWindow(0, "BUTTON", "закрыть", WS_VISIBLE | WS_CHILD, 10, 10, 100, 24, message.hwnd, 0, 0, 0);
}
function getmessage(WM_COMMAND)
{
if (message.hwnd==Win)
{
if (message.lparam==button0) // если нажата кнопка
{
UnregisterClass(address(#Class[0]), 0);
goto global er;
}
}
}
function getmessage (WM_LBUTTONDOWN)
{
if (message.hwnd==Win)//Если сообщение от окна
{
sendmessage(WM_NCLBUTTONDOWN, HTCAPTION, 0, formatiw(Win)); // перетаскивание окна за клиентскую часть
}
}
function EnableVisualStyles()
{
char Directory[260], Source[260];
strcpy(#Source[0], "shell32.dll");
GetSystemDirectory(address(#Directory[0]), sizearray(Directory));
int ACTCTX[8] = {32, ACTCTX_FLAG_RESOURCe_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,
address(#Source[0]), 0, address(#Directory[0]), 124, 0, 0};
CreateActCtx(address(#ACTCTX[0]));
}
#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define WS_CAPTION 0x00C00000
#define WS_SYSMENU 0x00080000
#define IDC_ARROW 32512
#define ACTCTX_FLAG_RESOURCe_NAME_VALID 0x008
#define ACTCTX_FLAG_SET_PROCESS_DEFAULT 0x010
#define ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID 0x004
external(INT, "CreateActCtx", "CreateActCtxA", "Kernel32.dll");
external(INT, "GetSystemDirectory", "GetSystemDirectoryA", "Kernel32.dll");
external(INT, "RegisterClass", "RegisterClassA", "User32.dll");
external(INT, "UnregisterClass", "UnregisterClassA", "User32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "LoadCursor", "LoadCursorA", "User32.dll");
external(INT, "LoadIcon", "LoadIconA", "User32.dll");
external(INT, "CreateSolidBrush", "CreateSolidBrush", "Gdi32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
#define WS_POPUP 0x80000000
#define HTCAPTION 2
_start:;
EnableVisualStyles();
int fon_color = rgb(130, 151, 255); // цвет фона окна
char Class[99];
strcpy(#Class[0], "myclass");
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = address("WindowProc"); // функция обработки сообщений от окна
PWNDCLASS[5] = LoadIcon(GetModuleHandle(0), 128); // иконка
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW); // курсор
PWNDCLASS[7] = CreateSolidBrush(fon_color); // цвет фона диалога
PWNDCLASS[9] = address(#Class[0]); // имя класса окна
if (RegisterClass(CLASS)==0){UnregisterClass(address(#Class[0]), 0);goto _start;}
int button0;
// создание окна
int Win = CreateWindow(WS_EX_TOPMOST, address(#Class[0]), "", WS_POPUP | WS_VISIBLE, 200, 100, 400, 300, 0, 0, 0, 0);
loop()sleep(10);
end:;
er:;
function getmessage(WM_CREATE)
{
// создание контролов
button0 = CreateWindow(0, "BUTTON", "закрыть", WS_VISIBLE | WS_CHILD, 10, 10, 100, 24, message.hwnd, 0, 0, 0);
}
function getmessage(WM_COMMAND)
{
if (message.hwnd==Win)
{
if (message.lparam==button0) // если нажата кнопка
{
UnregisterClass(address(#Class[0]), 0);
goto global er;
}
}
}
function getmessage (WM_LBUTTONDOWN)
{
if (message.hwnd==Win)//Если сообщение от окна
{
sendmessage(WM_NCLBUTTONDOWN, HTCAPTION, 0, formatiw(Win)); // перетаскивание окна за клиентскую часть
}
}
function EnableVisualStyles()
{
char Directory[260], Source[260];
strcpy(#Source[0], "shell32.dll");
GetSystemDirectory(address(#Directory[0]), sizearray(Directory));
int ACTCTX[8] = {32, ACTCTX_FLAG_RESOURCe_NAME_VALID | ACTCTX_FLAG_SET_PROCESS_DEFAULT | ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID,
address(#Source[0]), 0, address(#Directory[0]), 124, 0, 0};
CreateActCtx(address(#ACTCTX[0]));
}