2012-09-05 153 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