Управление WPF в нативном взаимодействии - PullRequest
1 голос
/ 10 июня 2011

Я пишу приложение в нативном коде и хочу использовать WPF для библиотеки пользовательского интерфейса.Теперь я относительно легко отключаю взаимодействие, но в конечном итоге я пытаюсь написать собственное приложение с WPF в качестве библиотеки, а не приложение WPF с несколькими собственными расширениями.Тем не менее, я ищу решение для взаимодействия с определенными качествами, которые я просто не могу найти ни в каких примерах.

Во-первых, я определенно хочу написать свой собственный основной цикл.Я мог бы выполнять произвольные действия в нативном коде, и мне нужна возможность опроса, например, на каждой итерации.Мое приложение определенно не является «спящим, пока не нажмете что-то» приложением.

Во-вторых, я хочу иметь возможность контролировать WPF.Я хочу сказать, когда WPF обрабатывает ввод.Я хочу сказать, когда это делает.Я хочу, чтобы это сделало меня sammich, когда я так говорю.Это одна из самых больших проблем, которые у меня есть.Конечно, эти методы должны существовать внутри WPF, они просто нигде не раскрыты, и я не могу их найти.

Я изучал хостинг CLR, но, похоже, он не "пока не закончена "вещь, которую я ищу".Даже если я открою критический раздел или что-то еще, даже из управляемого кода нет способа заставить WPF делать то, что вы хотите.

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

Если я правильно понимаю ваш вопрос, похоже, что вы хотите написать свой собственный основной цикл / насос сообщений для WPF.Я помню, как читал об этом в ветке сообщений некоторое время назад.Это не полный ответ, но мне интересно, может ли он направить вас в правильном направлении.

Тема: Игровые циклы в WPF?интересно, как легко было бы написать собственный «игровой цикл» в рамках WPF.Под игровым циклом я подразумеваю накачку своих собственных событий в пользовательском Диспетчере, чтобы я мог контролировать частоту кадров моего приложения.

Ответ: Вы можете написать свой собственный насос сообщений.Только не звони Диспетчеру. Беги.Вам нужно прокачать сообщения, и вам необходимо вызвать ComponentDispatcher.RaiseThreadMessage в зависимости от ситуации.Используйте рефлектор, чтобы увидеть, что делает Dispatcher.PushFrame.

Конечно, это может не дать вам того, что вы хотите для "игрового цикла" ...

Источник: http://blogs.msdn.com/b/jaimer/archive/2009/06/29/wpf-discussions-090626.aspx

1 голос
/ 11 июня 2011

Я думаю, вы хотите посмотреть на HwndSource .Он содержит графический интерфейс WPF в качестве элемента управления win32.Хотя все немного сложнее, и вам, вероятно, лучше написать простое приложение WPF .net GUI и использовать его для управления собственным кодом, используя некоторую форму взаимодействия.MS на самом деле не думала о таком подходе к миграции (повторное использование существующего кода и добавление нового графического интерфейса), предпочитая заставить нас всех переписать весь наш код.

В Интернете множество примеров.Удачи.

PS.Конечно, вы можете попробовать текущий «золотой стандарт» в родном графическом интерфейсе - Qt .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...