没写过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或许还有更多的。