请问,如果我窗体上有个按钮,请问程序中,单机这个按钮和  程序某块调用此单机按钮的方法,这个方法内处理的结果是否一样?如果不一样有什么区别

解决方案 »

  1.   

    单机这个按钮  是通过MFC宏发送点击消息执行你的程序,这和 
    程序某块直接调用 是一样的,你可以看宏定义中传递的参数。
      

  2.   

    好的,代码如下
    void CDlgContactOther::OnBnClickedBtnAddtool()
    {
    // TODO: 在此添加控件通知处理程序代码
    //m_nControlId++;
    m_nControlCount++;
    CRect rect;
    int count = m_arrControls.GetSize();
    if(m_nControlCount>5)
    {
    m_vsb_Info.ShowWindow(SW_SHOW);
    m_vsb_Info.SetScrollRange(0,m_nControlCount-5);
    m_vsb_Info.SetScrollPos(m_vsb_Info.GetScrollPos()+1);
    for(int i=0;i<count;i++)
    {
    if(m_arrControls.ElementAt(i) == GetDlgItem(IDC_BTN_ADDWEB)||m_arrControls.ElementAt(i) == GetDlgItem(IDC_BTN_ADDADDR)||m_arrControls.ElementAt(i)==GetDlgItem(IDC_BTN_ADDTOOL))
    continue;
    m_arrControls.ElementAt(i)->GetWindowRect(&rect);
    ScreenToClient(&rect);
    m_arrControls.ElementAt(i)->SetWindowPos(NULL,rect.left,rect.top-32,rect.Width(),rect.Height(),SWP_NOZORDER|SWP_NOSIZE);
    m_arrControls.ElementAt(i)->GetWindowRect(&rect);
    ScreenToClient(&rect);
    }
    }
    m_arrControls.ElementAt(count-1)->GetWindowRect(&rect);
    ScreenToClient(&rect); CWDComboBox* cmb = new CWDComboBox();
    cmb->Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST,CRect(35,rect.top+32,35+99,rect.top+32+20),this,m_nControlId++);
    cmb->SetBorderColor(RGB(200,255,255));
    cmb->SetFont(&thePrefs.m_font1);
    cmb->AddString("MSN");
    cmb->AddString("QQ");
    cmb->SetDroppedWidth(100);
    cmb->MoveWindow(35,rect.top+32,99,rect.top+32);
    cmb->SetCurSel(0); CWDEdit* edt = new CWDEdit;
    edt->Create(WS_CHILD|WS_VISIBLE|WS_TABSTOP,CRect(147,rect.top+32,147+277,rect.top+32+20),this,m_nControlId++);
    edt-> ModifyStyleEx(0,   WS_EX_CLIENTEDGE,   SWP_DRAWFRAME);
    edt->SetBorderColor(RGB(200,255,255));
    edt->SetFont(&thePrefs.m_font1); m_arrControls.Add(cmb);
    m_arrControls.Add(edt); m_arrCmbTool.Add(cmb);
    m_arrEdtTool.Add(edt);
    Invalidate(false);
    }
      

  3.   

    点击的时候可以生成控件并显示,但是在别的地方调用这方法可以new可以create  就是显示不出来。  然后从
    m_arrControls里往出取的话可以取到,在GetWindowRect()时  崩溃。
      

  4.   

    是这样的,这个是联系人信息窗体。首先:我添加联系人的时候,我单击这个按钮是要增加联系人的一条属性。
    可以实现。 这个窗体也是服务器返回联系人信息的载体,将数据显示其中,当属性不够时就调用这个方法进行增加相应数量的控件,在这个过程中,可以创建,走完都没什么问题,但是直接F5却显示不出来。而且当我再按这个按钮的时候程序走到wnd->GetWindowRect(&rect)时崩溃。  说的应该够详细了吧?
      

  5.   

    两次调试  int count = m_arrControls.GetSize();
    count值一样吗
      

  6.   

      嗯,手动调用的时候这个count也是会增加的 。
      

  7.   

    你好好调试一下看看,直接F5就不行,肯定是有值没获取到,用outputdebugstring();
      

  8.   


    非常有关系,MFC窗口类一般不要跨线程使用请用postmessage(WM_COMMAND,你的按钮ID,0);