Skip to main content
 首页 » 编程设计

c++之编辑 EDIT 导致程序崩溃

2025年12月25日50mfrbuaa

我在编辑 EDIT 窗口时遇到问题(无论是通过写入还是向其发送文本)。
Here's my code .

几天前,我遇到了从新窗口中删除 MSG 处理循环的问题。
一切都会好起来的,但它引起了另一个问题。我无法编辑编辑窗口。
当该处理循环在新窗口中时,编辑工作,而不是它。

父窗口 - MainWindow
子窗口 - ChatWindow

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

谢谢你的时间

请您参考如下方法:

好的,问题来了,这个

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 vector 中保存一个拷贝。所以 ChatWindow的地址对象传递给 CreateWindowExChatWindow 的地址不同 vector 中的对象。

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

您设计的基本问题是您的窗口对象不可复制,因为您告诉 Windows this 是什么。指针是。您应该添加一个私有(private)复制构造函数和赋值运算符来阻止您错误地复制它们,就像这样。
class NewWindow 
{ 
private: 
  NewWindow(const NewWindow&); // prevent copying 
  NewWindow& operator=(const NewWindow&); // prevent copying 
}; 

哦,我赞同 Jerry 的说法,买一份 Petzold。