对话框内动态创建按钮后出错,如何解决?

时间:2020-12-08 23:48:35
在对话框内动态创建的按钮,重载了PreTranslateMessage消息,目标是当我按下键盘的时候动态产生按钮(如F1、F2、F3.....),现在按钮能够顺利产生,但当我给所产生的按钮发送SetFocus()后就出现错误,具体的过程是这样的:
1、在对话框内响应PreTranslateMessage消息,当我按F1时动态创建按钮,然后给按钮发送SetFocus()消息.
2、然后按F2又动态创建按钮后就出现错误了。

错误的是WinCore.cpp里头的875行出错内容是:ASSERT(::IsWindow(m_hWnd));
我想了一下一定是动态创建按钮里头的SetFocus()出错的,是不是要用Attach()把按钮传给对话框呢?
请问大家出现这样的错误具体如何解决了?

10 个解决方案

#1


按钮的创建程序写错了。
贴出来看一下吧

#2


m_DynaButton[j].Create(_T(Dim[j]),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
 CRect(0,75+m_ButtonTop,130,115+m_ButtonBottom),this, nID + j);
我是用动态数组创建的

#3


BOOL CTheMain::DynaCreateButton(int m_nButton,UINT nID,CString Dim[])
{int m_ButtonTop=0; //创建按钮的顶部位置偏移量
 int m_ButtonBottom=0;  //创建按钮的底部位置偏移量
 if (m_DynaButton && m_nButtonCount)
 {  
 for (int i = 0; i < m_nButtonCount; i++)
{ m_DynaButton[i].DestroyWindow();}
delete *m_DynaButton;
m_DynaButton = NULL;
m_nButtonCount = 0;
}
    m_DynaButton=new CButton[m_nButton];
    if (!m_DynaButton) return false;
for (int j = 0; j < m_nButton; j++)
     {m_DynaButton[j].Create(_T(Dim[j]),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
 CRect(0,75+m_ButtonTop,130,115+m_ButtonBottom),this, nID + j);
 
 m_ButtonTop+=40;
 m_ButtonBottom+=40;
 }
     m_nButtonCount = m_nButton;
 m_DynaButton[0].SetFocus();
 
 return true;
}

#4


ASSERT(::IsWindow(m_hWnd));
出现这种错误,就表示此窗口不存在但是你在使用它,你可以debug跟踪下,看看是在create时出错,还是setfocus时出错,不过我估计是setFocus时出的错。

#5


m_nButton的值什么时候改变?

#6


m_nButton的值是在按F1、F2、F3....中改变

#7


up

#8


up again

#9


动态创建按钮要考虑指定父窗口吗?

#10


按钮已经销毁?

#1


按钮的创建程序写错了。
贴出来看一下吧

#2


m_DynaButton[j].Create(_T(Dim[j]),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
 CRect(0,75+m_ButtonTop,130,115+m_ButtonBottom),this, nID + j);
我是用动态数组创建的

#3


BOOL CTheMain::DynaCreateButton(int m_nButton,UINT nID,CString Dim[])
{int m_ButtonTop=0; //创建按钮的顶部位置偏移量
 int m_ButtonBottom=0;  //创建按钮的底部位置偏移量
 if (m_DynaButton && m_nButtonCount)
 {  
 for (int i = 0; i < m_nButtonCount; i++)
{ m_DynaButton[i].DestroyWindow();}
delete *m_DynaButton;
m_DynaButton = NULL;
m_nButtonCount = 0;
}
    m_DynaButton=new CButton[m_nButton];
    if (!m_DynaButton) return false;
for (int j = 0; j < m_nButton; j++)
     {m_DynaButton[j].Create(_T(Dim[j]),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
 CRect(0,75+m_ButtonTop,130,115+m_ButtonBottom),this, nID + j);
 
 m_ButtonTop+=40;
 m_ButtonBottom+=40;
 }
     m_nButtonCount = m_nButton;
 m_DynaButton[0].SetFocus();
 
 return true;
}

#4


ASSERT(::IsWindow(m_hWnd));
出现这种错误,就表示此窗口不存在但是你在使用它,你可以debug跟踪下,看看是在create时出错,还是setfocus时出错,不过我估计是setFocus时出的错。

#5


m_nButton的值什么时候改变?

#6


m_nButton的值是在按F1、F2、F3....中改变

#7


up

#8


up again

#9


动态创建按钮要考虑指定父窗口吗?

#10


按钮已经销毁?