掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
縦横比を固定したまま、リサイズする方法を教えてください。 (ID:68228)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
ボーダーをドラッグして、ウィンドウサイズを変更し、 ウィンドウサイズの変更が終了したときに1回だけ、 縦横比の調整をしたいのですが、 OnSizeでサイズ変更の終了をとっても、実際はドラック中に何度もOnSizeが呼ばれるため、調整がうまくいきません。 (ドラッグ以外の最大最小化でOnSizeに入った場合は、うまく調整できるので、調整のロジックミスではないと思ってます。) OnSize呼び出し後、左クリックが上がった時をサイズ変更終了にしようかと思ったのですが、ボーダー上の左クリックのイベントが取れず、これも失敗してしまいました。 縦横比固定で調整できる方法のご教授をお願いします。 (長文で申し訳ないですが、以下、ソースです) // szBefore:以前のクライアント領域のサイズ // szNow:現在、変更されたサイズ←このサイズを4:3に調整したいのです void CWndXXX::AdjustSize(CSize szBefore, CSize szNow) { INT h=0; INT w=0; if (szBefore==szNow) return; // 以前と同じサイズの場合、リサイズされてないので無視 //縦横比が適正なら無視 if ((szNow.cx%4==0) && ((szNow.cx/4*3)==szNow.cy)) return; // 変化の大きい方を基準に変更する。 if (abs(szBefore.cx-szNow.cx) > abs(szBefore.cy-szNow.cy)) { // 横幅を基準に変更 h=(szNow.cx/4)*3; w=(szNow.cx/4)*4; } else { // 縦幅を基準に変更 h=(szNow.cy/3)*3; w=(szNow.cy/3)*4; } // ウィンドウサイズ変更 CRect rc,rcWindow; GetClientRect(rc); GetWindowRect(rcWindow); // windowとクライアント領域の差(ボーダー部分) INT nFrameW=rcWindow.Width()-rc.Width(); INT nFrameH=rcWindow.Height()-rc.Height(); ClientToScreen(rc); rc.bottom=rc.top+h+nFrameH; rc.right=rc.left+w+nFrameW; MoveWindow(rc); } // サイズ変更 void CWndXXX::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); if (nType==SIZE_RESTORED) AdjustSize(m_szBefore, CSize(cx,cy)); //<-ここが繰り返し呼ばれるとなぜか、調整がうまくいきません・・・。 m_szBefore.SetSize(cx,cy); }
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.