MFC App 只能在管理员模式下无法最大化
MFC App Can't Maximize Only In Administrator Mode
我在 Windows 10 上安装了一个 MFC 应用程序,该应用程序的最大化按钮被禁用,因为它不是为调整大小而设计的。如果程序是 运行 而不是 administrator/elevated 那么用户可以将 window 最小化到任务栏,然后像往常一样 restore/maximize 。但是,如果应用程序是 运行 作为 administrator/elevated 权限,则 window 可以最小化到任务栏,但永远不会 restored/maximized.
我尝试过的事情:
- 左键单击任务栏上的图标 - 没有任何反应。
- 将鼠标悬停在任务栏上的图标上,然后将鼠标悬停在微小的预览上
在图标上方 - 这显示了 window 但是一旦你停止就会消失
悬停并单击小预览没有任何作用。
- 启用最大化按钮并将 NoActivate 属性 设置为 true - 没有帮助。
- 应用程序的 Alt-tab 键没有任何作用。
- 我已经使用 spy++ 64 检查了该应用程序是否存在此问题,我可以看到消息,但我不确定出了什么问题。见下文
这是成功(非管理员)最小化然后最大化的日志,其中最大化尝试发生在 ID 290 附近:https://pastebin.com/kRT4ABrC
这是不成功的(管理员)最小化然后最大化的日志,其中最大化尝试发生在 ID 176 附近:https://pastebin.com/nAiXUa8p
有人知道哪里出了问题吗?看起来不成功的日志确实缺少一堆 WM_ACTIVATEAPP 消息,但我不确定还有什么看起来不对劲。
"code" necessary for pastebin link posts
找到问题了!我在我们的代码中搜索了 "WM",发现了一些自定义消息处理程序,其中包括一个 ON_WM_MOVE (See for more info.)。我仍然不明白为什么它会导致问题,但删除它会给我们带来预期的效果。以下是导致任何好奇的人出现问题的代码。 positionPages 方法是自定义代码,可能是罪魁祸首:
void CMyDlg::OnMove(int x, int y)
{
CDialogEx::OnMove(x, y);
positionPages(false); // This keeps the page being displayed in the right location
}
我在 Windows 10 上安装了一个 MFC 应用程序,该应用程序的最大化按钮被禁用,因为它不是为调整大小而设计的。如果程序是 运行 而不是 administrator/elevated 那么用户可以将 window 最小化到任务栏,然后像往常一样 restore/maximize 。但是,如果应用程序是 运行 作为 administrator/elevated 权限,则 window 可以最小化到任务栏,但永远不会 restored/maximized.
我尝试过的事情:
- 左键单击任务栏上的图标 - 没有任何反应。
- 将鼠标悬停在任务栏上的图标上,然后将鼠标悬停在微小的预览上 在图标上方 - 这显示了 window 但是一旦你停止就会消失 悬停并单击小预览没有任何作用。
- 启用最大化按钮并将 NoActivate 属性 设置为 true - 没有帮助。
- 应用程序的 Alt-tab 键没有任何作用。
- 我已经使用 spy++ 64 检查了该应用程序是否存在此问题,我可以看到消息,但我不确定出了什么问题。见下文
这是成功(非管理员)最小化然后最大化的日志,其中最大化尝试发生在 ID 290 附近:https://pastebin.com/kRT4ABrC
这是不成功的(管理员)最小化然后最大化的日志,其中最大化尝试发生在 ID 176 附近:https://pastebin.com/nAiXUa8p
有人知道哪里出了问题吗?看起来不成功的日志确实缺少一堆 WM_ACTIVATEAPP 消息,但我不确定还有什么看起来不对劲。
"code" necessary for pastebin link posts
找到问题了!我在我们的代码中搜索了 "WM",发现了一些自定义消息处理程序,其中包括一个 ON_WM_MOVE (See for more info.)。我仍然不明白为什么它会导致问题,但删除它会给我们带来预期的效果。以下是导致任何好奇的人出现问题的代码。 positionPages 方法是自定义代码,可能是罪魁祸首:
void CMyDlg::OnMove(int x, int y)
{
CDialogEx::OnMove(x, y);
positionPages(false); // This keeps the page being displayed in the right location
}