是的,我们在复杂控件上花了些曲折.其实不应该按照 "简单/复杂" 来对控件分类,而是应该按微软定的 "OWNER DRAW / CUSTUM DRAW" 来分类. 这两种DRAW方式的具体解释可以在MSDN上找到. 对于OWNER DRAW,就是按照上文描述的方法, 对于CUSTOM DRAW, 比如我遇到的TrackBar, 处理方法是:
(1) 从resource.h里获得该控件的resource id, 记为nResID
(2) 控件窗体句柄 hItemWnd = GetDlgItem(hParentDlg, nResID)
(3) 替换掉窗体的主处理函数 SetWindowLong( hItemWnd, GWL_WNDPROC, (LONG)MyProc )
(4) 实现自己的窗体处理函数. 在MyProc的WM_PAINT里面就可以做OWNER DRAW的所有事情了,不过对于MS定义的那些消息也得自己做响应, 比如对于TrackBar控件的TBM_SETRANGEMAX, TBM_SETPOS等, 否则就无法兼容前期开发时没有用图片的灰色控件了.
OWNER DRAW / CUSTUM DRAW
最新推荐文章于 2022-09-29 02:05:27 发布