Так что я действительно нашел обходной путь для этой проблемы. В Windows Mobile есть какая-то ошибка, которая приводит к зависанию экрана, если на экране отсутствует HTML <1 страница. Итак, окончательное решение </p>
1) Придерживайтесь обработки WM_SETTINGCHANGE
сообщения только тогда, когда на телефоне нет физической клавиатуры. Если да, то я бы позволил моей программной клавиатуре перекрывать видимые поля. Обратите внимание, что если устройство имеет физическую клавиатуру, программная клавиатура не появляется по умолчанию, если она не вызывается явно, и после этого сохраняет это поведение ..
case WM_SETTINGCHANGE: {
SIPINFO si;
switch( wParam )
{
case SPI_SETSIPINFO: {
memset( &si, 0, sizeof( si ) );
si.cbSize = sizeof( si );
if( SHSipInfo( SPI_GETSIPINFO, 0, &si, 0 ) ) {
RECT rcMenuBar;
// Get the size of the menu bar
GetWindowRect(g_hWndMenuBar, &rcMenuBar);
// Keyboard opens up
if(si.fdwFlags == 0x00000003) {
} else if(si.fdwFlags == SIPF_DOCKED || si.fdwFlags==10) {
// keyboard closes down - weird that this msg comes when keyboard is closed instead of SIPF_OFF
// visible area above menu bar
si.rcVisibleDesktop.bottom -= (rcMenuBar.bottom - rcMenuBar.top);
}
MoveWindow(webControlHWND, 0, 0, (si.rcVisibleDesktop.right - si.rcVisibleDesktop.left), (si.rcVisibleDesktop.bottom - si.rcVisibleDesktop.top), TRUE);
}
break;
}
}
break;
}
2) Внедрить прозрачный PNG-файл длиной в 1 страницу
Если в телефоне нет физической клавиатуры, убедитесь, что в конце каждого HTML-кода отображается «прозрачный PNG-файл длиной 1 страница». Я знаю, что большинство людей не могут этого сделать, так как HTML происходит из других источников. Но это то, что я сделал, и это работает сейчас. Это только для того, чтобы избавиться от проблемы зависания, которая происходила другим образом. Это гарантирует, что все страницы имеют полосу прокрутки без беспокойства о содержании. Недостатком является то, что пользователь может прокручивать пустое пространство внизу (хотя это ни на что не повлияет).
p.s - Это была удачная находка, и я действительно не знаю, почему у MS тоже такая хромая ошибка.
Пока я тестировал свое приложение с более длинной версией HTML, оно всегда работало, а мои реальные тесты - нет. Именно тогда я попробовал пустой PNG в конце, и это сработало. :)