1.线程的消息通讯
SendMessage 》》向窗口派发
PostMessage 》》向窗口派发
- .向线程发消息:PostThreadMessage()
不是每个线程都能拥有消息队列, windows系统中,必须是UI线程,才能从系统中分配到一个属于线程自己的消息队列,
如果在线程回调函数中使用到了以下两个API,系统会认定该线程是一个UI线程: GetMessage(); CreateWindow();
- 线程接收并处理消息
在线程回调函数中,在一个循环内,可通过采用PeekMessage()判断消息的方式,从消息队列中获取信息,当系统无消息时,返回FALSE,继续执行后续代码。
ps:GetMessage():从系统获取消息,将消息从系统中移除,属于阻塞函数。当系统无消息时,GetMessage会等待下一条消息。
2.HOOK
HOOK俗称钩子,它是一种介于消息和应用程序之间的一个必经之路,可以通过在系统中设置HOOK,在应用程序获得消息之前,提前截获应用程序的消息,并进行想要的处理。
SetWindowsHookEx
UnhookWindowsHookEx
CallNextHookEx
其他:
实现窗口类应用程序皮肤更换的基本思路 可选择在InitInstance()函数中设置钩子,HOOK
窗口类的过程函数,然后对窗口进行重绘,
控件的重绘虚函数:DrawItem虚函数