首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于SetProp函数,该如何解决

2012-06-08 
关于SetProp函数关于SetProp函数BOOL CDoubleEdit::Attach(HWND hWnd){//将类和控件关联if(m_hWnd ! NULL

关于SetProp函数
关于SetProp函数
BOOL CDoubleEdit::Attach(HWND hWnd)
{
  //将类和控件关联
  if(m_hWnd != NULL)
  {
  DebugBreak();
  return FALSE;
  }

  m_hWnd = hWnd;
  SetProp(hWnd, DOUBLE_EDIT_PROP_NAME, this);
  //修改控件过程为新的处理过程
  m_lOldProc = SetWindowLong(hWnd, GWL_WNDPROC, (long)NewEditProc);
  if (m_lOldProc == 0)
  {
  m_hWnd = NULL;
  return FALSE;
  }
  else
  return TRUE;
}

函数功能:该函数在指定窗口的属性表中增加一个新项,或者修改一个现有项。如果指定的字符串不在属性表中,那么就增加该新的项,新项中包含该字符串和句柄,否则就用指定的句柄替换该字符串的全前句柄。   函数原型:BOOL SetProp(HWND hWnd,LPCTSTR lpString,HANDLE hData);   参数:   hWnd:指向窗口的句柄,该窗口的属性表要接收一个新项。   lpString:指向以null结尾的字符串指针,或者包含一个标识字符串的原子。如果该参数是一个原子,么它必须是以前使用GlobalAddAtom函数创建的。原子是16位的数据值,它必须是放置在lpstring参数低位字中,而高位字必须为O。   hData:指向要拷贝到属性表中的数据的句柄。该数据句柄可以标识任何对应用程序有用的值。   返回值:如果该数据句柄和字符串以加到属性表中,那么返回值为非零。如果该函数失败,那么返回为零。若想获得更多错误信息,请调用GetLastError函数。 
1,第三个参数是一个数据句柄,这里怎么是this了,这个是个指针啊
2,SetProp,还是没太明白这个函数到底是做什么的,一般什么时候用呢
3,控件和类关联是什么意思,一般什么时候用呢



[解决办法]
SetProp的作用是让系统给你的窗口额外分配一定的空间,用来存储一些你自己定义的数据。打个比方,这就好比是银行的保险箱(Windows显然比银行大方得多,这个是不收费的),第一个参数HWND hWnd指定了在哪家银行,第二个参数LPCSTR lpString指定了是哪个保险箱,至于第三个参数HANDLE hData则是你要存放的东西。调用SetProp之后,系统就把你提交的那个hData帮你保存起来了,如果某个时候你想要用了,就用GetProp再取出来。如同银行一样,系统是不会管你交给他保存的是什么东西、有什么用处的,它只限定你交给它的东西的体积不能超过保险箱的尺寸,至于怎么使用是你自己的事情。既然SetProp的第三个参数是HANDLE(被定义为void *,在32位系统中占用4字节,在64位系统中占用8字节),那么无论你要存的东西是什么,只要占用的字节数不超过sizeof(HANDLE),就可以设法强制转换成HANDLE放进去。如果你要存的东西却是大于sizeof(HANDLE)(比如32位系统下你想存一个double),那你只有自己另开一块内存来存放,然后把指向这块内存的指针传进去了。实际上,你的那个例子中的SetProp(hWnd, DOUBLE_EDIT_PROP_NAME, this)就是这么做的。

热点排行