ランドスケープ モードで実行するポケット PC 用のアプリケーションを開発しています。
画面を回転させる関数 SetScreenOrientation(int angle) を書きました。この関数は、アプリケーションの開始時とアプリケーションの終了時に呼び出されます。向きを最小化/最大化するときに画面の向きも変更したい。これを行うために、次の関数を編集しました。
void CMainFrame::OnSize(UINT nType, int cx, int cy)
{
RECT r;
GetWindowRect(&r);
RECT rstatus;
rstatus.left = 0;
rstatus.top = 0;
rstatus.right = r.right;
rstatus.bottom = TOOLBAR_HEIGHT;
m_wndStatus.MoveWindow(&rstatus, TRUE);
RECT rcamera;
rcamera.left = 0;
rcamera.top = 0;
rcamera.right = r.right;
rcamera.bottom = r.bottom - TOOLBAR_HEIGHT;
m_wndCameraView.MoveWindow(&rcamera, TRUE);
if(nType == SIZE_MAXIMIZED)
{
CScreenOrientation::SetScreenOrientation(270);
}
if(nType == SIZE_MINIMIZED)
{
CScreenOrientation::SetScreenOrientation(0);
}
}
問題は、アプリケーションを最小化すると、関数が複数回実行されるため、画面が最初に 0 度に回転し、次に 270 度に回転することです。
デバッグ中に関数が 2 回目に実行されると、次の wincore コードが実行されることがわかります。
BOOL CWnd::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
...
switch (lpEntry->nSig)
{
...
case AfxSig_v_u_ii:
(this->*mmf.pfn_v_u_i_i)(static_cast<UINT>(wParam), LOWORD(lParam), HIWORD(lParam));
break;
...
}
}
アプリケーションの最小化/最大化または複数の機能の実行を妨げる可能性のあるトリックで画面の向きを設定する他の方法を知っている人はいますか?