关于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,控件和类关联是什么意思,一般什么时候用呢

解决方案 »

  1.   

    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)就是这么做的。
      

  2.   

    我也有疑问哎!
    请问,是不是系统不会修改保险箱里的东西呢?这和放自己家里有什么区别呢?!
    我的意思是说,可以自己定义一个全局对象保存这些东西,用时也很方便,为什么要
    setprop呢?!帮忙回答下呗,谢谢!