007wan |
Отправлено: 24 Сентября, 2019 - 11:24:28
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Цитата: Как вывести такую кнопку на диалог,рядом с закрыть?
CODE:#define WS_EX_CONTEXTHELP 1024
#define WS_MINIMIZEBOX 131072
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 0);
loop()sleep(100);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_STYLE, GetWindowLong(gethwnd(0), GWL_STYLE) + WS_MINIMIZEBOX);
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) - WS_EX_CONTEXTHELP);
} Каряво выглядит, Текст диалога в правой стороне.
---
Может так нужно было?
Код (Отобразить)CODE:#define WS_EX_CONTEXTHELP 1024
#define WS_MINIMIZEBOX 131072
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",100, 100, 300, 300, 1, 0);
loop()sleep(100);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_STYLE, GetWindowLong(gethwnd(0), GWL_STYLE) + WS_MINIMIZEBOX);
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) + WS_EX_CONTEXTHELP);
} Изменил минус, на плюс))
Кстати, как убрать этот курсор, если его не убрать, то ладно, а можно обработать это сообщение? Может WM_HELP?
(Добавление)
Вот более нормальный вариант. Предыдущие 2 как-то с изъянами:
-можно было изменять размер диалога при растягивании за угол
-Название диалога было в правой стороне.
---
Заменить на:
CODE:SetWindowLong(gethwnd(1), GWL_STYLE, WS_SYSMENU + WS_CAPTION);//не давать растягивать диалог за края и дать ТОЛЬКО кнопку закрыть.
SetWindowLong(gethwnd(1), GWL_EXSTYLE, GetWindowLong(gethwnd(1), GWL_EXSTYLE) + WS_EX_CONTEXTHELP);//Дём кнопку помощи.
(Добавление)
007wan пишет: SetWindowLong(gethwnd(0), GWL_STYLE, GetWindowLong(gethwnd(0), GWL_STYLE) + WS_MINIMIZEBOX);
Цитата: Стиль WS_EX_CONTEXTHELP не может использоваться со стилями WS_MAXIMIZEBOX или WS_MINIMIZEBOX.
(Добавление)
Помогите запонить структуру в WM_HELP, что бы получать сообщение при нажатии на кнопку эту
(Добавление)
Не работает CODE:function getmessage(1, WM_HELP)
{
messagebox(1);
} (Отредактировано автором: 24 Сентября, 2019 - 11:28:59) |
|
|
Zireael |
Отправлено: 24 Сентября, 2019 - 12:13:36
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: запонить структуру в WM_HELP, что бы получать сообщение при нажатии на кнопку эту
Её не заполнить надо, а прочитать.
WM_HELP (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define WS_EX_CONTEXTHELP 1024
#define WS_CAPTION 12582912
#define WS_SYSMENU 524288
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define BS_MULTILINE 8192
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
int b0;
createdialog(0);
showdialog(0, "Диалог",150, 200, 400, 300, 1, 0);
loop()sleep(100);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_STYLE, WS_SYSMENU + WS_CAPTION);
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) + WS_EX_CONTEXTHELP);
b0=CreateWindow(0, "BUTTON", "Нажать на знак вопроса в заголовке, потом на эту кнопку", BS_MULTILINE | WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 10, 120, 90, gethwnd(0), 0, 0, 0);
}
function getmessage (0, WM_HELP)
{
textbkcolor(16000000, 65280);
textout(0, 300, 270, "Стуктура HELPINFO", 1);
textbkcolor(255, 65280);
textout(1, 300, 300, "cbSize "+format(addressi(message.lparam)), 1);
textout(2, 300, 320, "iContextType "+format(addressi(message.lparam+4)), 1);
textout(3, 300, 340, "iCtrlId "+format(addressi(message.lparam+8)), 1);
textout(4, 300, 360, "hItemHandle "+format(addressi(message.lparam+12)), 1);
textout(5, 300, 380, "dwContextId "+format(addressi(message.lparam+16)), 1);
textout(6, 300, 400, "MousePosX "+format(addressi(message.lparam+20)), 1);
textout(7, 300, 420, "MousePosY "+format(addressi(message.lparam+24)), 1);
loop()sleep(100);
} |
|
|
Zireael |
Отправлено: 24 Сентября, 2019 - 12:35:54
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:#define WS_EX_CONTEXTHELP 1024
#define WS_CAPTION 12582912
#define WS_SYSMENU 524288
#define GWL_EXSTYLE -20
#define GWL_STYLE -16
#define SC_CONTEXTHELP 61824
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
createdialog(0);
showdialog(0, "Диалог",150, 200, 400, 300, 1, 0);
loop()sleep(100);
function getmessage (0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_STYLE, WS_SYSMENU + WS_CAPTION);
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) + WS_EX_CONTEXTHELP);
}
function getmessage(0, WM_SYSCOMMAND)
{
if(message.wparam==SC_CONTEXTHELP)messagebox("+++"); // если нажат знак вопроса в заголовке
} |
|
|
007wan |
Отправлено: 24 Сентября, 2019 - 14:32:13
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Какие надо? Да Всё норм, только структуру не могу заполнить.
CODE:#define WS_VISIBLE 268435456
#define WS_BORDER 8388608
#define WS_CHILD 1073741824
#define GWL_HINSTANCE -6
#define TVM_INSERTITEMA 4352
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
external(INT, "SendMessage", "SendMessageA", "User32.dll");
int histance, Three;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 400, 500, 1, 1);
loop()
{
sleep(10);
}
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
Three=CreateWindow(0, "SysTreeView32", "", WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 10, 310, 100, gethwnd(0), 0, histance, 0, 0);
SendMessage(Three, TVM_INSERTITEMA, 0, "TVINSERTSTRUCTA");//структура
}
(Добавление)
Странно, что WM_SYSCOMMAND message.wparam == SC_CLOSE преобладает над WM_CLOSE
(Добавление)
Что я делаю не так?Code (Отобразить)CODE:function getmessage(1, WM_SYSCOMMAND)
{
if (message.wparam == SC_CONTEXTHELP)
{
messagebox(1);
}
//==============
if (message.wparam == SC_CLOSE)
{
DestroyWindow(gethwnd(1));//при вызове SC_CLOSE уничтожаю окно
}
}
function getmessage(1, WM_DESTROY)//при закрытии всё работает, при открытии заного -вылетает
{
MainWindow = formatiw(gethwnd(0));
Save_Settings();
Load_Settings();
Flash = 0;
EnableWindow(formatwi(MainWindow), 1);
ShowWindow(gethwnd(1), SW_HIDE);
}
Если сделать так:
Код (Отобразить)CODE:function getmessage(1, WM_SYSCOMMAND)
{
if (message.wparam == SC_CONTEXTHELP)
{
messagebox(1);
}
//==============
if (message.wparam == SC_CLOSE)//то окно будет закрываться(диалог) с задержкой, что не красиво.
{
//DestroyWindow(gethwnd(1));//убрать
MainWindow = formatiw(gethwnd(0));
Save_Settings();
Load_Settings();
Flash = 0;
EnableWindow(formatwi(MainWindow), 1);
ShowWindow(gethwnd(1), SW_HIDE);
}
} *про директиву не забыл |
|
|
ivantu |
Отправлено: 25 Сентября, 2019 - 11:34:55
|
Эксперт
Покинул форум
Сообщений всего: 732
Дата рег-ции: Нояб. 2013
Репутация: 14
|
как время будет, гляньте пожалуйста
Zireael пишет:
1 :
CODE:итемы ListView раскрашивать можно еще через WM_DRAWITEM с флагом LVS_OWNERDRAWFIXED,
там принципы те же, смотреть нужно описание флагов структуры DRAWITEMSTRUST
2 :
Тут много чего но не понятно для меня (для просмотра ссылки Вам необходимо авторизоваться)
(Отредактировано автором: 25 Сентября, 2019 - 11:35:36) |
|
|
|