还是不是很理解一些问题,工作学习中问题如下
1.我们写一个自定义的类去实现某些功能类比一下。比如
class CMyEdit :public CEdit
{
public:
  CString m_toolstr;
  CBitmap m_bkbitmap
};
我们自己的类继承了Edit类,只是我们类中多了字符串类型和一个位图,然后我们会写一些虚函数,或者类成员函数,其中使用这两个变量去完成某些功能,改变一下控件外观。
2.然后 控件的重绘有一个虚函数,OnDrawItem()这个函数相当于窗口的窗口过程,其中用一个switch然后case 处理每一个控件的重绘,当然这样会是这个函数很长,所以出现了DrawItem(),这就把OnDrawItem()分散到每个控件类的DrawItem()中,好继续,在DrawItem()可以实现控件的自绘,参数是一个自绘结构体,包换了DC等绘图相关。说到这里我还不是很乱。
3.这几天没事,想起以前的代码,我们也是写一个类如下
class CMyButton  
{public:
  OnPaint();  
  WNDPROC MyProc;
};
然后定一个新的窗口处理函数
WindowProc(HWND,UNIT,WPARAM,LPARAM)
{
CMyButton * pButton = (CMyButton*)GetWidnowsLong(hWnd,GWL_USERDATA);
switch(uMsg){
  case WM_PAINT:{
  pButton->OnPaint();  
  }  }
}
然后安装一个WH_WNDPROC类型的钩子,在钩子处理函数中,我们使用
LRESULT CALLBACK hookproc(int nCode,WPARAM wParam,LPARAM lParam){
..........
..........
SetWindowLog(hWnd,GWL_WNDPROC,
pButton->WindowProc());
}
我这么一想我就有点乱了。上边这些方法好像都是可以修改控件的外观的。他们区别是什么。请高手给指明一下。我是比较乱。