更改View的客户区域

时间:2016-07-07 11:44:44

标签: c++ mfc sdi

我有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);
}

1 个答案:

答案 0 :(得分: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);
}