昨天总结了一下socket的相关知识!今天总结一下整个过程中应用到的MFC相关的知识……虽然知识量不大,但毕竟也算是走过的石头,都为大道铺路吧……
1.添加一个新窗口,如果是静态插入到父窗口区域,可参考http://www.cnblogs.com/zhaoxiaoming/archive/2011/10/11/MFC_ChildDialog.html。如果是点击按钮,弹出另一个窗口,需要在资源中添加新的dialog,属性设置为popup。然后在调用类中,添加被调用类的一个对象作为调用类的一个对象,之后如下加载窗口:
CtradeHistory cTradeHsrtory;
cTradeHsrtory.DoModal();
在实际应用中,经常需要在调用时,向被调用窗口传入参数。这里比较简单的方式是:
在被调用类中添加用作参数的成员变量,然后再调用类加载窗口的时候,生成新的对象的时候,为被对象的一些成员赋值,从而起到了传参的效果。如下:
CtradeHistory cTradeHsrtory;
cTradeHsrtory.pExpGlobal = new global;
memcpy((char*)cTradeHsrtory.pExpGlobal,(char *)server->pExpGlobal,sizeof(global));
cTradeHsrtory.pExpRowInfo = new rowInfo[mTotalNum * mTotalRow];
memcpy((char*)cTradeHsrtory.pExpRowInfo,(char *)server->pExpRowInfo,sizeof(rowInfo)*mTotalNum * mTotalRow);
cTradeHsrtory.DoModal();
2.ON_MESSAGE消息响应
之前一直以为只有在同一个类中CseverTrustDlg中(如果对话框类为CseverTrustDlg),才能够使得消息能够正确的响应。因为消息只能定义一次,如果是在不同的类中,不定的话用不了,定义的话,应该会引起重定义吧。
之后的一试发现,在两个头文件中分别定义消息,然后就可以当做是在CseverTrustDlg中使用消息。如:
CseverTrustDlg.h中
#define MYMSG WM_USER+200
server.h中
#define MYMSG WM_USER+200
server.cpp中
SendMessage(m_hwnd,MYMSG,(WPARAM)connectedNum,(LPARAM)connectedNum);
CseverTrustDlg.cpp中
ON_MESSAGE(MYMSG,clientConnectMessage) //线程发消息给主进程修改界面
如此,clientConnectMessage可以得到执行。
3.剩下的就是对一堆控件的操作了。常用的函数:
GetDlgItem();
EnableWindow();
UpdateData()
SetWindowTextW();
SetItemText();
InsertColumn();
InsertItem();
………………
MFC用的不多,类似于框架的东西,总是熟能生巧。最重要的是当面临复杂数据库的时候,如何设计数据库,采用何种的设计模式?