灰色按钮激活程序的原理 (学习)

首先我们需要明白程序实际上程序中的每个窗口都会有个句柄(即:窗口句柄)这个句柄是唯一的,在同一时刻不会有两个同样的句柄存在.一般来说灰色按纽激活程序都是激活的当前活动的窗口即当前得到焦点的窗口,(其他没得到焦点的窗口为灰色标题栏)如何得到呢?我们可以用一个API

GetForegroundWindow

这个API即可获得当前激活的窗口.返回类型就是一个句柄,函数原形如下:

HWND GetForegroundWindow(VOID);

下面就是关键了.需要用到一个API

BOOL EnumChildWindows(   
    HWND hWndParent,
    WNDENUMPROC lpEnumFunc,
    LPARAM lParam
);

这个函数的作用为枚举出指定窗口的全部子窗口.窗口的子窗口可以理解为窗口上的控件,因为这些控件例如按钮其实也是窗口,但是他是在窗口上,所以为子窗口,同理,用GetForegroundWindow获得到的自然是父窗口的句柄了.

这个可能不大好理解,简单的说就是那些例如按钮之类的控件都是子窗口,所以我们用上面那个API可以把这些控件枚举出来,这个函数是需要一个回调函数的.

先说明下这个API的参数,第一个为父窗口的句柄,第二个为回调函数的指针,第三个一般为NULL他的意思是给回调函数的参数,必要的时候可以通过这个传递一个指针给回调函数.

下面看下回调函数.

BOOL CALLBACK EnumChildProc(
  HWND hwnd,      // handle to child window
  LPARAM lParam   // application-defined value
){
...
}

这样系统每枚举一个控件就会调用一次这个函数.启动第一个参数就是控件的句柄.

例如我们做如下判断

 if (!::IsWindowEnabled(hwnd))
 {//处理灰色
        ::EnableWindow(hwnd,TRUE)
 }

这样灰色的按钮就可以被激活了.

感谢: http://tbxy.blog.com.cn/archives/2006/1578246.shtml  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值