propertysheet 创建失败

来源:互联网 发布:知礼节 编辑:程序博客网 时间:2024/04/29 12:08

 今天弄propertysheet的建立,比较痛苦的搞了2个多小时

 

现象,无论模态还是非模态对话框,都会创建失败,m_hWnd返回-1,而且,奇怪的是,GetLastError()却返回0。自相矛盾的结果,不过总之还是失败了。

 

最终排查出原因如下,

可能也许有人也有这个习惯,将propertypage最为成员变量加入sheet中,并在创建sheet时自动初始化。这样可以封装的比较清晰,但问题是,切忌,addpage无论如何不能在sheet中OnCreat中调用,否则就会导致sheet建立失败,而放在在构造函数中是个不错的主意。

 

 

具体原因,如下:

不同于构造函数中,单纯的加入页面,在OnCreat中建立时,m_hWnd已经存在,这时候加入新的页,会试图做一些窗口操作,但是毕竟在OnCreat函数中,窗口还未真正的创建完毕,所以导致窗口操作的失败(SendMessage函数失败哦。。蛮罕见的),同时触发异常,将原来已经申请到的窗口句柄也损毁了,可能处理跳过了SetLastError()函数,所以GetLastError()也查不出来。