LINUX.ORG.RU

Xlib + XSendEvent


0

0

Есть прога, которая отображает в отдельном окне рисунок. Затем она производит некие "вычисления" после чего ей нужно в этом же окне отобразить другой рисунок. Как это сделать? Подозреваю, что нужно отправить сообщение самому себе. Пока никак не получается... Условия отображения нового рисунка никак не связаны с переферией, т.е. с клавиатурой, мышкой и т. д.


Может я чего не понял... а почему не просто XDrawSomething? Какая реакция планируется на получение сообщения?

vnp
()
Ответ на: комментарий от vnp

Я не очень в Xlib... Постараюсь объяснить ;) Идея примерно такая: есть несколько картинок в jpeg. Мне нужно отобразить одну из них в новом окне (это я сделал), затем подождать какое-то время и отобразить другую в этом же окне (именно в этом же окне - задача такая ;))). В какой-то момент я выбираю на какие события будет реагировать окно: XSelectInput(display, window, ExposureMask) // пока, допустим, только эта маска

Затем в бесконечном цикле получаю события: while(1) { XNextEvent(display, &x_event); switch(x_event.type) { case Expose: ... XPutImage(...); //отображаю окно с рисунком ... sleep(10); ... XSendMessage(...); // Теперь хочу передать событие (получается, что самому себе) о том, // что нужно менять рисунок break;

case ClientMessage: // Принимаю это событие и отображаю другой рисунок XPutImage(...); ... Sleep(10); ... XSendMessage(...); // Посылаю следующее событие и т.д. break; } }

Вот с XSendMessage у меня и не получается. Я точно не знаю какую там в аргументах указывать маску (пробовал разные), или ошибаюсь где-то в case ClientMessage: ... break; А может в этом случае весь алгоритм неудачен и можно сделать это проще? Готовые софтины мне не подходят (за исключением просмотра исходников), нужно своять свою... Буду очень благодарен за совет ;)

Varvar
() автор топика
Ответ на: комментарий от vnp

Тоже самое, только нормально отформатировано ;)))

Я не очень в Xlib... Постараюсь объяснить ;)
Идея примерно такая: есть несколько картинок в jpeg. Мне нужно отобразить одну из них в новом окне (это я сделал), затем подождать какое-то время и отобразить другую в этом же окне (именно в этом же окне - задача такая ;))). 
В какой-то момент я выбираю не какие события будет реагировать окно:
XSelectInput(display, window, ExposureMask) 
// пока, допустим, только эта маска

Затем в бесконечном цикле получаю события:
while(1) {
   XNextEvent(display, &x_event);
   switch(x_event.type) {
      case Expose:
      ...   
      XPutImage(...); //отображаю окно с рисунком
      ...
      sleep(10);
      ...
      XSendMessage(...);
// Теперь хочу передать событие (получается, что самому себе) о том, // что нужно менять рисунок
      break;

      case ClientMessage:
// Принимаю это событие и отображаю другой рисунок
      XPutImage(...);
      ... 
      Sleep(10);
      ...
      XSendMessage(...);
// Посылаю следующее событие и т.д.
      break;
   }
}

Вот с XSendMessage у меня и не получается. Я точно не знаю какую там в аргументах указывать маску (пробовал разные), или ошибаюсь где-то в 
case ClientMessage:
...
break;
А может в этом случае весь алгоритм неудачен и можно сделать это проще? Готовые софтины мне не подходят (за исключением просмотра исходников), нужно своять свою...
Буду очень благодарен за совет ;)

Varvar
() автор топика
Ответ на: комментарий от Varvar

На кой ляд тебе XSendMessage? Почему бы сразу после sleep не вывести новую картинку?

nobody ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.