`CDialog::SetWindowPos` 崩溃
如果我在如下构造的对话框上调用 CDialog::SetWindow:CDialog *tmp=new CDialog(IDD_TEST, theParent);
,那么它就会崩溃。如果我调用,CDialog *tmp=new CDialog(); tmp->Create(IDD_TEST, theParent);
,那么就不会。怎么会?
If I call CDialog::SetWindow
on a dialog constructed as follows: CDialog *tmp=new CDialog(IDD_TEST, theParent);
, then it crashes. If I call, CDialog *tmp=new CDialog(); tmp->Create(IDD_TEST, theParent);
, then it doesn't. How come?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
MFC 在这方面有点有趣。创建 C++ 对象并不会创建相应的窗口;这是一个两步过程。您的第二个示例完全按照 Microsoft 的预期方式执行,创建 C++ 类,然后创建它应该控制的窗口。如果您尝试在窗口存在之前调用窗口控制函数,则会发生不好的事情。
MFC is kind of funny that way. Creating a C++ object doesn't create a corresponding window; it's a two step process. Your second example does it exactly the way Microsoft intended, creating the C++ class and then creating the window it's supposed to control. If you try to call a window controlling function before the window exists, bad things will happen.