Zireael |
Отправлено: 21 Сентября, 2019 - 02:40:29
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
ProgressBar (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define PBM_SETRANGE 1025
#define PBM_SETPOS 1026
#define PBS_SMOOTH 1
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, progress_bar1, progress_bar2;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 400, 200, 1, 1);
for(int i=0; i<100; i++)
{
sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar1));
sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar2));
sleep(30);
}
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
progress_bar1=CreateWindow(0, "msctls_progress32", "", WS_VISIBLE | WS_CHILD, 10, 10, 310, 25, gethwnd(0), 0, histance, 0, 0);
progress_bar2=CreateWindow(0, "msctls_progress32", "", PBS_SMOOTH + WS_VISIBLE | WS_CHILD, 10, 50, 150, 25, gethwnd(0), 0, histance, 0, 0);
sendmessage(PBM_SETRANGE, 0, 0+100*65536, formatiw(progress_bar1)); // минимальное и максимальное значение (от 0 до 100)
sendmessage(PBM_SETRANGE, 0, 0+100*65536, formatiw(progress_bar2));
} |
|
|
007wan |
Отправлено: 21 Сентября, 2019 - 08:30:27
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Спасибо. Вот еще пример по шире, если кому надо.
Код (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define PBM_SETRANGE 1025
#define PBM_SETPOS 1026
#define PBM_SETMARQUEE 1035
#define PBS_MARQUEE 8
#define PBS_SMOOTH 1
#define PBM_SETBARCOLOR 1033
#define PBM_SETBKCOLOR 8193
#define PBS_SMOOTHREVERSE 16
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, progress_bar1, progress_bar2, progress_bar3;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 400, 200, 1, 1);
for(int i=0; i<100; i++)
{
sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar1));
sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar2));
sendmessage(PBM_SETPOS, i, 0, formatiw(progress_bar3));
sleep(30);
}
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
progress_bar1=CreateWindow(0, "msctls_progress32", "", WS_VISIBLE | WS_CHILD, 10, 10, 310, 25, gethwnd(0), 0, histance, 0, 0);//резкая
progress_bar2=CreateWindow(0, "msctls_progress32", "", PBS_SMOOTH | WS_VISIBLE | WS_CHILD, 10, 50, 150, 25, gethwnd(0), 0, histance, 0, 0);//плавная
progress_bar3=CreateWindow(0, "msctls_progress32", "", PBS_SMOOTH | WS_VISIBLE | WS_CHILD | PBM_SETMARQUEE, 10, 90, 150, 25, gethwnd(0), 0, histance, 0, 0);//стоячая на месте или переливающаяся при новом стиле винды
sendmessage(PBM_SETRANGE, 0, 0+100*65536, formatiw(progress_bar1)); // минимальное и максимальное значение (от 0 до 100)
sendmessage(PBM_SETRANGE, 0, 0+100*65536, formatiw(progress_bar2));
sendmessage(PBM_SETBARCOLOR, 0, 65536, formatiw(progress_bar2));///черная полоса
sendmessage(PBM_SETBKCOLOR, 0, 255, formatiw(progress_bar2));/// красный фон
}
(Добавление)
Так же аналогично можно использовать
PBM_STEPIT и PBM_SETSTEP message, что бы не через цикл загрузка шла, а только по команде, например, назначить позицию или еще чего с перерисовкой полосы.
(Добавление)
ВАУ!КОД (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, progress_bar1, progress_bar2, progress_bar3, progress_bar4, progress_bar5;
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);
progress_bar1=CreateWindow(0, "msctls_trackbar32", "", WS_VISIBLE | WS_CHILD, 10, 10, 310, 25, gethwnd(0), 0, histance, 0, 0);//ползунок
progress_bar2=CreateWindow(0, "msctls_updown32", "", WS_VISIBLE | WS_CHILD, 10, 40, 310, 25, gethwnd(0), 0, histance, 0, 0);//кнопка вниз в вверх для эдита
progress_bar3=CreateWindow(0, "msctls_hotkey32", "", WS_VISIBLE | WS_CHILD, 10, 70, 100, 25, gethwnd(0), 0, histance, 0, 0);//ловит нажатые кнопки
progress_bar4=CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD, 10, 100, 310, 100, gethwnd(0), 0, histance, 0, 0);//другой тип Таба(не изучено)
progress_bar5=CreateWindow(0, "SysTreeView32", "", WS_VISIBLE | WS_CHILD, 10, 250, 310, 100, gethwnd(0), 0, histance, 0, 0);//ListView(тоже самое что и Listbox, но только с иконками и изображениями, столбцами и строками(не изучено)
}
(Добавление)
Как добавить столбцы(название) в LISTVIEW? Как добавить иконку влево перед текстом слева в строчку(строчки) и сам текст.
Код (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, progress_bar1, progress_bar2, progress_bar3, progress_bar4, progress_bar5;
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);
progress_bar1=CreateWindow(0, "msctls_trackbar32", "", WS_VISIBLE | WS_CHILD, 10, 10, 310, 25, gethwnd(0), 0, histance, 0, 0);//ползунок
progress_bar2=CreateWindow(0, "msctls_updown32", "", WS_VISIBLE | WS_CHILD, 10, 40, 310, 25, gethwnd(0), 0, histance, 0, 0);//кнопка вниз в вверх для эдита
progress_bar3=CreateWindow(0, "msctls_hotkey32", "", WS_VISIBLE | WS_CHILD, 10, 70, 100, 25, gethwnd(0), 0, histance, 0, 0);//ловит нажатые кнопки
//progress_bar5=CreateWindow(0, "SysTreeView32", "", WS_VISIBLE | WS_CHILD, 10, 200, 310, 100, gethwnd(0), 0, histance, 0, 0);//ListView(тоже самое что и Listbox, но только с иконками и изображениями, столбцами и строками(не изучено)
progress_bar4=CreateWindow(0, "SysListView32", "", WS_VISIBLE | WS_CHILD, 10, 200, 310, 100, gethwnd(0), 0, histance, 0, 0);//ListView(тоже самое что и Listbox, но только с иконками и изображениями, столбцами и строками(не изучено)
}
(Добавление)
Инфу про классы бралтут
(Добавление)
Подсветка вкладок TabCODE:
#define TCM_HIGHLIGHTITEM 4915
sendmessage(TCM_HIGHLIGHTITEM, 0, 1, formatiw(Object_Tab1));
sendmessage(TCM_HIGHLIGHTITEM, 1/*номер вкладки*/, 0/*Состояние(включено 1, выключено 0)*/, formatiw(Object_Tab1));
sendmessage(TCM_HIGHLIGHTITEM, 2, 0, formatiw(Object_Tab1)/*указатель на контрол*/);
(Добавление)
007wan пишет: Подсветка вкладок Tab Например, подсветить, уже выбранную, а остальные обнулить |
|
|
007wan |
Отправлено: 21 Сентября, 2019 - 11:46:09
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Что имеетяя ввиду под словом "Флаги"? Просто, я ищу функцию, которая изменяет флаги контрола, например, не было при создании WS-BORDER, а при нужном моменте - задать его, без создания контрола.
[url=https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/hh405402(v=vs.85)]SetWindowFeedbackSettings[/url]
(Просто мне нужно некое выделение при наведении на статик, при клике которой перейдет по ссылке, а создавать(рисовать) еще один прясоугольник я не хочу)
---
Как пользоваться это функцией?
SetLayeredWindowAttributes
Она меняет прозрачность слоя какого-то0(Отредактировано автором: 21 Сентября, 2019 - 11:48:20) |
|
|
007wan |
Отправлено: 21 Сентября, 2019 - 13:06:29
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: SetWindowLong.
CODE:
int Style_Object_Static[2];
int Style_Object_Static[2] = GetWindowLong(Object_Static[2], GWL_STYLE);
SetWindowLong(Object_Static[2], -16, Style_Object_Static[2] + WS_BORDER);
//SetWindowLong(Object_Static[2], GWL_STYLE, WS_BORDER);
Так?
(Добавление)
Может так?
CODE:
SetWindowLong(Object_Static[2], GWL_STYLE, WS_CHILD + WS_VISIBLE + SS_NOTIFY + WS_BORDER);
(Добавление)
НАписано нужно вызватьCODE: SetWindowLong(Object_Static[2], GWL_STYLE, WS_CHILD + WS_VISIBLE + SS_NOTIFY + WS_BORDER);
SetWindowPos(Object_Static[2], HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE | SWP_FRAMECHANGED);//с последним параметром обязательно для перерисовки
(Добавление)
НУ чё за фигня) не работает. |
|
|
Zireael |
Отправлено: 21 Сентября, 2019 - 18:53:13
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Изменить стиль окна (Отобразить)CODE:#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define GWL_STYLE -16
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int static;
int style;
createdialog(0);
showdialog(0, "Диалог", 300, 300, 200, 200, 1, 1);
loop()
{
SetWindowLong(static, GWL_STYLE, GetWindowLong(static, GWL_STYLE) + WS_BORDER); // убрать рамку
update(formatiw(gethwnd(0)));
sleep(500);
SetWindowLong(static, GWL_STYLE, GetWindowLong(static, GWL_STYLE) - WS_BORDER); // добавить рамку
update(formatiw(gethwnd(0)));
sleep(500);
}
function getmessage(0, WM_CREATE)
{
static=CreateWindow(0, "STATIC", "Статик", WS_BORDER | WS_CHILD | WS_VISIBLE, 20, 20, 60, 20, gethwnd(0), 0, 0, 0); // текст
} |
|
|
Zireael |
Отправлено: 21 Сентября, 2019 - 22:31:14
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: добавить строки столбцы в листвиев
ListView (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define LVM_INSERTCOLUMN 4193
#define LVM_INSERTITEM 4173
#define LVM_SETITEM 4172
#define LVCF_FMT 1
#define LVCF_WIDTH 2
#define LVCF_TEXT 4
#define LVCF_SUBITEM 8
#define LVCFMT_LEFT 0
#define LVS_REPORT 1
#define LVIF_TEXT 1
#define CP_ACP 0
external(INT, "MultiByteToWideChar", "MultiByteToWideChar", "Kernel32.dll");
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll");
int histance, listview;
createdialog(0);
showdialog(0, "Dialog", 300, 300, 600, 500, 1, 1);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
histance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
listview=CreateWindow(0, "SysListView32", "", LVS_REPORT | WS_VISIBLE | WS_CHILD | WS_BORDER, 10, 10, 300, 200, gethwnd(0), 0, histance, 0, 0);
// добавить столбцы в список
add_column(listview, 2, "Столбец3", 100); // хендл ListView, индекс столбца, текст столбца, ширина столбца
add_column(listview, 1, "Столбец2", 100);
add_column(listview, 0, "Столбец1", 100);
// добавить строки в список
add_item(listview, "Строка3"); // хендл ListView, текст строки
add_item(listview, "Строка2");
add_item(listview, "Строка1");
// добавить подстроки в список
add_subitem(listview, 1, 0, "Подстрока1"); // хендл ListView, индекс столбца, номер строки, текст подстроки
add_subitem(listview, 2, 0, "Подстрока2");
add_subitem(listview, 1, 1, "Подстрока3");
add_subitem(listview, 2, 1, "Подстрока4");
add_subitem(listview, 1, 2, "Подстрока5");
add_subitem(listview, 2, 2, "Подстрока6");
}
function add_column(int handle_list, int num_column, string text_column, int width_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVCOLUMN[11];
initialarray(#LVCOLUMN[0], 0);
LVCOLUMN[0]=LVCF_FMT + LVCF_WIDTH + LVCF_TEXT + LVCF_SUBITEM;
LVCOLUMN[1]=LVCFMT_LEFT;
LVCOLUMN[2]=width_column;
LVCOLUMN[3]=address(#text_list[0]);
LVCOLUMN[5]=num_column;
ansi_unicode(text_column, #text_list[0], sizearray(text_list));
sendmessage(LVM_INSERTCOLUMN, 0, address(#LVCOLUMN[0]), formatiw(handle_list));
}
function add_item(int handle_list, string text_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT;
LVITEM[5]=address(#text_list[0]);
ansi_unicode(text_column, #text_list[0], sizearray(text_list));
sendmessage(LVM_INSERTITEM, 0, address(#LVITEM[0]), formatiw(handle_list));
}
function add_subitem(int handle_list, int num_column, int num_string, string text_column)
{
char text_list[99];
strcpy(#text_list[0], text_column);
int LVITEM[15];
initialarray(#LVITEM[0], 0);
LVITEM[0]=LVIF_TEXT;
LVITEM[1]=num_string;
LVITEM[2]=num_column;
LVITEM[5]=address(#text_list[0]);
ansi_unicode(text_column, #text_list[0], sizearray(text_list));
sendmessage(LVM_SETITEM, 0, address(#LVITEM[0]), formatiw(handle_list));
}
function ansi_unicode(string S, char #cc, int size_cc)
{
int count=MultiByteToWideChar(1251, CP_ACP, S, size(S), address(#cc[0]), size_cc);
cc[count*2]=0; cc[count*2+1]=0;
} |
|
|
|