自行完成对话框的Resizing功能

背景:

使对话框具有Resizing功能,但由于设置对话框的WS_THICKFRAME属性后,虽然具备了resizing功能,但却有厚厚的边框,非常不美观。

从网上到了方法,但由于自己简单改了改,所以本文不写为转载,纯属个人记录,切勿追究版权大笑


关键点:

1、ModifyStyle(WS_CAPTION|WS_THICKFRAME, 0)。

2、

LRESULT CDlgPlayer::OnNcHitTest(CPoint point)
{
    CRect       rectWindow;
    GetWindowRect(&rectWindow);
    if (point.x <= rectWindow.left + 3)
    {
        return HTLEFT;
    }
    else if (point.x >= rectWindow.right - 3)
    {
        return HTRIGHT;
    }
    else if (point.y <= rectWindow.top + 3)
    {
        return HTTOP;
    }
    else if (point.y >= rectWindow.bottom - 3)
    {
        return HTBOTTOM;
    }
    else if (
        (point.x <= rectWindow.left + 10) 
        && (point.y <= rectWindow.top + 10)
        )
    {
        return HTTOPLEFT;
    }
    else if (
        (point.x >= rectWindow.right - 10)
        && (point.y <= rectWindow.top + 10)
        )
    {
        return HTTOPRIGHT;
    }
    else if (
        (point.x <= rectWindow.left + 10)
        && (point.y >= rectWindow.bottom - 10)
        )
    {
        return HTBOTTOMLEFT;
    }
    else if (
        (point.x >= rectWindow.right - 10)
        && (point.y >= rectWindow.bottom - 10)
        )
    {
        return HTBOTTOMRIGHT;
    }
    else
    {
        return CDialog::OnNcHitTest(point);
    }
}

3、
void CDlgPlayer::OnNcLButtonDown(UINT nHitTest, CPoint point)
{
    CDialog::OnNcLButtonDown(nHitTest, point);


    if (nHitTest == HTTOP)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_TOP, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTBOTTOM)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_BOTTOM, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTLEFT)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_LEFT, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTRIGHT)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_RIGHT, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTTOPLEFT)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_TOPLEFT, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTTOPRIGHT)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_TOPRIGHT, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTBOTTOMLEFT)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_BOTTOMLEFT, MAKELPARAM(point.x, point.y));
    }
    else if (nHitTest == HTBOTTOMRIGHT)
    {
        SendMessage(WM_SYSCOMMAND, SC_SIZE|WMSZ_BOTTOMRIGHT, MAKELPARAM(point.x, point.y));
    }
}

4、

BOOL CDlgPlayer::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
    if(nHitTest == HTTOP || nHitTest == HTBOTTOM)  
    {
        SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS)));
        return TRUE;
    }
    else if(nHitTest == HTLEFT || nHitTest == HTRIGHT)  
    {
        SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZEWE)));
        return TRUE;
    }
    else if(nHitTest == HTTOPLEFT || nHitTest == HTBOTTOMRIGHT)
    {
        SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENWSE)));
        return TRUE;
    }
    else if(nHitTest == HTTOPRIGHT || nHitTest == HTBOTTOMLEFT)
    {
        SetCursor(LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENESW)));
        return TRUE;
    }
    else
    {
        return CDialog::OnSetCursor(pWnd, nHitTest, message);
    }
}

以上就ok了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值