假设:在一个窗口有一个TButton组件,当单击TButton组件后,会产生二个消息,这里我想问的是:为何这二个消息会调用主窗体的WndProc,而不是调用TButton本身的WndProc ?窗体和窗体所包含组件,当在组件处理组件产生的消息是一个什么样的过程?是不是在窗体上的组件所产生的消息都是先发送到窗体的wndproc处理,如果在窗体的wndproc没有被处理就会被一级一级的传送,最后送到了组件本身的wndproc或相关的消息处理过程中?我记得在看window程序设计一书时上面也提到过窗体中的子组件产生的消息也会先被窗体的窗口过程进行处理。可以这样理解吗?

解决方案 »

  1.   

    Button 没有发给主窗体任何消息, 你说的是 Click 事件吧, 那个又不同, 是 delphi 事件, 跟消息一不是一回事所有消息进入 Application 中的一个大 while, translatemessage, dispatchmessage, 派发给最终的 Hwnd, 其中无从属关系
      

  2.   

    当你点击按钮的时候,他会通知他的父窗口一个BN_CLICKED ,这是通知码
    他的父窗口则会接受到一个 WM_COMMAND的消息。对于Windows来说 你所看到的窗口和按钮本质是一样的。
    你可以用窗口子类化来接管BUTTON的WM_PAINT,
    那时你可以在BUTTON上画出书上的那些可以画在窗口上的代码。