沒寫過win32視窗程序。所以先產生一個最簡單的win32程式分析了下。
發現預設程式主要就2個視窗程序,一個是主視窗叫winproc,另一個是about。
其中winproc是在main中產生的。
about是在資源裡添加的。
這2個視窗都對應一個callback函數,啥是callback?不知道。。。。。
call函數裡是對訊息的處理。
所以要添加新的視窗,只要照著about視窗做就行了。要開啟這個about視窗在winproc的訊息處理加調用的代碼。
如果要點擊按鈕開啟,就加個按鈕,要點擊菜單選項開啟就加個功能表項目,這個是在資源裡加。訊息處理迴圈是根據資源的id判斷的。
細的東西以後再慢慢研究吧。至少能添加視窗,開啟視窗,添加按鈕,添加菜單了。嘿嘿。
下面來看看。login的功能。
在前一篇文章的基礎上。
把call的代碼add到callwin32的例子中來。排除了前面碰到的錯誤後。發現有個
Error 38 error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source? d:\libjingle0612\talk\examples\call\discoitemsquerytask.cc 98 1 callWin32
網上找到的答案
I figured out what the problem was. The entire project needed to be marked as 'Not Using Precompiled Headers' in the property pages. This is under the 'Configuration Properties'->C/C++->'Precompiled Headers'. You could just single out the one file if
you wanted to also.
如果還有錯誤就參考上一個文章。
下面就是把call中的代碼整合到自己的視窗中了
call的例子寫的很好。我只能先把有用的代碼複製過來了。全部搞懂不容易。
call例子中的main函數,第一部分是一些初始化的代碼。如用的協議,用的伺服器連接埠
這些當然是要放在一個設定檔中。簡單點就先放在一個h檔案中。建立一個config.h檔案。把callmain.cc中的對應內容複寫過去。
執行login的時候去讀對應內容。
在callclient.cc裡添加一個方法 void doLogin(const std::string& usrname,const std::string& usrpass );
把callmain中的對應內容給複製過去。
原來代碼中printf不能用了,改用messagebox。messagebox倒是很容易懂。倒是那些參數類型,真是糾結。先不管了。
如下:
::MessageBox(NULL,(LPCWSTR)L"error",(LPCWSTR)L"Invalid protocol. Must be jingle, gingle, or hybrid.\n",MB_YESNOCANCEL|MB_DEFBUTTON4|MB_HELP|MB_ICONQUESTION);
簡單排除幾個錯誤,添加一些引用後,程式可以運行了。
現在的問題是
1.textbox的內容如何擷取,參考關於字串類型的文章。http://blog.csdn.net/txdb/article/details/7298502
2.call裡面啟動了3個線程,這3個線程有啥關係。是不是可以改下
3.pump.DoLogin(xcs, new XmppSocket(buzz::TLS_REQUIRED), NULL);沒有返回訊息,不知道是否成功了,或者返回的視窗console沒顯示出來
4. main_thread->Run();做了啥。
1.google下是GetDlgItemText(hwnd, nEditID, szString, nMax);,對應的有GetDlgItem或許還有更多的。