1 2 | void カスタム::On_ウィンドウ解像度切替時() { } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | 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); } |