确定控件类型

时间:2009-09-01 17:02:28

标签: mfc winapi controls

我正在尝试在Windows对话框中使一些静态控件透明,但是我在使用一条Windows消息时遇到了困难。

Windows在绘制静态控件时很乐意向我发送WM_CTLCOLORSTATIC消息,但此消息也会发送到只读和禁用的编辑控件。那么 - 只要对控件进行一次调整,我该如何判断它是什么样的控制?

4 个答案:

答案 0 :(得分:3)

您可以致电GetClassName,即

// given controlHwnd passed to me
TCHAR controlClassName[128];

GetClassName(controlHwnd,controlClassName,128);

然后你必须根据字符串进行一堆字符串比较,即“按钮” - 所以不是很好,但是应该可以工作。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用GetClassName功能。某些预定义的类名称(BUTTON)列在here中。另请参阅How To Get a Window's Class Name and Other Window Attributes

它是'类名',它决定了它的“控制”类型(更具体地说,类定义了窗口过程,它定义了控件的行为......或者如果控件已被子类化,则仅稍微复杂一些)某人)。

答案 3 :(得分:1)

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