求助,系统调用OnLButtonUp函数运行我一个OnBtnPrevPage函数后,调用CDialog::OnLButtonUp(nFlags, point);后会再次调用OnLButtonUp函数,OnBtnPrevPage函数里面给一个数组分配了数据.OnLButtonUp会重复调用3次.
解决方案 »
- 2005里面使用打开文件对话框为什么不行?
- 请问bitcount==40是什么图?该怎么放大缩小?
- 新手提问
- 熟练的VC程序员想寻兼职工作或合作机会
- 如何在加载一个HTML文件时,按照程序指定的charset来显示?
- 我用VC6+sp6+win2000编译的控件在xp下会报错,而2000下是好的,为什么阿?
- 如何在Win2000下写能针对不同操作系统进行备份还原的类似ghost的程序?
- 像vB中string()这样的函数vc中有吗?
- (在线等待)为什么执行hr=::CoRevokeClassObject(pData->m_dwRegister)会马上返回
- 分享一下我刚刚获得的最新资料。。。
- 求助,一个消息映射的问题!
- p2p通信的大牛请进来?
另外,注意Debug下的数组、变量会自动赋初值0,而Release下是随机数...
程序逻辑没问题..
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了.
这个就是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++;
}
}