还有出现error C2228: left of '.SetWindowTextA' must have class/struct/union type错误
代码段
void CServerSocket::updateinfo()
{
CString strTemp;
strTemp.Format("在线人数:%d",m_Clients.GetSize());
m_StaNumber.SetWindowText(strTemp);
}
m_StaNumber是对话框静态文本框变量名。。。是要申明么还是怎么样改 求指点
是的啊 我这段程序就是和你一样的啊 可还是出上面的错
追答我是这样猜想的,你的程序有两个类和此问题相关,一个是CServerSocket和一个包含IDC_STATIC1静态文本框资源的对话框类,这里假设为CServerDlg。
那么代码应该这样写:
在CServerDlg中声明成员变量
CStatic m_StaNumber;
并修改DoDataExchange函数是该变量和对话框资源中的IDC_STATIC1相关联
void CServerDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC1, m_StaNumber);
}
此时CServerSocket类中应该包含一个CServerDlg的对象作为成员变量,比如:
CServerDlg m_dlgServer;
那么updateinfo方法应该这样写:
void CServerSocket::updateinfo()
{
CString strTemp;
strTemp.Format("在线人数:%d",m_Clients.GetSize());
m_dlgServer.m_StaNumber.SetWindowText(strTemp);
}
最后,确保你的CServerDlg类对应的对话框资源是包含IDC_STATIC1文本框资源的正确对话框。
就是那个在CServerDlg类头文件中类似enum { IDD = IDD_DIALOG_SERVER };的代码,那个IDD_DIALOG_SERVER必须是包含IDC_STATIC1的那个对话框。
有时资源的修改需要清除一下工程文件中的临时文件,再重新编译才会生效。
CXXXDlgOjb也要定义? 我把m_StaNumber直接改成了IDC_STATIC_NUMBER.SetWindowText(strTemp);然后编译出现了
error C2228: left of '.SetWindowTextA' must have class/struct/union type这一个错误
从你的截图来看,你的对话框类名字应该是CChatServerDlg,他有一个名为m_StaNumber的成员变量是和IDC_STATIC1关联的。这些都没问题。
有问题的地方是,类是不能够直接使用的。你这里定义CChatServerDlg,只是告诉系统你有一类对话框是这个样子的,你可以根据这个样子生成很多个具体的对象。而每一个对象中都有一个资源号为IDC_STATIC_NUMBER的静态文本框。
试想,如果你有很多个这样的对话框对象,接着调用了IDC_STATIC_NUMBER.SetWindowText(strTemp);
那么系统怎么知道你究竟想让哪个对话框中的静态文本框显示你要的内容。
所以你应该这样调用:
1.生成一个CChatServerDlg类的对象:
CChatServerDlg objChatDlg1;
2.调用objChatDlg1对话框对象中m_StaNumber静态框对象的SetWindowText方法来显示你要显示的内容:
objChatDlg1.m_StaNumber.SetWindowText("内容1");
如果你还有另一个对象objChatDlg2
CChatServerDlg objChatDlg2;
那么你同样可以用下面代码让objChatDlg2中的静态文本框你要显示内容
objChatDlg2.m_StaNumber.SetWindowText("内容2");
但是你现在的疑问是,你要让另一个类(CServerSocket)所生成的对象在执行(updateinfo())方法时完成以上工作。还需要做些什么呢?同样你要告诉系统你究竟要让哪个对话框对象的静态文本框来显示你要的内容。
这里一种简单的做法是让这个CChatServerDlg对话框类的对象作为CServerSocket类的一个成员变量,就是在ServerSocket.h文件中加入
#import "ChatServerDlg.h"
并在CServerSocket类的定义中加入
class CServerSocket
{
...
public:
CChatServerDlg m_objChatDlg;
...
};
最后是ServerSocket.cpp文件的updateinfo方法写为
void CServerSocket::updateinfo()
{
CString strTemp;
strTemp.Format("在线人数:%d",m_Clients.GetSize());
m_objChatDlg.m_StaNumber.SetWindowText(strTemp);
}
已经在classwizard中设置了关联变量了。。。。。
追答要选择那个带Dlg的类然后关联变量 ,如果类选错了,也是没用的。