问一个VC中成员变量的有关问题
问一个VC中成员变量的问题
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();
------解决方案--------------------
既然你保存了父窗口的句柄,为何不通过发消息的方式呢?自定义一个消息呗
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();
------解决方案--------------------
既然你保存了父窗口的句柄,为何不通过发消息的方式呢?自定义一个消息呗