主窗口类有一函数负责串口数据分拣工作
CXXXotherDlg m_otherdlg;//模态对话框
void CXXXMainDlg::ReceiveComData(int nSendCode, const CString & sReadstr)
{
int m_nNum = 1;
switch(nSendCode)
{
case 0:
otherdlg.MacBtnEnable(m_nNum);//模态对话框函数
break;
...
}
---------------------------------
 模态对话框内函数
void CXXXotherDlg::BtnEnable(int nNum);
{
switch(nNum){
case 1:
               AfxMessageBox("Test")
               m_BtnCmdDown.EnableWindow(TRUE);//某按钮成员变量
break;
...
}程序流程
1弹出模态对话框
2向串口发出指令
3串口返回指令
4进入此函数void CXXXMainDlg::ReceiveComData(int nSendCode, const CString & sReadstr)
5调用模态对话框函数otherdlg.MacBtnEnable(m_nNum)
6模态对话框按钮状态发生改变问题就是,在模态对话框内调用此函数BtnEnable(int nNum),m_BtnCmdDown按钮很好的被控制.
但是通过主窗口ReceiveComData()函数控制,BTNENABLE()函数的确也运行了[AfxMessageBox弹出了]
,但是按钮状态未发生变化在第6步。不知道何解

解决方案 »

  1.   

    otherdlg.MacBtnEnable(m_nNum);//模态对话框函数 此处应为
    otherdlg.BtnEnable(m_nNum);//模态对话框函数 
      

  2.   

    调用Invalidate();试试试了下,没效果主窗口函数调用模态窗口函数是没问题的,关键是模态窗口函数里边控制控件的ENABLEWINDOW不起作用。
      

  3.   

    m_otherdlg 什么时候显示的?
    使用了多线程?
      

  4.   

    m_otherdlg就是
    otherdlg.MacBtnEnable(m_nNum);这句,COPY的时候漏掉了串口收到数据后会把数据包交给ReceiveComData() ,串口收数据的确是另挂的一条线程只要有数据到就触发,跟这个有影响?m_otherdlg.MacBtnEnable(m_nNum);// 这句就是在此函数ReceiveComData() 中的
      

  5.   

    你的m_BtnCmdDown有可能不是你弹出的对话框对象的成员函数,你主函数中调用的CXXXotherDlg的对象 有可能和你弹出的模态对话框对象的成员函数不是同一个!!
      

  6.   

    m_BtnCmdDown是怎么与按钮控件建立关联的?相关代码。
      

  7.   

    m_BtnCmdDown 这个是在类向导里边做的映射的,本窗口 内的其他事件或者函数调用没问题
      

  8.   

    m_BtnCmdDown是怎么与按钮控件建立关联的?相关代码。DDX_Control(pDX, IDC_BTN_CMDDOWN, m_BtnCmdDown);我的本意就是模态弹出窗口给串口发送数据时,锁定这个按钮,
    然后串口数据返回时在住对话框内的函数负责处理,根据处理结果就调用模态弹出窗口的一个函数,这个函数负责解锁这个按钮。
      

  9.   

    IDC_BTN_CMDDOWN这个ID有没有改过?
      

  10.   

    IDC_BTN_CMDDOWN这个ID有没有改过?哈哈哈,果然是高手啊。我找到问题所在了,是这个按钮使用了第三方按钮派生类。
    把代码更换成直接取得按钮ID就会出现错误,找到病根了,谢谢,结帐了