0

EDITウィンドウの編集に問題があります(テキストを書き込むか、テキストを送信することの両方による)。 これが私のコードです。

数日前、新しいウィンドウから MSG 処理ループを削除するソリューションに問題がありました。すべて問題ありませんが、別の問題が発生しました。EDIT ウィンドウを編集できません。その処理ループが新しいウィンドウにある場合、編集は機能しますが、そうでない場合は機能しません。

親ウィンドウ
- 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;。これで問題は解決するはずです。

this設計の基本的な問題は、Windows にポインターが何かを伝えているため、ウィンドウ オブジェクトをコピーできないことです。このように、誤ってコピーするのを防ぐために、プライベート コピー コンストラクターと代入演算子を追加する必要があります。

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

ああ、私はジェリーの言うことに賛成です、ペツォルドのコピーを手に入れてください。

于 2012-09-05T22:14:13.700 に答える