【wc2007剪刀石头布】最小费用最大流

本文介绍了一种名为“距离标号连续最短增广路算法”的网络流算法,并给出了详细的代码实现。该算法适用于解决特定类型的网络流问题,在实际应用中表现出了优异的效果。

用的是我和盾盾研究出来的“距离标号连续最短增广路算法”,实测效果极佳

先贴代码,下次再解释

在 Windows API 编程中,如果你想**阻止窗口被最大化、最小化或还原**,可以通过以下几种方式实现: --- ## ✅ 方法一:修改窗口样式(最常用) ### 1. **阻止最大化** 最大化按钮的显示是由窗口样式 `WS_MAXIMIZEBOX` 控制的。如果你在创建窗口时不包含这个样式,窗口将没有最大化按钮。 ```cpp // 在注册窗口类时设置样式 wc.style = CS_HREDRAW | CS_VREDRAW; // 创建窗口时不使用 WS_MAXIMIZEBOX CreateWindow( L"WindowClass", L"My Window", WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX, // 去除最大化按钮 CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ``` ### 2. **阻止最小化** 同理,`WS_MINIMIZEBOX` 控制最小化按钮。去掉它即可禁用最小化按钮。 ```cpp CreateWindow( L"WindowClass", L"My Window", WS_OVERLAPPEDWINDOW & ~WS_MINIMIZEBOX, // 去除最小化按钮 CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ``` ### 3. **同时禁用最大化和最小化按钮** ```cpp CreateWindow( L"WindowClass", L"My Window", WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX & ~WS_MINIMIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ``` --- ## ✅ 方法二:在 `WM_GETMINMAXINFO` 中限制窗口大小 你可以通过响应 `WM_GETMINMAXINFO` 消息来限制窗口的最大化尺寸,从而阻止其最大化。 ```cpp case WM_GETMINMAXINFO: { MINMAXINFO* mmi = (MINMAXINFO*)lParam; RECT rc = { 0, 0, 800, 600 }; // 固定窗口大小 AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); mmi->ptMaxSize.x = rc.right - rc.left; mmi->ptMaxSize.y = rc.bottom - rc.top; mmi->ptMaxPosition.x = -8; // 防止最大化时窗口位置偏移 mmi->ptMaxPosition.y = -8; return 0; } ``` --- ## ✅ 方法三:在 `WM_SYSCOMMAND` 中拦截最大化/最小化命令 你可以在窗口过程中拦截 `WM_SYSCOMMAND` 消息,阻止用户点击最大化或最小化按钮。 ```cpp case WM_SYSCOMMAND: { switch (wParam & 0xFFF0) { case SC_MAXIMIZE: case SC_MINIMIZE: return 0; // 阻止最大化或最小化 default: return DefWindowProc(hWnd, message, wParam, lParam); } } ``` --- ## ✅ 方法四:在 `WM_WINDOWPOSCHANGING` 中限制窗口状态 你可以通过修改 `WINDOWPOS` 结构体来阻止窗口最大化或最小化。 ```cpp case WM_WINDOWPOSCHANGING: { WINDOWPOS* wp = (WINDOWPOS*)lParam; if (wp->flags & SWP_STATECHANGED) { if (IsIconic(hWnd) || IsZoomed(hWnd)) { wp->flags &= ~SWP_STATECHANGED; // 忽略状态变化 return 0; } } return DefWindowProc(hWnd, message, wParam, lParam); } ``` --- ## ✅ 方法五:设置窗口为固定大小(去除最大化按钮) ```cpp CreateWindow( L"WindowClass", L"My Window", WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_BORDER, // 固定大小窗口 CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); ``` --- ## ✅ 方法六:在菜单中移除最大化/最小化选项 你可以通过修改系统菜单来移除最大化/最小化选项。 ```cpp HMENU hMenu = GetSystemMenu(hWnd, FALSE); RemoveMenu(hMenu, SC_MAXIMIZE, MF_BYCOMMAND); RemoveMenu(hMenu, SC_MINIMIZE, MF_BYCOMMAND); DrawMenuBar(hWnd); ``` --- ## ✅ 总结 | 方法 | 描述 | |------|------| | `WS_MAXIMIZEBOX` / `WS_MINIMIZEBOX` | 移除按钮,最简单 | | `WM_GETMINMAXINFO` | 限制最大尺寸 | | `WM_SYSCOMMAND` | 拦截命令 | | `WM_WINDOWPOSCHANGING` | 控制窗口状态变化 | | `CreateWindow` 样式 | 设置为固定大小窗口 | | `GetSystemMenu` | 移除系统菜单项 | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值