ivantu |
Отправлено: 27 Апреля, 2021 - 15:15:56
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
Здравствуйте, подскажите можно ли убрать кнопки управления (свернуть закрыть и т.д), используя данный метод создания окна?
CODE:
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
int b;
//////////
createdialog(0);
showdialog(0, "Диалог", 258, 234, 250, 300, 1, 1);
//////////
loop() sleep(10);//Убрать после теста
function getmessage(0, WM_CREATE)
{
b=CreateWindow(0, "BUTTON", "Первая кнопка", 1342177280, 10, 10, 120, 30, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b)messagebox ("Первая кнопка");
}
|
|
|
Zireael |
Отправлено: 28 Апреля, 2021 - 02:02:12
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:#define GWL_STYLE -16
#define WS_VISIBLE 0x10000000
#define WS_CAPTION 0x00C00000
#define WS_CHILD 0x40000000
#define WS_SYSMENU 0x00080000
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
int b;
createdialog(0);
showdialog(0, "Диалог", 258, 234, 250, 150, 1, 1);
SetWindowLong(gethwnd(0), GWL_STYLE, WS_VISIBLE + WS_CAPTION); // изменить стиль окна
loop()sleep(10);
end:;
function getmessage(0, WM_CREATE)
{
b=CreateWindow(0, "BUTTON", "Стоп скрипт", WS_VISIBLE + WS_CHILD, 40, 30, 100, 20, gethwnd(0), 0, 0, 0);
}
function getmessage(0, WM_COMMAND)
{
if (message.lparam==b)
{
if (messageboxyn("Остановить скрипт?")==1)goto global end;
else return;
}
} |
|
|
ivantu |
Отправлено: 28 Апреля, 2021 - 08:11:53
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
Zireael пишет: SetWindowLong(gethwnd(0), GWL_STYLE, WS_VISIBLE + WS_CAPTION); // изменить стиль окна
Прописывал это, но забыл при этом указать external , спасибо.
(Добавление)
Пытаюсь еще рамку полностью убрать, что только не перепробовал... все равно рамка не убирается....
CODE:
#define GWL_STYLE -16
#define WS_POPUP 0x80000000
#define BS_NOBORDER 65536
#define WS_EX_LAYERED 0x80000
#define LWA_COLORKEY 1
#define LWA_ALPHA 2
#define WS_OVERLAPPED 0x00000000
#define WS_EX_DLGMODALFRAME 0x00000001
#define WS_EX_CLIENTEDGE 0x00000200
#define WS_EX_STATICEDGE 0x00020000
#define WS_SIZEBOX 0x00040000
#define WS_CAPTION 0x00C00000
(Добавление)
Я так понял это из за того что у меня x64 битная система...
Цитата:
ПРИМЕЧАНИЕ.. Если вы попробуете мой ответ, но это не сработает для вас, это может быть так, потому что обе функции SetWindowLong и GetWindowLong были заменены и не работа для вас, и это потому, что они совместимы с только 32-разрядной версией Windows. Вероятно, вы используете 64-разрядную версию Windows, затем вместо этого используйте SetWindowLongPtr и GetWindowLongPtr, которые совместимы с и 32-разрядными и 64- бит. MSDN сообщает об этих функциях в разделе Примечание. Просто найдите их на этом сайте. Вот ссылки на них:
я так понял нужно через SetWindowLongPtr |
|
|
Zireael |
Отправлено: 28 Апреля, 2021 - 12:00:22
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:#define WS_VISIBLE 0x10000000
#define WS_EX_TOPMOST 0x00000008
#define IDC_SIZEALL 32646
#define IDC_ARROW 32512
#define WM_CLOSE 0x0010
#define WS_POPUP 0x80000000
#define WS_EX_LAYERED 0x00080000
#define LWA_ALPHA 2
#define HTCAPTION 2
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, "SetCursor", "SetCursor", "User32.dll");
external(INT, "GetModuleHandle", "GetModuleHandleA", "Kernel32.dll");
external(INT, "SetLayeredWindowAttributes", "SetLayeredWindowAttributes", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
int WinProc=address("WindowProc");
char Class[99];
strcpy(#Class[0], "myclass");
int PWNDCLASS[10];//Структура WNDCLASS
int CLASS=address(#PWNDCLASS[0]);//Указатель на название класса
initialarray(#PWNDCLASS[0], 0);//Обнуляем структуру
PWNDCLASS[1] = WinProc;
PWNDCLASS[6] = LoadCursor(0, IDC_ARROW);
PWNDCLASS[9] = address(#Class[0]); // имя класса окна
int cursor_size_all = LoadCursor(0, IDC_SIZEALL);
if (RegisterClass(CLASS)==0){messagebox("Не удалось зарегистрировать класс"); goto er;}
int Win=CreateWindow(WS_EX_TOPMOST | WS_EX_LAYERED , address(#Class[0]), "", WS_POPUP | WS_VISIBLE, 200, 100, 400, 300, 0, 0, 0, 0);
SetLayeredWindowAttributes(Win, 0, 255, LWA_ALPHA); // уровень прозрачности от 0 до 255
win w = window ("Program Manager", "Progman", -1);
visualwindow(formatiw(Win), 0, 0, 0, 400, 300, 0, 0 , 100, w);
while(getkeystate(90)==0) // пока не нажата клавиша Z
{
textout(0, 0, 0, "Нажать Z чтобы остановить скрипт", 1);
sleep(1);
}
disablevisualwindow(0);
sendmessage(WM_CLOSE, 0, 0, formatiw(Win));
UnregisterClass(address(#Class[0]), 0);
er:;
function getmessage (WM_LBUTTONDOWN)
{
SetCursor(cursor_size_all);
sendmessage(WM_NCLBUTTONDOWN, HTCAPTION, 0, formatiw(Win)); // перетаскивание окна за клиентскую часть
} |
|
|
|