掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ダイアログバーの角でサイズ変更するには? (ID:72329)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 高さと幅を一度に変更させたいのですが実現方法が分かりません。 4辺をドラッグしてのサイズ変更は実現できていると考えて良いのだろうか? http://support.microsoft.com/kb/143255/ja 一応参考ページ。 > ウィンドウの角をドラッグして、 > 知っているかたいましたら、ご教授下さい。 ↑で示したページに載っているコードを元に、とりあえず簡単に実現できた方法を一つ紹介。 ダイアログバーでこれが出来ないのは、フローティングツールバーで使われる CMiniDockFrameWnd に MFS_4THICKFRAME というスタイルが設定されているせい。 なので、MFS_4THICKFRAME を外す。 #include <afxpriv.h> CMainFrame::xxxxxxx { FloatControlBar(&dialogbar, ...); if (dialogbar.m_pDockBar != NULL) { dialogbar.m_pDockBar->GetParent()->ModifyStyle(MFS_4THICKFRAME, MFS_THICKFRAME); } } 次に CResizableDlgBar::CalcDynamicLayout(from http://support.microsoft.com/kb/143255/ja) に処理追加。 #include <afxpriv.h> CSize CResizableDlgBar::CalcDynamicLayout(int nLength, DWORD dwMode) { : if (dwMode & LM_MRUWIDTH) return m_sizeFloating; // ↓ここから追加 if (IsFloating()) { const int hittest = m_pDockContext->m_nHitTest; if (hittest == HTTOPLEFT || hittest == HTBOTTOMLEFT || hittest == HTTOPRIGHT || hittest == HTBOTTOMRIGHT) { CPoint cursor; ::GetCursorPos(&cursor); CRect rect; GetParentFrame()->GetClientRect(rect); GetParentFrame()->ClientToScreen(rect); if (nHitTest == HTTOPLEFT || nHitTest == HTBOTTOMLEFT) { m_sizeFloating.cx = max(0, rect.right - cursor.x); m_pDockContext->m_rectFrameDragHorz.left = rect.right - m_sizeFloating.cx; } if (nHitTest == HTTOPLEFT || nHitTest == HTTOPRIGHT) { m_sizeFloating.cy = max(0, rect.bottom - cursor.y); m_pDockContext->m_rectFrameDragHorz.top = rect.bottom - m_sizeFloating.cy; } if (nHitTest == HTTOPRIGHT || nHitTest == HTBOTTOMRIGHT) { m_sizeFloating.cx = max(0, cursor.x - rect.left); } if (nHitTest == HTBOTTOMLEFT || nHitTest == HTBOTTOMRIGHT) { m_sizeFloating.cy = max(0, cursor.y - rect.top); } return m_sizeFloating; } } : } これで一応それらしい動作はした。ただ細かな調整・制御は面倒なのでしていない。 実際にこのコードを使うなら細かな調整を加えた方が多分良い。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.