Редактирование EDIT вызывает сбой программы

У меня проблема с редактированием окна РЕДАКТИРОВАНИЯ (при записи или отправке текста в него).
Вот мой код.

Несколько дней назад у меня была проблема, решением которой было удаление цикла обработки MSG из новых окон.
Все бы хорошо, но это вызвало еще одну проблему. Я не могу редактировать окна редактирования.
Когда этот цикл обработки находится в новом окне, Редактирование работает, когда нет.

Родительское окно — MainWindow
Дочерние окна — ChatWindow

Существует очень мало руководств по Winapi, поэтому иногда мне приходится использовать код, который я не совсем понимаю (например, 2 метода Wndproc для обработки действий окна)

Спасибо за ваше время

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 конструктор вы храните этот указатель (см. последний параметр CreateWindowEx). Но когда вы сохраните ChatWindow объект, который вы сохраняете копия в векторе Окна. Так что адрес ChatWindow объект передан CreateWindowEx не совпадает с адресом ChatWindow объект в вашем векторе.

Вместо std::vector<ChatWindow> okna; у вас должен быть вектор указателей std::vector<ChatWindow*> okna;, Это должно решить проблему.

Основная проблема с вашим дизайном заключается в том, что ваши оконные объекты не могут быть скопированы, потому что вы говорите Windows, что this указатель есть. Вы должны добавить личный конструктор копирования и оператор присваивания, чтобы остановить их копирование по ошибке, как это.

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

Ох, и я второй, что Джерри говорит, получить копию Petzold.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector