

Эксперт

Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2

|
ivantu , Как тебе стиль при наведении на вкладки?
Код (Отобразить)CODE:#define GWL_HINSTANCE -6
#define WS_EX_COMPOSITED 33554432
#define GWL_EXSTYLE -20
#define WS_VISIBLE 268435456
#define WS_CHILD 1073741824
#define WS_BORDER 8388608
#define TCIF_TEXT 1
#define TCM_INSERTITEM 4871
#define TCM_GETCURSEL 4875
#define SW_HIDE 0
#define SW_SHOW 5
#define TCS_HOTTRACK 64
external(INT, "CreateWindow", "CreateWindowExA", "User32.dll");
external(INT, "GetWindowLong", "GetWindowLongA", "User32.dll" );
external(INT, "SetWindowLong", "SetWindowLongA", "User32.dll" );
external(INT, "ShowWindow", "ShowWindow", "User32.dll" );
external(INT, "WindowFromPoint", "WindowFromPoint", "User32.dll" );
int hinstance;
int tab, current_tab=0;
char text[99];
int tagTCITEMA[7]={TCIF_TEXT, 0, 0, address(#text[0]), size(#text[0]), 0, 0}
int tab_ctrl[3][10]; // 3 вкладки по 10 или меньше контролов
int count_control_tab[3]={3, 1, 2} // количество контролов на каждой вкладке
int mouse_posX, mousePosY;
createdialog(0);
showdialog(0, "Dialog", 200, 200, 400, 300, 1, 1);
enabletimer(0);
loop()sleep(100);
function getmessage(0, WM_CREATE)
{
SetWindowLong(gethwnd(0), GWL_EXSTYLE, GetWindowLong(gethwnd(0), GWL_EXSTYLE) + WS_EX_COMPOSITED);
hinstance=GetWindowLong(gethwnd(0), GWL_HINSTANCE);
// контролы первой вкладки
tab_ctrl[0][0]=CreateWindow(0, "BUTTON", "Кнопка0", WS_VISIBLE | WS_BORDER | WS_CHILD, 30, 50, 80, 20, gethwnd(0), 0, 0, 0);
tab_ctrl[0][1]=CreateWindow(0, "BUTTON", "Кнопка1", WS_VISIBLE | WS_BORDER | WS_CHILD, 30, 80, 80, 20, gethwnd(0), 0, 0, 0);
tab_ctrl[0][2]=CreateWindow(0, "EDIT", "Edit", WS_VISIBLE | WS_BORDER | WS_CHILD, 130, 50, 80, 20, gethwnd(0), 0, 0, 0);
// контролы второй вкладки
tab_ctrl[1][0]=CreateWindow(0, "BUTTON", "Кнопка2", WS_BORDER | WS_CHILD, 30, 50, 80, 20, gethwnd(0), 0, 0, 0);
// контролы третьей вкладки
tab_ctrl[2][0]=CreateWindow(0, "BUTTON", "Кнопка3", WS_BORDER | WS_CHILD, 30, 50, 80, 20, gethwnd(0), 0, 0, 0);
tab_ctrl[2][1]=CreateWindow(0, "STATIC", "Статик", WS_CHILD, 130, 50, 80, 20, gethwnd(0), 0, 0, 0);
// tab, создавать после контролов
tab=CreateWindow(0, "SysTabControl32", "", WS_VISIBLE | WS_CHILD | TCS_HOTTRACK, 10, 10, 300, 150, gethwnd(0), 0, hinstance, 0, 0);
strcpy(#text[0], "Вкладка0");
sendmessage(TCM_INSERTITEM, 0, address(#tagTCITEMA[0]), formatiw(tab));
strcpy(#text[0], "Вкладка1");
sendmessage(TCM_INSERTITEM, 1, address(#tagTCITEMA[0]), formatiw(tab));
strcpy(#text[0], "Вкладка2");
sendmessage(TCM_INSERTITEM, 2, address(#tagTCITEMA[0]), formatiw(tab));
// остальные контролы диалога
}
CREATE_TIMER(0, 100)
{
textbkcolor(255, 65280);
textout(0, 300, 150, "Выбрана вкладка: "+format(current_tab), 0);
getmouse(mouse_posX, mousePosY);
if(WindowFromPoint(mouse_posX, mousePosY)==tab)control_on_off(); // если был клик по табу
}
function control_on_off()
{
int i, j;
current_tab=sendmessage(TCM_GETCURSEL, 0, 0, formatiw(tab)); // получить номер вкладки
for(i=0; i<sizearray(tab_ctrl); i++) // для всех вкладок
{
if(i==current_tab)
{
for(j=0; j<count_control_tab[i]; j++)ShowWindow(tab_ctrl[i][j], SW_SHOW); // показать конролы текущей вкладки
}
else
{
for(j=0; j<count_control_tab[i]; j++)ShowWindow(tab_ctrl[i][j], SW_HIDE); // скрыть контролы других вкладок
}
}
}
(Добавление)
Не, я все стили просмотрел и мне этот зашел, а все остальные не очень)
(Добавление)
Только пока не знаю как изменить цвет при наведении.
(Добавление)
Кажись я нашел как изменить цвет ЛЮБОГО контрола в зависимости от: наведения, нажатия итд! Прорыв!
WM_DRAWITEM
DRAWITEMSTRUCT для WM_DRAWITEM
Тема закрыта! Продолжение в теме "вопрос по external и др - 4".
 |