2016-07-07 13 views
2

MFC SDIアプリケーションがあります。
リボン、ステータスバー、プロパティウィンドウがあります。ビューのクライアント領域を変更する

ビューのクライアント領域をx % 16にする必要があります。 ウィンドウ全体を調整することはできませんが、CMyViewを16ピクセルで割り切れるようにサイズ変更する必要があります。

これを行う方法はありますか? 。=(

void CMyView::OnSize(UINT nType, int cx, int cy) 
{ 
    cx -= cx % 16; 
    cy -= cy % 16; 

    CView::OnSize(nType, cx, cy); 

    RECT wr = { 0, 0, cx, cy }; 
    AdjustWindowRect(&wr, WS_OVERLAPPEDWINDOW, FALSE); 
} 
+0

'AdjustWindowRect'は何も調整していない、それは単に(希望クライアント矩形size_に基づいて、ウィンドウの四角形の必要なサイズを_calculates [MSのドキュメント]からの引用(https://でMSDN Microsoft.com/en-us/library/windows/desktop/ms632665(v = vs.85).aspx))。そして、 'CView :: OnSize'を別のサイズで呼び出すことはそれほど役に立ちません。(これを読んだドキュメントのどの部分を覚えていないか)。 –

+0

[MoveWindow](https://msdn.microsoft.com/en-us/library/windows/desktop/ms633534(v = vs.85).aspx)を使用して見ましたか? –

+0

私はいくつかの回避策を見つけました:1.ビュー用に追加の子ウィンドウを作成します。 2.サイズを変更したら、16ピクセル揃えてビューの中央に配置します。 –

答えて

3

WM_SIZE/OnSizeでこれを処理するには遅すぎるウィンドウがすでにその時点でサイズ変更されたためであるウィンドウサイズの変更を監視するために、代わりにON_WM_WINDOWPOSCHANGINGを使用し、次のように適用されます。

このコードは動作しません。変更:

void CMyWnd::OnWindowPosChanging(WINDOWPOS* wpos) 
{ 
    wpos->cx -= wpos->cx % 16; 
    wpos->cy -= wpos->cy % 16; 
    __super::OnWindowPosChanging(wpos); 
} 
関連する問題