c - 阻止窗口最大化功能? (完全地)

标签 c user-interface winapi

我正在尝试创建一个行为类似于cmd.exe的窗口,特别是我不想支持最大化窗口,因为我只显示完全可见的文本行(垂直) 。到目前为止我想出了两种解决方案:

解决方案1:

case WM_SYSCOMMAND:
            if (wParam == SC_MAXIMIZE) {
                return 0;
            }
            return DefWindowProc(hWnd, message, wParam, lParam);
            break;

解决方案2:

case WM_SIZE:
        if (wParam == SIZE_MAXIMIZED) {
            SendMessage(hWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
            return 0;
        }
        break;

不幸的是,前者仅在用户明确单击标题栏或上下文菜单中的最大化按钮时才有效。例如,如果用户只是双击标题栏,它不会阻止它。

对我来说,后一种解决方案的问题是,它会导致滚动条消失,直到您手动调整窗口大小(通过拖动两侧)。另外,有时您会在窗口大小恢复之前看到窗口闪烁(我确实尝试在发送 WM_SYSCOMMAND/SC_RESTORE 之前禁用重绘,但不幸的是它没有多大帮助)。

我缺少更好的解决方案吗?

最佳答案

case WM_SYSCOMMAND:
    UINT SysCommandCode = wParam & 0xFFF0;
    if (SysCommandCode == SC_MAXIMIZE) {
        return 0;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
    break;

此外,建议从 Windows 样式中删除 WS_MAXIMIZEBOX(创建时)。

关于c - 阻止窗口最大化功能? (完全地),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43385503/

相关文章:

c - Windows 中带有控制台句柄的 ReadFileEx 和 WriteFileEx

c - 如何从独立于操作系统的 LoadRunner 生成通用唯一标识符 UUID

c - nasm 中的链接 c 函数

c++ - 为什么我的 Qt 应用程序在执行时不显示 GUI?

html - float 元素的中心未知

python - 在 Python 中使用 Tkinter 退出时的消息框对话框

c++ - WIN32_FIND_DATA 在目录中列出文件时返回 "."和 ".."

windows - 我应该使用什么 Windows API 函数将文件/文件夹标记/取消标记为 protected 操作系统文件?

c - 线程访问另一个线程的堆栈

c++ - 差异 : Environment Variables & Registry Keys