ИУП, кнопка, дерево, матрица

1) Я пытаюсь загрузить изображение ico в IUPbutton, но безуспешно.
После связывания библиотеки IM и добавления правильного заголовка это мой подход:

Ihandle *btn1, *btn2;
Ihandle* img1;

btn1 = IupButton("", NULL);
IupSetAttribute(btn1, "MINSIZE", "24x24");
btn2 = IupButton("", NULL);
IupSetAttribute(btn2, "MINSIZE", "24x24");

img1 = IupImage(16, 16, IupLoadImage("icons\\home_16x16.ico"));
IupSetAttribute(btn1, "IMAGE", "img1");

frame = IupHbox(btn1, btn2, NULL);
dlg = IupDialog(IupHbox(mat, IupVbox(frame, tree, NULL), NULL));

IUP не сообщает об ошибках, но изображение не отображается на кнопке btn1.
Как загрузить изображение из файла в кнопку в режиме RGBA?

2) Я заполняю IupTree данными из базы данных sqlite в следующем порядке: «Имя» (которое является корневым), а затем около 170 ветвей с 1-10 листами. VALUE установлено на 0 и выбрано 'Name'.
Как я могу получить с помощью кода расширенное дерево до первых ветвей, например, когда я дважды щелкаю по 'Name'?
Я пробую атрибут EXPANDALL, но затем все листы расширяются, что не нужен.

3) Как я могу получить id элемента IUPtree в обратном вызове k_any f. е. при нажатии клавиши ENTER?

4) Как я могу получить текст элемента IUPtree из идентификатора в обратных вызовах executeleaf и branchopen?

5) Как я могу пройти через IUPtree, чтобы получить идентификатор, текст, вид элемента (ветка / лист)?

6) Есть ли здесь способ на IUPmatrix поймать событие keyUP или keyRELEASED, как мы получаем keyPRESS в K_ANY?


c iup
person Wine Too    schedule 21.04.2013    source источник


Ответы (1)


1) Уделите больше внимания типу данных каждой функции. Обратите внимание, что IupLoadImage уже возвращает Ihandle. Так что вместо:

img1 = IupImage(16, 16, IupLoadImage("icons\\home_16x16.ico"));

вам следует сделать это:

img1 = IupLoadImage("icons\\home_16x16.ico");

Также, если вы сделаете это:

IupSetAttribute(btn1, "IMAGE", "img1");

вы указываете строку, вы должны каким-то образом связать строку «img1» с Ihandle img1. Это две очень разные вещи. Проверьте документацию IupImage. Или вы делаете:

IupSetHandle("img1", img1);
IupSetAttribute(btn1, "IMAGE", "img1");

Или лучший способ:

IupSetAttributeHandle(btn1, "IMAGE", img1);

2) Вы пытались расширить только ту ветку, которую хотите расширить? Проверьте атрибут STATEid в документации IupTree.

3) Вы хотите, чтобы объект был в фокусе. Итак, получите атрибут VALUE IupTree. Обратите внимание, что клавиша Enter запускает обратный вызов executeleaf, у которого уже есть идентификатор элемента.

4) Проверьте атрибут TITLEid в документации.

5) Совет: при установке / получении атрибутов IupTree, IupMatrix или IupList вы можете использовать:

IupSetAttribute(ih, "TITLE3", "My Title");
  or
IupSetAttributeId(ih, "TITLE", 3, "My Title");

6) Как я уже говорил, IupMatrix наследуется от IupCanvas, поэтому вы также должны проверить обратные вызовы IupCanvas. Обратитесь к документации обратных вызовов IupMatrix, в конце есть объяснение обратных вызовов IupCanvas.

person Antonio Scuri    schedule 22.04.2013
comment
Спасибо Антонио. Я все время читаю документацию, но до сих пор не понимаю, где что искать. С вашей помощью я получу все необходимые мне функции, и моя первая программа IUP выглядит лучше, чем ожидалось. - person Wine Too; 23.04.2013