2

私は頭を抱えており、ここの誰かが助けてくれることを望んでいます。

EmbeddedC++で記述されたWindowsMo​​bileOSバージョン5および/または6で実行されているアプリケーションを使用しています。問題は、ユーザーがデバイスのキーボードを開くなど、表示の向きを切り替えるために何かを行うと、アプリのコントロールがすべて混乱して移動することです。

この時点で、私はこれを永遠に見ていて、少し必死になっています。ですから、もし存在すれば、私は今、これに対する迅速で汚い解決策を望んでいると思います。可能であれば、デバイスをポートレートディスプレイに効果的にロックするか、ディスプレイを常にポートレートモードに戻すことができるように、向きの切り替えを検出する方法を見つけたいと思います。

私は記事を次々と読んでいますが(投稿の下部にある部分的なリストを参照)、これを解決することができませんでした。

私がつかんで、方向をリセットするためにコードを適用する(まだ解決されていない)ことができるある種のイベントがありますか?

これが私が理解しようとしてきたいくつかの記事のリストです:

4

2 に答える 2

4

この関数は、画面がプロトレイト モードかどうかを検出する必要があります。

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;
}

この関数は、縦向きモードに回転する必要があります。

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);
}

WM_SETTINGCHANGE回転を検出するには、メッセージを処理するトップ レベル ウィンドウ (親なし) が必要です。

//...in WndProc...
case WM_SETTINGCHANGE:
  if (!IsPortrait())
  {
    RotatePortrait();
  }
  break;
于 2010-08-17T03:08:47.243 に答える