求助,系统调用OnLButtonUp函数运行我一个OnBtnPrevPage函数后,调用CDialog::OnLButtonUp(nFlags, point);后会再次调用OnLButtonUp函数,OnBtnPrevPage函数里面给一个数组分配了数据.OnLButtonUp会重复调用3次.

解决方案 »

  1.   

    这个只在release下面报错.debug不报错.我是打log才发现OnLButtonUp会跑3次的.可能是某个数组出了问题.但这个问题还是找不出来.
      

  2.   

    Release下也可以调试的,默认状态只是看到的变量值很混乱而已,还是可以看到哪里出错的;如果加入调试消息,就跟Debug下调试差不多;
    另外,注意Debug下的数组、变量会自动赋初值0,而Release下是随机数...
      

  3.   


    程序逻辑没问题..
    void CGUISMSInBox::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    static int s_time = 1;
    CLogTool log;
    log.WriteLogFile("OnLButtonUp %d", s_time);
    s_time++;
    unsigned nID = CSC_ACT()->MouseUp( point );
    if (nID == eTabExit )
    {
    if (m_bIsExit == FALSE)
    {
    m_bIsExit = TRUE;
    CGUISMS* pDlg = (CGUISMS*)GetParent();
    pDlg->OnBtnExit();
    OnBtnExit();
    }
    } else {

    switch ( nID )
    {
    case eBtnUp: 
    {

    OnBtnPrevPage(); 
    }break;
    case eBtnDown: OnBtnNextPage(); break;
    case eBtnDel: OnBtnDelAll(); break;
    case eItem1: OnBtnItem(0);break;
    case eItem2: OnBtnItem(1);break;
    case eItem3: OnBtnItem(2);break;
    case eItem4: OnBtnItem(3);break;
    case eItem5: OnBtnItem(4);break;
    case eItem6: OnBtnItem(5);break;
    case eItem7: OnBtnItem(6);break;
    case eItem8: OnBtnItem(7);break;
    default: break;
    }
    Invalidate();
    CDialog::OnLButtonUp(nFlags, point);
    }
    log.WriteLogFile("OnLButtonUp end");

    }OnBtnPrevPage(); 运行后运行CDialog::OnLButtonUp(nFlags, point);
    这句运行后log.WriteLogFile("OnLButtonUp end");这句的log没打出来,就重新开始运行OnLButtonUp了.
      

  4.   

    OnBtnPrevPage(); 函数是否存在逻辑问题
      

  5.   

    没有..感觉应该是数组问题.但是数组也都初始化了.
    这个就是OnBtnPrevPage函数调用的.void CGUISMSInBox::OnBtnPrevPage()
    {
    static int i = 1;
    char tch[64];
    memset(tch, 0, sizeof(tch));
    sprintf(tch, "Start %d run PrevPage() Function",i);
    i++;
    CLogTool log;
    log.WriteLogFile(tch);
    m_nCurPage--;
    if ( m_nCurPage < 1 )
    m_nCurPage = 1;
    log.WriteLogFile("start run ShowPage() Function");
    ShowPage( m_nCurPage );
    log.WriteLogFile("run ShowPage() Function End");
    //Invalidate();
    log.WriteLogFile("run PrevPage Function End");
    }
    void    CGUISMSInBox::ShowPage(int nPage)
    {
    CLogTool log;
    logic_data* pInbox = &(CSysCtrl::Instance()->m_inbox);
    int nMaxRd = SMSMaxNum(); int MaxPage = 1 + nMaxRd / elist_count;
    if ( nMaxRd > 0 )
    MaxPage = ( nMaxRd - 1 ) / elist_count + 1;

    if ( nPage > MaxPage ) return;

    int nStartIdx =  ( nPage - 1 ) * elist_count;
    /*for( int i = 0; i < elist_count; i++ )
    {
    m_ItemTxt[i][0] = '\0';
    m_Ctr[eItem1+i].State( CGuiCtrl::eNORMAL );
    }*/

    //////////////////////////////////////////////////////////////////////////
    for(int i = 0; i < elist_count; i++ )
    {
    memset(m_ItemTxt[i], 0, sizeof(m_ItemTxt[i]));
    m_Ctr[eItem1+i].State( CGuiCtrl::eNORMAL ); if ( nStartIdx >= nMaxRd )
    break;
    if ( nStartIdx < pInbox->max_number() )
    {
    log.WriteLogFile("for i = %d", i);

    st_sms* pSMS = pInbox->get_recourd( pInbox->max_number() - nStartIdx - 1 );
    if ( pSMS )
    {

    char  szTxt[512];
    memset(szTxt, 0, sizeof(szTxt));
    /*
    char szYear[3];
    char szMonth[3];
    char szDay[3];
    char szHour[3];
    char szMin[3];
    char szTime[32];
    memset(szYear, 0, sizeof(szYear) );
    memset(szMonth, 0, sizeof(szYear) );
    memset(szDay, 0, sizeof(szYear) );
    memset(szHour, 0, sizeof(szYear) );
    memset(szMin, 0, sizeof(szYear) );

    memcpy(szYear, &pSMS->chTime[0],2);
    memcpy(szMonth, &pSMS->chTime[2],2);
    memcpy(szDay, &pSMS->chTime[4],2);
    memcpy(szHour, &pSMS->chTime[6],2);
    memcpy(szMin, &pSMS->chTime[8],2);
    sprintf( szTime,("%s:%s %s/%s/20%s"),szHour, szMin, szDay,szMonth,szYear);*/ //ÏÔʾµÄÄÚÈÝ
    if (pSMS->nStatus == 1) //½øÐÐÖÐ
    sprintf( szTxt, " %s \r\nÖ´ÐÐÖР \r\n %s", pSMS->chAlarmTel, pSMS->chContext );
    else if (pSMS->nStatus == 2) //ÒÑÍê³É
    sprintf( szTxt, " %s \r\nÒÑÍê³É  \r\n %s", pSMS->chAlarmTel, pSMS->chContext );
    else//ÒѾܾø
    sprintf( szTxt, " %s \r\nδ´¦Àí  \r\n %s", pSMS->chAlarmTel, pSMS->chContext ); /*if ( pSMS->m_type == 12 )
    sprintf( szTxt, " %s \r\n%s \r\n %s", "·þÎñÖÐÐÄ", szTime, pSMS->m_context );
    else
    sprintf( szTxt, " %s \r\n%s \r\n %s", pSMS->m_number, szTime, pSMS->m_context );*/
    GChar2Uni( szTxt, m_ItemTxt[i], 512 );
    }
    }
    nStartIdx++;
    }
    }