none
关于WM_CTLCOLORBTN消息的来源 RRS feed

  • 问题

  • 你好:

         当我使用CreateWindow(L"ButTon", L"hello", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 100, 100, 100, 100, hwnd, (HMENU)1011, hInstance, NULL);创建一个按扭时,在主窗口的窗口处理函数中是可以收到WM_CTLCOLORBTN消息。现在我想模拟这种效果,创建一个自定义的子窗口,在绘制这个子窗口之前,主窗口的窗口处理函数也收到WM_CTLCOLORBTN消息,请问一下这个该如何实现。

    2021年3月26日 0:27

全部回复

  • 你好

    感谢您在MSDN中文论坛发帖提问。

    当子窗口即将为其显示区域着色时,由按钮控件发送给其父窗口窗口过程的一个消息,父窗口可以利用这次机会来改变子窗口窗口过程中将用来着色的颜色。

    当父窗口收到WM_CTLCOLORBTN消息时,wParam参数是按钮的设备描述表句柄, lParam参数是按钮的窗口句柄。当父窗口收到WM_CTLCOLORBTN消息时,按钮控件已经获得了它自己的设备描述表,并将设备描述表句柄通过wParam参数传递给父窗口,因此父窗口在处理WM_CTLCOLORBTN消息时,必须完成以下动作:SetTextColor, SetBkColor, 将画刷句柄传回给子窗口。

    只有按键和自绘按钮才给其父窗口发送WM_CTLCOLORBTN消息,而只有自绘按钮才会回应父窗口窗口过程对消息的处理,并使用画刷来着色背景。

    >>现在我想模拟这种效果,创建一个自定义的子窗口,在绘制这个子窗口之前,主窗口的窗口处理函数也收到WM_CTLCOLORBTN消息

    WM_CTLCOLORBTN消息是需要通过按钮控件发送的, lParam参数是按钮的窗口句柄。根据你的描述, 请问你是想要不通过按钮控件就想要得到一个笔刷句柄然后来为子窗口着色吗?如果是这样, 我认为没办法实现,你可以考虑处理WM_ERASEBKGND消息以自己绘制子窗口背景。如果不是, 请你更详细的描述你的问题。

    Best Regards,

    Jeanine


    "Visual c++" forum will be migrating to a new home on Microsoft Q&A !
    We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on Microsoft Q&A !
    For more information, please refer to the sticky post.

    2021年3月26日 6:08
    版主
  • 你好:

          >>当子窗口即将为其显示区域着色时,由按钮控件发送给其父窗口窗口过程的一个消息

          请问一下即将为其显示区域着色说的是什么时候,是在子窗口收到WM_ERASEBKGND消息之前还是之后。

           WM_CTLCOLORBTN消息是由子窗口的窗口处理程序发送给父窗口的,还是由操作系统自动发送给父窗口的。如果是由操作系统自动发送,那么在什么条件下操作系统会发送?如果是由子窗口的窗口处理程序发送,那么我自定义的子窗口在窗口处理程序中在什么位置发送这个消息给父窗口?

       

    2021年3月28日 0:34
  • 你好,

    WM_CTLCOLORBTN消息是由按钮控件发送给其父窗口消息处理程序的一个消息。

    windows中的消息大体分为3大类:窗口消息,命令消息,控件通之消息

    窗口消息:由操作系统和控制其他窗口的窗口所使用的消息
    命令消息:用来处理从一个窗口发送到另一个窗口的用户请求
    控件通知消息:当一个窗口内的子控件发生了一些事情,这些是需要通知父窗口的,所以会向父窗口发送一个控件通知消息

    WM_CTLCOLORBTN消息属于控件通知消息,既不是由系统发出的,也不是由窗口发出的。

    请问你想要实现的是什么?

    Best Regards,

    Jeanine


    "Visual c++" forum will be migrating to a new home on Microsoft Q&A !
    We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on Microsoft Q&A !
    For more information, please refer to the sticky post.

    2021年3月30日 6:44
    版主
  • 你好:

          我就是想要实现自已创建的子窗口如何给父窗口发送WM_CTLCOLORBTN消息。

    2021年4月2日 0:54
  • 你好,

    WM_CTLCOLORBTN消息属于控件通知消息。而你想要是现实的是一个窗口(自己创建的子窗口)向另一个窗口(父窗口)发送消息, 这类消息属于命令消息。所以我认为你想要实现子窗口向父窗口发送WM_CTLCOLORBTN消息是不可能的。

    请问你为什么想要实现自已创建的子窗口如何给父窗口发送WM_CTLCOLORBTN消息?是不是为了改变子窗口中的的文本和背景颜色?如果是我建议你尝试考虑处理WM_ERASEBKGND消息以自己绘制子窗口背景。

    Best Regards,

    Jeanine


    "Visual c++" forum will be migrating to a new home on Microsoft Q&A !
    We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on Microsoft Q&A !
    For more information, please refer to the sticky post.

    2021年4月2日 5:29
    版主
  • 你好:

          我想实现自已创建的子窗口如何给父窗口发送WM_CTLCOLORBTN消息,是因为我想知道WM_CTLCOLORBTN消息被发送出的时间点。

    2021年4月3日 0:16