void カスタム::On_ウィンドウ解像度切替時()
void カスタム::On_ウィンドウ解像度切替時() {
}
例①
void カスタム::On_ウィンドウ解像度切替時() {
// アプリとしての解像度変更の直後に「デスクトップの画面解像度」自体を変更してしまう。
int iScreenWidth = 1024;
int iScreenHeight = 768;
// 天翔記のウィンドウハンドル
HWND hwnd = FindWindow("Tenshouki95", NULL);
// アプリケーション内部の描画範囲を取得しておく。
RECT clientRect;
GetClientRect(hwnd, &clientRect);
// フルスクリーン用
static DEVMODE devmode;
// メモリクリア
ZeroMemory( &devmode, sizeof(devmode) );
// デスクトップの画面自体の解像度を変更してしまう
devmode.dmSize = sizeof(devmode);
devmode.dmPelsWidth = iScreenWidth;
devmode.dmPelsHeight = iScreenHeight;
devmode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
// このアプリ実行中解像度切替。
ChangeDisplaySettings( &devmode, CDS_FULLSCREEN );
// アプリにはタイトルバーの幅や境界線幅(いわゆるボーダー)があるのでそのピクセル数を求める
int iBorderX = GetSystemMetrics(SM_CXSIZEFRAME); // 境界線幅X方向
int iBorderY = GetSystemMetrics(SM_CYSIZEFRAME); // 境界線幅Y方向
int iHeightCaption = GetSystemMetrics(SM_CYCAPTION); // タイトルバーの高さ
// 左座標は、指定の幅から真ん中に配置
int iLeft = (iScreenWidth-clientRect.right)/2;
// 上座標の真ん中は求めておくけとまぁ使わないかな。
int iTop = (iScreenHeight-clientRect.bottom)/2;
// 携帯用解像度などもあるのでTOPは常に一番上で、左右は真ん中。
MoveWindow(hwnd, iLeft-iBorderX, -iBorderY-iHeightCaption, 0, 0, TRUE);
}