确定“最大化”按钮是否可用

时间:2008-11-22 14:57:35

标签: c# winapi

有谁知道我在哪里可以找到如何确定窗口上的最大化和/或最小化按钮是否可用和/或禁用的示例?

该窗口与我的应用程序不在同一个进程中。我有hWnd,我尝试过使用GetMenuItemInfo,但是我找不到任何好的样本来解决这个问题。

谢谢!

3 个答案:

答案 0 :(得分:6)

bool has_maximize_btn = (GetWindowLong(hWnd, GWL_STYLE) & WS_MAXIMIZEBOX) != 0;
bool has_minimize_btn = (GetWindowLong(hWnd, GWL_STYLE) & WS_MINIMIZEBOX) != 0;

答案 1 :(得分:4)

Win32 API提供GetTitleBarInfo function,返回TITLEBARINFO Structure

typedef struct {
    DWORD cbSize;
    RECT rcTitleBar;
    DWORD rgstate[CCHILDREN_TITLEBAR+1];
} TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;

因此,您可以检查rgstate:指向数组的指针,该数组接收标题栏每个元素的DWORD值。以下是数组表示的标题栏元素。

Index Title Bar Element
----- --------------------
0     The title bar itself
1     Reserved.
2     Minimize button
3     Maximize button    <--------------
4     Help button
5     Close button

每个数组元素都是以下一个或多个值的组合。

Value                    Meaning
-----                    -------------------------------------------
STATE_SYSTEM_FOCUSABLE   The element can accept the focus.
STATE_SYSTEM_INVISIBLE   The element is invisible.
STATE_SYSTEM_OFFSCREEN   The element has no visible representation.
STATE_SYSTEM_UNAVAILABLE The element is unavailable.  
STATE_SYSTEM_PRESSED     The element is in the pressed state.rgstate

答案 2 :(得分:0)

使用GetWindowInfo功能。

测试WINDOWINFO结构的dwStyle字段,看看WS_MAXIMIZEBOX位是否打开。

WINDOWINFO.dwStyle & WS_MAXIMIZEBOX != 0