问一个VC中成员变量的有关问题

问一个VC中成员变量的问题
本帖最后由 u012994553 于 2014-02-18 14:46:00 编辑
1. 相关代码涉及一个Dialog窗口,一个Button,一个自定义类PosDecision:

class CTestDlg : public CDialog
{
...

public:
CNewButton m_btn1;
CPosDecision decision; // CPosDecision 是一个自定义类

void OnButtonDownProcessing (CPoint pt);

...
}

2. 在OnInitDialog 事件里:
1)初始化PosDecision类型的成员变量decision;
2)把自身的HWND传递给Button。

BOOL CTestDlg::OnInitDialog() 
{
RECT client, tablet;

GetClientRect(&client);

m_btn1.GetClientRect(&tablet);
m_btn1.MapWindowPoints(this, &tablet);

decision.InitBound(tablet, client); // 此处成功初始化

m_btn1.hwndParent = this->GetSafeHwnd();

return TRUE; 
}

3. 在Button的OnLButtonDown事件里:
1)通过hwnd找到Dialog;
2)调用Dialog中的方法 OnButtonProcessing。

void CNewButton::OnLButtonDown(UINT nFlags, CPoint point) 
{
CTestDlg* dlg;

// dlg = &((CTestDlg)this->GetParent());

dlg = &((CTestDlg)FromHandle(hwndParent));

CPoint pa[1];
pa[0] = point;
MapWindowPoints(dlg, pa, 1);

dlg->OnButtonDownProcessing(pa[0]);

CButton::OnLButtonDown(nFlags, point);
}


4. 问题:
void CTestDlg::OnButtonDownProcessing (CPoint pt)
{

decision.GetNextPos(pt); // 在这里发现decision没有被初始化。
}
------解决方案--------------------
dlg = &((CTestDlg)FromHandle(hwndParent));
FromHandle的返回值应该是指向对象的指针,你在这里强制转换这个指针为对象,我想不出这是什么思路
------解决方案--------------------
CTestDlg* pdlg;// 这是 局部变量

pdlg = (CTestDlg*)GetParent();


------解决方案--------------------
既然你保存了父窗口的句柄,为何不通过发消息的方式呢?自定义一个消息呗