У меня проблема с редактированием окна РЕДАКТИРОВАНИЯ (при записи или отправке текста в него).
Вот мой код.
Несколько дней назад у меня была проблема, решением которой было удаление цикла обработки 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
конструктор вы храните этот указатель (см. последний параметр 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.
Других решений пока нет …