限制窗口拉伸範圍(二)——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);
}
相關文章
相關標籤/搜索