具体原理其实一句话就能说清楚的1.HookWindow,用你自己的WndClass把默认的替换掉2.按照控件类别拦截WM_PAINT WM_ERASEBKGD WM_NCPAINT WM_PRINT WM_PRINTCLIENT等等相关的消息,如果你不处理的,调用的原消息处理函数比较特别的是POPUPMENU,有两种实现:1.QQ是自己拦截POPUP的消息,不用默认的TrackPopupMenu,然后自己show一个POPUP类型的窗体2.Hook一下user32.dll里的那个POPUPMENU窗体,然后同上,具体的这个在codeproject里有一些人在研究,还提到了undocumented api的问题,你可以google一把。