2012-09-05 110 views
0

我有问题,编辑编辑窗口(包括通过编写或发送文本给它)。 Here's my code编辑编辑导致程序崩溃

前几天我有问题了其溶液从删除新窗口味精处理环。 一切都会好的,但它造成了另一个问题。我无法编辑编辑窗口。 当处理循环处于新窗口编辑工作时,如果没有,则编辑工作。

父窗口 - 主窗口
子窗口 - ChatWindow

有大约WINAPI很少教程,所以有时候我必须使用代码,我不完全了解(如2种的WndProc方法来处理窗口作用的)

感谢的您的时间

+2

就像你是有点太不得其解这里真正帮助很多在我看来。我会考虑从* Programming Windows,4th Edition *(Charles Petzold)的副本开始。要知道有更新的版本,但他们大多处理.net,而不是Windows API,所以它们可能不适合你想要做的事情。 –

+0

'main'中的指针不是必需的,并且您的包含守护程序是保留的标识符。那只是我寻找的2秒。要加上,'windowTitle = ss.str()。c_str();'也会导致你的问题。 – chris

+0

@chris讽刺的是,实际的问题是Sorontur没有使用指针,他应该使用一个。 – john

回答

0

OK这里的问题,这

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对象,你在OKNA矢量节省副本。所以传递到CreateWindowExChatWindow对象的地址是不一样在你的载体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

现在它不会崩溃当我通过键入编辑它,但我不能按功能设置文本,所以它在50%的工作。另外compilator警告我:“警告:以临时地址”与okna.push_back(&ChatWindow(dwSel,(char *)chBuffer)); – Sorontur

+0

'okna.push_back(ChatWindow(dwSel,(字符*)chBuffer));'是没有比以前更好。你*必须*用新的'okna.push_back(新的ChatWindow(dwSel,(char *)chBuffer));'分配,以便你的窗口对象不会被销毁。我觉得你正在与Windows编程同时学习C++编程。 – john