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

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

前一方法没有问题,通过详细测试后已排除了上述缘由,已确认是对ClistCtrl的误操做致使。测试

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

例程只限制了最小范围,但彻底能够实现限制最大范围。code

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

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);
}
相关文章
相关标签/搜索