Mfc 确定控制类型

Mfc 确定控制类型,mfc,winapi,controls,Mfc,Winapi,Controls,我试图使一些静态控件在windows对话框上透明,但在处理一条windows消息时遇到困难 在绘制静态控件时,Windows很高兴地向我发送WM_CTLCOLORSTATIC消息,但此消息也会发送到只读和禁用的编辑控件。因此-如果只给控件一个hwnd,我如何知道它是什么类型的控件?如果没有很多控件,请使用获取控件的资源id。 有了这些信息,您可以过滤掉任何不需要的控件。如果您没有很多控件,请使用获取控件的资源id。 有了这些信息,您可以过滤掉任何不需要的控件。使用该功能。下面列出了一些预定义的类

我试图使一些静态控件在windows对话框上透明,但在处理一条windows消息时遇到困难


在绘制静态控件时,Windows很高兴地向我发送WM_CTLCOLORSTATIC消息,但此消息也会发送到只读和禁用的编辑控件。因此-如果只给控件一个hwnd,我如何知道它是什么类型的控件?

如果没有很多控件,请使用获取控件的资源id。

有了这些信息,您可以过滤掉任何不需要的控件。

如果您没有很多控件,请使用获取控件的资源id。
有了这些信息,您可以过滤掉任何不需要的控件。

使用该功能。下面列出了一些预定义的类名,如
按钮
。另见

“类名”决定了控件的“种类”(更具体地说,该类定义了窗口过程,该过程定义了控件的行为……或者,如果控件被某人子类化,则只会稍微复杂一些)。

使用该函数。下面列出了一些预定义的类名,如
按钮
。另见

“类名”决定了控件的“种类”(更具体地说,类定义了窗口过程,窗口过程定义了控件的行为……或者,如果控件被某人子类化,则只会稍微复杂一些)。

您可以调用

然后,您必须根据字符串(即“按钮”)进行一系列字符串比较-虽然不是很好,但应该可以工作。

您可以调用i.e


然后,您必须基于字符串(即“按钮”)进行一系列字符串比较,虽然不是很好,但应该可以工作。

作为一种优化,您可以首先尝试使用
GetClassName
和字符串比较来找到第一个
静态
控件,然后,一旦找到一个,就存储使用
GetClassLong获得的类atom(hWnd,GCW_ATOM)
并从现在开始比较原子。

作为一种优化,您可以首先尝试通过使用
GetClassName
和字符串比较来找到第一个
静态
控件,然后,一旦找到一个,就存储使用
GetClassLong(hWnd,GCW_ATOM)得到的类ATOM
并从现在开始比较原子。

不幸的是,此对话框有数百个:(我确实想过将所有静态ID放在一个范围内并使用该范围,但我想我会先要求其他选项。但可能仍然使用ID范围。干杯。您不需要使用ID范围-您可以为所有静态控件分配相同的ID。I(例如)在我的对话框上为静态控件分配了一个自定义ID:
ID\u static\u RED
-当我处理
WM\u ctlcolorstic
时,我会检查该控件,并将文本颜色设置为红色,以便对哪些静态控件获得哪些颜色进行细粒度控制。不幸的是,此对话框有数百个:(我确实想过把所有的静态ID放在一个范围内并使用它,但我想我会先要求其他的方法。但是可能仍然使用ID范围。干杯。你不需要使用ID范围-你可以将所有静态控件分配给同一个ID。I(例如)在我的对话框上为静态控件分配了一个自定义ID:
ID\u static\u RED
-当我处理
WM\u ctlcolorstic
时,我检查该控件,并将文本颜色设置为红色,以便对哪些静态控件获得哪些颜色进行细粒度的控制。
// given controlHwnd passed to me
TCHAR controlClassName[128];

GetClassName(controlHwnd,controlClassName,128);