よし、問題はこれだ
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;
。これで問題は解決するはずです。
this
設計の基本的な問題は、Windows にポインターが何かを伝えているため、ウィンドウ オブジェクトをコピーできないことです。このように、誤ってコピーするのを防ぐために、プライベート コピー コンストラクターと代入演算子を追加する必要があります。
class NewWindow
{
private:
NewWindow(const NewWindow&); // prevent copying
NewWindow& operator=(const NewWindow&); // prevent copying
};
ああ、私はジェリーの言うことに賛成です、ペツォルドのコピーを手に入れてください。