0

我在编辑 EDIT 窗口时遇到问题(无论是通过写入还是向其发送文本)。 这是我的代码

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

父窗口 - MainWindow
子窗口 - ChatWindow

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

谢谢你的时间

4

1 回答 1

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传递给的对象CreateWindowEx的地址与ChatWindow向量中对象的地址不同。

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

您设计的基本问题是您的窗口对象不可复制,因为您告诉 Windowsthis指针是什么。您应该添加一个私有复制构造函数和赋值运算符来阻止您错误地复制它们,就像这样。

class NewWindow
{
private:
  NewWindow(const NewWindow&); // prevent copying
  NewWindow& operator=(const NewWindow&); // prevent copying
};

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

于 2012-09-05T22:14:13.700 回答