gpt4 book ai didi

c++ - 在 Windows 10 中双击对话框窗口的顶部或底部边缘后如何阻止调整大小?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:53 27 4
gpt4 key购买 nike

我正在使用 Win32 使用 C++ 编写自定义弹出窗口。此弹出窗口的条件是它只能从底部向下调整大小。下面是这种限制的实现:

RECT rcInitialWindowRectangle = {0};

//The dialog has WS_THICKFRAME style

LRESULT CALLBACK DlgWndProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_INITDIALOG:
{
//Set minimum window size
::GetWindowRect(hDlg, &rcInitialWindowRectangle);
}
break;

case WM_SIZING:
{
//Restrict sizing on all sides but bottom
if(wParam != WMSZ_BOTTOM)
{
RECT* pRcWnd = (RECT*)lParam;

//Preserve all sides but bottom
int b = pRcWnd->bottom;
*pRcWnd = rcInitialWindowRectangle;
pRcWnd->bottom = b;

return TRUE;
}
}
break;

case WM_GETMINMAXINFO:
{
//The following is needed to restrict minimum window size
int w = rcInitialWindowRectangle.right - rcInitialWindowRectangle.left;
if(w != 0)
{
MINMAXINFO* pMMI = (MINMAXINFO*)lParam;

pMMI->ptMinTrackSize.x = w;
pMMI->ptMinTrackSize.y = rcInitialWindowRectangle.bottom - rcInitialWindowRectangle.top;

pMMI->ptMaxTrackSize.x = w;
}
}
break;

case WM_NCHITTEST:
{
//The following is needed to display correct cursor for resizing
POINT pnt = {GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)};

RECT rcWnd;
::GetWindowRect(hDlg, &rcWnd);

//L, T, R, B
RECT rcBtm = {rcInitialWindowRectangle.left,
rcWnd.bottom - 16, //Some arbitrary border
rcInitialWindowRectangle.right,
rcWnd.bottom};

return ::PtInRect(&rcBtm, pnt) ? HTNOWHERE : HTBORDER;
}
break;


return 0;
}

所以除了一件事,这是可行的。在 Windows 10 上,显然有一个新功能——当有人双击窗口的底部(或顶部)边缘时——这是一个记事本示例,您可以尝试:

enter image description here

那个窗口被调整(拉伸(stretch))到屏幕的顶部和底部(类似于最大化,但只是垂直的。)

所以我的问题是如何阻止这种双击调整大小? (在我的例子中,弹出窗口的顶部不应移动。)

附言。我的第一直觉是阻止所有对窗口边缘的双击,但后来我想也许有一种不那么野蛮的方法来实现这一点?

最佳答案

您已经在处理 WM_NCHITTEST。处理 WM_NCLBUTTONDBLCLK 并且不转发到 DefWindowProc 除非 HitTest (在 wParam 中)指示下帧。

关于c++ - 在 Windows 10 中双击对话框窗口的顶部或底部边缘后如何阻止调整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48515212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com