在使用这个函数时老是会出现err为1413的情况,也就是“索引无效”,源代码如下static void SaneEndDialog(HWND hwnd, int ret)
{
// EndDialog(hwnd,ret);
    int i = SetWindowLongPtr(hwnd, BOXRESULT, ret);
    i = SetWindowLongPtr(hwnd, BOXFLAGS, DF_END);
}其中的BOXRESULT和BOXFLAGS定义如下#define BOXFLAGS DLGWINDOWEXTRA
#define BOXRESULT (DLGWINDOWEXTRA + sizeof(LONG_PTR))请问为什么会出现这个问题,不知道我有没有描述清楚,如果不清楚请提出来我再补充,我在线等

解决方案 »

  1.   

    我想你应该检查一下MSDN中该函数的说明。
      

  2.   

    不知道你这几个宏的意议是什么?SetWindowLongPtr这个函数跟本就没有这几个参数。
      

  3.   

    MSDN中该函数的说明里没有你说的索引,当然是无效索引了。并不是任意一个int索引都行的。
      

  4.   

    这个索引是在窗口对象中必须存在的,这个对象不是指CWnd这样的对象,而是使用CreateWindow的api创建的对象,在创建这个对象时,这个字节数是根据extra_bytes来分配的,它是在RegisterClass时指定的。对话框不是你自己注册的,原头文件中DLGWINDOWEXTRAA指出了对于对话框会保留多少字节数,你使用超过它的索引就不行。除非你自己注册的窗口类,才有可能加大这个值。
      

  5.   

    这个简单,联系我,我给你发个例子吧 email:[email protected]