窗口子类化和PreSubClassWindow的小问题,望指教
今天下午看了一下MSDN上关于子类化的论述,在下有以下几点认识:(不知道对不对,望指教)
1.窗口子类化并不是派生一个窗口类,它只是更改了窗口消息的路由,窗口的消息先通过自定义的WindowProc函数处理后,才传回原来的WindowProc函数。
2.动态子类化(dynamic subclassing)首先需要告诉程序哪个窗口需要子类化,通过调用CWnd::SubClassWindow()或者CWnd::SuuClassDlgItem()来实现。
(问题1:静态子类化又是怎么回事呢?难道动态子类化就是指Instance subclassing,而静态子类化就是指Global subclassing? )
3.子类化的实现需要自定义一个窗口处理函数WindowProc(或者称作subclass function),然后将这个函数的地址传递给SetWindowLong(Instance subclassing)或者SetClassLong(Global subclassing)。
(问题2:如果要实现窗口的子类化,是不是一定需要自定义一个窗口处理函数,然后再调用SetWindowLong\SetClassLong呢?)
(问题3:如果窗口子类化总是需要通过自定义的窗口处理函数和SetWindowLong\SetClassLong来实现,那么如果在一个窗口派生类中重载的PreSubClassWindow函数并不一定总是会起作用,因为这个窗口类的实例不一定会被子类化。是这样吗?重载PreSubClassWindow到底起了什么作用?)