1.类的定义部分
class CBall
{
public:
CBall(CString id);
virtual ~CBall();
static VOID CALLBACK MyTimerProc(//此处用的静态函数,因为SetTimer的回调函数要求//静态或者全局函数
HWND hwnd,
// handle to window
UINT uMsg,
// WM_TIMER message
UINT_PTR idEvent,
// timer identifier
DWORD dwTime
// current system time
);
private:
static CString strID;// 因为静态函数要访问该变量,所以将该变量也设为静态变量
};
2.类的实现部分
CBall::CBall(CString id)
{
strID = id;
::SetTimer(NULL,1,1000,(TIMERPROC)MyTimerProc);
}
VOID CALLBACK CBall::MyTimerProc(
HWND hwnd,
// handle to window
UINT uMsg,
// WM_TIMER message
UINT_PTR idEvent,
// timer identifier
DWORD dwTime
// current system time
)
{
AfxMessageBox(strID,MB_OK | MB_ICONINFORMATION);
}
3.在其他地方使用该类
CBall
a(“a”);
Cball
b(“b”);
4.分析
我的预期是要让两个对话框分别弹出对话框,分别显示“a”和“b”。可是实际显示的都是“b”。也就是静态变量被共享了,后定义的对象b的strID,将a中的strID覆盖了。
5.如果要达到我的预期目标该怎么做,谢谢了!
[[it] 本帖最后由 fjlangzi 于 2008-3-1 22:18 编辑 [/it]]