IApplicationDesignModeSettings2
COM公式ドキュメント
開発ツールアプリケーションが、ネイティブの表示解像度、デバイスのスケール ファクター、アプリケーションのビュー レイアウトなど、Windows ストア アプリに報告されるシステムおよびユーザーの状態を動的に制御できるようにします。これにより、実機を用意することなく、幅広いフォーム ファクターに対してデザイン モードで動作する Windows ストア アプリをテストできます。また、通常はユーザーが制御する状態への変更をテストできるようにし、さまざまなシナリオで Windows ストア アプリをテストできます。
解説(Remarks)
このインターフェイスは、CLSID_ApplicationDesignModeSettings を CoCreate することで取得します。これは、元の IApplicationDesignModeSettings インターフェイスの拡張です。
例
この例では、Visual Studio が、サイズ 1366x768 のディスプレイで最小幅をオーバーライドしたアプリケーションをデザイン モードで起動しています。次に、アプリケーションの幅をユーザーが動的に変更できるスライダー コントロールを有効にしています。これを行うには、この種類のアプリケーションで許可される最小サイズと最大サイズを計算するために、新しい SetApplicationViewMinWidth と GetApplicationSizeBounds API を使用する必要があります。
IInitializeWithWindow::Initialize の詳細については、CoreWindow に依存する WinRT UI オブジェクトの表示を参照してください。
ComPtr<IApplicationDesignModeSettings> spDesignModeSettings;
// CoCreate the design mode settings object
HRESULT hr = CoCreateInstance(CLSID_ApplicationDesignModeSettings, nullptr, CLSCTX_INPROC, IID_PPV_ARGS(&spDesignModeSettings));
if (SUCCEEDED(hr))
{
ComPtr<IInitializeWithWindow> spInitializeWithWindow;
hr = pDesignModeSettings->QueryInterface(IID_PPV_ARGS(&spInitializeWithWindow);
if (SUCCEEDED(hr))
{
// Before we set any design mode state, we must first initialize the
// design mode settings object with a proxy core window. Since apps
// running in design mode don't have an actual core window, we must
// supply an HWND that can be used as a proxy.
hr = spInitializeWithWindow->Initialize(hwndProxyCoreWindow);
}
if (SUCCEEDED(hr))
{
// Set the native display size to 1366x768
SIZE sizeDisplay = {1366, 768};
hr = spDesignModeSettings->SetNativeDisplaySize(sizeDisplay);
if (SUCCEEDED(hr))
{
// Set the native display orientation to landscape
hr = spDesignModeSettings->SetNativeDisplayOrientation(NDO_LANDSCAPE);
if (SUCCEEDED(hr))
{
// Set the scale factor to 100%
DEVICE_SCALE_FACTOR scaleFactor = SCALE_100_PERCENT;
hr = spDesignModeSettings->SetScaleFactor(scaleFactor);
}
}
}
if (SUCCEEDED(hr))
{
// Override the app’s minimum width
hr = spDesignModeSettings->SetApplicationViewMinWidth(AVMW_320);
if (SUCCEEDED(hr))
{
SIZE sizeAppMin;
SIZE sizeAppMax;
hr = spDesignModeSettings->GetApplicationSizeBounds(&sizeAppMin, &sizeAppMax);
if (SUCCEEDED(hr))
{
// Push the min and max size to the slider control,
// to update the values that it maps to
…
// Start by sizing the app to its min bound, so compute the
// resulting view orientation
APPLICATION_VIEW_ORIENTATION viewOrientation;
hr = spDesignModeSettings->GetApplicationViewOrientation(sizeAppMin, &viewOrientation);
if (SUCCEEDED(hr))
{
// Set the app view orientation
hr = spDesignModeSettings->SetApplicationViewOrientation(viewOrientation);
}
}
}
}
if (SUCCEEDED(hr))
{
// Set the adjacent display edges so that the app is touching just the left edge of the screen
hr = spDesignModeSettings->SetAdjacentDisplayEdges(ADE_LEFT);
}
}
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
デザイン モード ウィンドウ用にエミュレートされるディスプレイの向きを設定します。
| nativeDisplayOrientation | NATIVE_DISPLAY_ORIENTATION | in | エミュレートするディスプレイのネイティブの向き。 NDO_LANDSCAPE (0)横向き。表示の幅が高さより大きくなります。 NDO_PORTRAIT (1)縦向き。表示の高さが幅より大きくなります。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
デザイン モード ウィンドウで使用するウィンドウの向きを設定します。
| viewOrientation | APPLICATION_VIEW_ORIENTATION | in | 使用するデザイン モード ウィンドウの向き。AVO_LANDSCAPE または AVO_PORTRAIT のいずれかです。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
アプリケーション ウィンドウを、エミュレートされたディスプレイの端に隣接させるかどうかを設定します。
| adjacentDisplayEdges | ADJACENT_DISPLAY_EDGES | in | 隣接させる端。 ADE_NONE (0x0)ウィンドウはいずれの端にも隣接しません。 ADE_LEFT (0x1)ウィンドウの左端が隣接します。 ADE_RIGHT (0x2)ウィンドウの右端が隣接します。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
このメソッドは、デザイン モードのアプリケーションが Windows 8 のロック画面に情報を表示できるかどうかを決定します。
| isOnLockScreen | BOOL | in | TRUE に設定すると、アプリケーションはロック画面に情報を表示します。FALSE に設定すると、情報は表示されません。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
アプリケーションのデザイン モード ウィンドウで望ましい最小幅を設定します。
| viewMinWidth | APPLICATION_VIEW_MIN_WIDTH | in | 最小幅の値。 AVMW_DEFAULT (0)既定の最小幅を使用します。 AVMW_320 (1)最小幅を 320 ピクセルに設定します。 AVMW_500 (2)最小幅を 500 ピクセルに設定します。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
このメソッドは、アプリケーションがサポートするサイズの境界を取得します。
| minApplicationSizePixels | SIZE* | out | このメソッドが正常に返された場合、可能な最小のウィンドウ サイズを定義する SIZE 構造体へのポインターを受け取ります。 |
| maxApplicationSizePixels | SIZE* | out | このメソッドが正常に返された場合、可能な最大のウィンドウ サイズを定義する SIZE 構造体へのポインターを受け取ります。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
アプリケーションのデザイン モード ウィンドウの向きを取得します。
| applicationSizePixels | SIZE | in | アプリケーション ウィンドウのサイズ。 |
| viewOrientation | APPLICATION_VIEW_ORIENTATION* | out | このメソッドが正常に返された場合、APPLICATION_VIEW_ORIENTATION 構造体へのポインターを受け取ります。 |
戻り値
種類: HRESULT
このメソッドが成功すると S_OK を返します。それ以外の場合は HRESULT エラー コードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IApplicationDesignModeSettings2 "{490514E1-675A-4D6E-A58D-E54901B4CA2F}" #usecom global IApplicationDesignModeSettings2 IID_IApplicationDesignModeSettings2 "{958A6FB5-DCB2-4FAF-AAFD-7FB054AD1A3B}" #comfunc global IApplicationDesignModeSettings2_SetNativeDisplayOrientation 9 int #comfunc global IApplicationDesignModeSettings2_SetApplicationViewOrientation 10 int #comfunc global IApplicationDesignModeSettings2_SetAdjacentDisplayEdges 11 int #comfunc global IApplicationDesignModeSettings2_SetIsOnLockScreen 12 int #comfunc global IApplicationDesignModeSettings2_SetApplicationViewMinWidth 13 int #comfunc global IApplicationDesignModeSettings2_GetApplicationSizeBounds 14 var,var #comfunc global IApplicationDesignModeSettings2_GetApplicationViewOrientation 15 int,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IApplicationDesignModeSettings2 "{490514E1-675A-4D6E-A58D-E54901B4CA2F}" #usecom global IApplicationDesignModeSettings2 IID_IApplicationDesignModeSettings2 "{958A6FB5-DCB2-4FAF-AAFD-7FB054AD1A3B}" #comfunc global IApplicationDesignModeSettings2_SetNativeDisplayOrientation 9 int #comfunc global IApplicationDesignModeSettings2_SetApplicationViewOrientation 10 int #comfunc global IApplicationDesignModeSettings2_SetAdjacentDisplayEdges 11 int #comfunc global IApplicationDesignModeSettings2_SetIsOnLockScreen 12 int #comfunc global IApplicationDesignModeSettings2_SetApplicationViewMinWidth 13 int #comfunc global IApplicationDesignModeSettings2_GetApplicationSizeBounds 14 sptr,sptr #comfunc global IApplicationDesignModeSettings2_GetApplicationViewOrientation 15 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。