我在对话框中添加了一个框架(IDC_FRAME)用于包含显示GPS数据的各个控件,另外我在对话框中创建了一个MAPX对象用于显示电子地图,现在我想调整MAPX控件的大小,于是我添加了如下代码:
  void CNavDlg::OnSize(UINT nType, int cx, int cy) 
{
CDialog::OnSize(nType, cx, cy); CRect rcFrame;
GetDlgItem(IDC_FRAME)->GetWindowRect(&rcFrame);   //出错的地方             
GetDlgItem(IDC_FRAME)->ScreenToClient(&rcFrame);                              
m_NavMap.MoveWindow(rcFrame.right,0,cx,cy,TRUE);
}
上面出错的地方指针为空,不知道为什么,请大家帮忙,不胜感激!

解决方案 »

  1.   

    IDC_FRAME是什么东西?能用GetDlgItem吗?
      

  2.   

    直接在类向导里添加IDC_FRAME的变量试试。
    另外,
    GetDlgItem(IDC_FRAME)->ScreenToClient(&rcFrame);                              
    应该为ScreenToClient(&rcFrame);
      

  3.   

    把 名字IDC_FRAME改一下  ,IDC_FRAME是默认的名字不能用
      

  4.   

    在OnSize第一次执行的时候是有可能为空的,建议判断一下
    if(GetDlgItem(IDC_FRAME))
    {
    GetDlgItem(IDC_FRAME)->GetWindowRect(&rcFrame);   //出错的地方             
    GetDlgItem(IDC_FRAME)->ScreenToClient(&rcFrame);                              
    m_NavMap.MoveWindow(rcFrame.right,0,cx,cy,TRUE);
    }
      

  5.   

    TO雯贝贝:按你的可以运行了,可是必须改变对话框的大小时才能让MAPX对象填充满,如果不改变的话,它还是创建时的大小,是不是应该在别的地方添加这段代码才能使它在对话框显示的时候就填充?
    另外,运行结果显示中框架对象和MAPX对象还是又点重叠,这使为什么呢?
      

  6.   

    以前也遇到过这个问题,wenbaby(雯贝贝)是对的,第一次运行的时候,控件还没有创建出来。
    而在OnInitDialog()的时候控件句柄已经创建出来了,所以可以在里面加上如下代码:
    CRect tRct;
    GetClientRect(&tRct);
    OnSize(0, tRct.Width(), tRct.Height())