Comment faire pour détecter le changement d'événement Orientation de l'écran dans Windows Mobile 5 et 6 App, avec Embedded C ++?

StackOverflow https://stackoverflow.com/questions/3472748

Question

Je suis en chemin sur ma tête, et espère que quelqu'un ici peut aider.

Je travaille avec une application qui est en cours d'exécution sur Windows Mobile OS, la version 5 et / ou 6, qui est écrit en C ++ embarqué. Le problème est que les contrôles dans l'application obtenir tous foiré et déplacés lorsque l'utilisateur fait quelque chose pour changer l'orientation d'affichage, telles que l'ouverture du clavier de l'appareil.

A ce moment, je cherche à ça pour toujours et je suis un peu désespéré devient. Donc, je suppose que j'espère maintenant une solution rapide et sale à cela, si l'on existe. Je voudrais essayer de verrouiller efficacement le dispositif en affichage portrait, si possible, ou peut-être trouver un moyen de détecter un commutateur d'orientation afin que je puisse forcer systématiquement l'affichage au mode portrait.

J'ai lu l'article après l'article (voir liste partielle en bas de post), mais tout simplement pas été en mesure de travailler cela.

Y at-il une sorte d'événement que les incendies que je peux saisir sur, puis appliquer le code (encore être élaborées) pour rétablir l'orientation?

Voici une liste de quelques-uns des articles que j'ai essayé de donner un sens:

Était-ce utile?

La solution

Cette fonction doit détecter si l'écran est en mode protrait:

BOOL IsPortrait()
{
  DEVMODE devmode;
  ZeroMemory(&devmode, sizeof(DEVMODE));
  devmode.dmSize = sizeof(DEVMODE);
  devmode.dmDisplayOrientation = DMDO_0;
  devmode.dmFields = DM_DISPLAYORIENTATION;
  ChangeDisplaySettingsEx(NULL, &devmode, NULL, CDS_TEST, NULL);

  return devmode.dmDisplayOrientation == DMDO_0;
}

Cette fonction doit tourner en mode portrait:

void RotatePortrait(void)
{
  DEVMODE devmode;
  ZeroMemory(&devmode, sizeof(DEVMODE));
  devmode.dmSize = sizeof(DEVMODE);
  devmode.dmFields = DM_DISPLAYORIENTATION;
  devmode.dmDisplayOrientation = DMDO_0;

  ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);
}

Vous aurez besoin d'une fenêtre de niveau supérieur (sans parent) qui gère le message de WM_SETTINGCHANGE pour détecter la rotation.

//...in WndProc...
case WM_SETTINGCHANGE:
  if (!IsPortrait())
  {
    RotatePortrait();
  }
  break;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top