После скрытия диалогового приложения на платформе Windows Mobile пользователь больше не может его активировать - PullRequest
0 голосов
/ 24 августа 2011

Я борюсь с одной проблемой в программировании Windows Mobile (диалоговое приложение).

У меня есть диалоговое приложение MFC. Приложение создано так:

BOOL MyApp::InitInstance()
{
    MainDlg dlg;
    dlg.DoModal();

    m_pMainWnd = &dlg;

    return FALSE;
}

Это работает просто отлично. Но у него есть большая проблема. Если пользователь сворачивает приложение (например, нажимая кнопку «Домой»), он не может снова получить окно приложения, что немыслимо (потому что приложение подключается к внешним устройствам, и в этом случае необходимо сбросить настройки телефона и устройства).

У меня было решение, но я не смог его реализовать: создайте CFrameWnd, которое будет основным окном, и это окно будет «загружать» диалоги. Это будет означать, что у приложения будет окно, и пользователь сможет использовать диспетчер задач и вывести его наверх (это было невозможно, поскольку диалоговое приложение не указано в приложениях в диспетчере задач).

Я был бы очень признателен за помощь опытного разработчика, который обладает лучшими навыками в MFC, чем я.

Для получения дополнительной информации: я использую eVC ++ 4.0 с SP 3

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Ну, я наконец понял это. Я выключил Title bar, поэтому диспетчер задач не показывал мое приложение, потому что у него не было никакого окна.

Но после запуска приложения оно имеет заголовок на панели задач и заголовок заголовка. Чтобы удалить строку заголовка и рамку, я оставил следующие параметры:

  • [OK] Строка заголовка
  • Бордюр - тонкий

В коде я сделал это:

BOOL MyDlg::OnInitDialog()
{
     ...

     ModifyStyle(WS_BORDER, 0, SWP_FRAMECHANGED);
     MoveWindow(...);
}

Теперь в моем приложении есть окно - оно отображается в диспетчере задач, а также я использую как можно больше места.

0 голосов
/ 24 августа 2011

Просто предположение: повторная активация диалога каким-то образом зависит от элемента m_pMainWnd, который не устанавливается до после возврата DoModal, , т. Е. ,когда диалог закрыт .Он не будет закрыт, когда будет скрыт , поэтому m_pMainWnd остается неинициализированным.

Попробуйте установить до вызова DoModal.

...