2017-06-02 92 views
-2

我在谷歌上花了很多时间,并没有在这个特定的主题上找到任何相关的结果。检查任务栏中点击的当前应用程序? (C++,Windows API)

我有一个应用程序,我希望当用户在任务栏中单击它(如果它还没有最小化)时最小化。这个问题似乎与窗口无边界的事实有关。当我将它设置为具有边框时,在任务栏中单击它时将其最小化,而无需任何代码干预。但我需要窗口无边界,因为我正在使用客户端区域制作“自定义边框”。

tl; dr我该如何检查当前应用程序是否在任务栏中被点击?

非常感谢! 塞缪尔

+2

错误的问题。你有兴趣知道你的窗口应该最小化(或为什么它不会自动最小化),而是询问你的解决方案。这就是所谓的[XY问题](https://meta.stackexchange.com/q/66377/205381)。 – IInspectable

+0

点击任务栏按钮,向窗口发送普通的'WM_SYSCOMMAND'通知,如'SC_MINIMIZE'和'SC_RESTORE'。边界(或缺少边界)不应该影响到这一点。当您删除边框时,您的代码是否正确处理这些消息? –

+0

不知道为什么我从中得到了负面的两个声望。这是一个完全有效的问题。互联网上没有地方我没有受到巨魔袭击吗?那么,至少我得到了我的问题回答,并让我的申请最小化。这是重要的。 –

回答

3

有没有必要修补任务栏。

只要确保您有为您的窗口设置的WS_MINIMIZEBOX|WS_MAXIMIZEBOX样式。否则,您的窗口将无法处理WM_SYSCOMMAND,wParamSC_MINIMIZESC_RESTORE

某些资源编辑器(如Visual Studio中的编辑器)使您无法在删除标准窗口边框时设置WS_MINIMIZEBOX|WS_MAXIMIZEBOX。您可以以编程方式将样式添加回来,如下所示:

DWORD style = GetWindowLong(hwnd, GWL_STYLE); 
SetWindowLong(hwnd, GWL_STYLE, style | WS_MINIMIZEBOX | WS_MAXIMIZEBOX); 
相关问题