限制窗口拉伸范围(二)——OnSizing

之前用的GetMinMaxInfo,在VS2015中会导致:Report模式的CListCtrl随窗口拉伸时,表头无法绘制超过原大小的区域。其他版本和控件未测试,而OnSizing没有这问题。

前一方法没有问题,经过详细测试后已排除了上述原因,已确认是对ClistCtrl的误操作导致。

对于 OnSizing ,一开始在网上找了半天都是残缺的使用方法,那些人都没想想参数 fwSide (Forward Side)有没有用,最后我为了代码可读性找了半天,最终通过VS的自动补完找到了宏定义。

例程只限制了最小范围,但完全可以实现限制最大范围。

其中 MINI_WIDTH 、 MINI_HEIGHT 为自定义的最小范围, WMSZ_XXXXXX 表示你拉伸的起点方向(共八个)

void CMyDlg::OnSizing(UINT fwSide, LPRECT pRect)
{
    if (pRect->right - pRect->left < MINI_WIDTH) {
        if (fwSide == WMSZ_LEFT
            || fwSide == WMSZ_TOPLEFT
            || fwSide == WMSZ_BOTTOMLEFT) {
            pRect->left = pRect->right - MINI_WIDTH;
        }
        else {
            pRect->right = pRect->left + MINI_WIDTH;
        }
    }
    if (pRect->bottom - pRect->top < MINI_HEIGHT) {
        if (fwSide == WMSZ_TOP
            || fwSide == WMSZ_TOPLEFT
            || fwSide == WMSZ_TOPRIGHT) {
            pRect->top = pRect->bottom - MINI_HEIGHT;
        }
        else {
            pRect->bottom = pRect->top + MINI_HEIGHT;
        }
    }
    CDialogEx::OnSizing(fwSide, pRect);
}

 

posted @ 2016-04-21 18:25  流忧  阅读(830)  评论(0编辑  收藏  举报