编辑EDIT会导致程序崩溃

时间:2012-09-05 21:34:20

标签: c++ winapi crash

编辑EDIT窗口时出现问题(通过写入或发送文本)。 Here's my code

几天前,我遇到了哪个解决方案正在从新窗口中删除MSG处理循环的问题。 一切都会好的,但它引起了另一个问题。我无法编辑编辑窗口。 当处理循环在新窗口中时编辑工作,否则不工作。

父窗口 - MainWindow
子窗口 - ChatWindow

关于Winapi的教程很少,所以有时我必须使用我不完全理解的代码(比如2个Wndproc方法来处理窗口动作)

感谢你的时间

1 个答案:

答案 0 :(得分:0)

好的,这就是问题,这个

ChatWindow::ChatWindow()
{
    ...
    window = CreateWindowEx( WS_EX_CLIENTEDGE, 
        NazwaKlasy,windowTitle,WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,DEFAULT_WIDTH , 
        DEFAULT_HEIGHT, NULL, NULL, hIns, this );
    ...

和这个

okna.push_back(ChatWindow(dwSel,(char*)chBuffer));

ChatWindow构造函数中存储this指针(请参阅CreateWindowEx的最后一个参数)。但是当您保存ChatWindow对象时,可以在okna向量中保存副本。因此,传递给ChatWindow的{​​{1}}对象的地址与向量中CreateWindowEx对象的地址不同。

而不是ChatWindow你应该有一个指针向量std::vector<ChatWindow> okna;。这应该可以解决问题。

您的设计的基本问题是您的窗口对象不可复制,因为您告诉Windows std::vector<ChatWindow*> okna;指针是什么。您应该添加一个私有拷贝构造函数和赋值运算符,以阻止您错误地复制它们,就像这样。

this

哦,我继续说杰瑞说的,得到一份Petzold。