Сбой после создания дочернего окна кнопки внутри пользовательского элемента управления

У меня есть приложение MFC, которое показывает простой диалог, содержащий пользовательский элемент управления, настраиваемые окна динамического управления создания. после создания первого дочернего элемента пользовательского элемента управления сбой приложения после переполнения стека

это стек вызовов после сбоя

    Amn80Lib1.dll!TPXBitButton::GetThisMessageMap() Line 1627   C++
Amn80Lib1.dll!TPXBitButton::GetMessageMap() Line 1627   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2181    C++
mfc100d.dll!CWnd::ReflectChildNotify(unsigned int uMsg, unsigned int wParam, long lParam, long * pResult) Line 3408 C++
>   mfc100d.dll!CWnd::OnChildNotify(unsigned int uMsg, unsigned int wParam, long lParam, long * pResult) Line 3387  C++
mfc100d.dll!CButton::OnChildNotify(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 91  C++
mfc100d.dll!CWnd::SendChildNotifyLastMsg(long * pResult) Line 3327  C++
mfc100d.dll!CWnd::ReflectLastMsg(HWND__ * hWndChild, long * pResult) Line 3365  C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3463   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
[Frames below may be incorrect and/or missing, no symbols loaded for user32.dll]
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
user32.dll!75d1c4e7()   Unknown
user32.dll!75d1c5e7()   Unknown
user32.dll!75d1c590()   Unknown
user32.dll!75d11b31()   Unknown
user32.dll!75d32bee()   Unknown
mfc100d.dll!CWnd::DefWindowProcA(unsigned int nMsg, unsigned int wParam, long lParam) Line 1089 C++
mfc100d.dll!CWnd::Default() Line 291    C++
mfc100d.dll!CWnd::OnParentNotify(unsigned int message, long lParam) Line 3468   C++
mfc100d.dll!CWnd::OnWndMsg(unsigned int message, unsigned int wParam, long lParam, long * pResult) Line 2435    C++
mfc100d.dll!CWnd::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 2087  C++
Amn80Lib1.dll!TControl::WindowProc(unsigned int message, unsigned int wParam, long lParam) Line 29  C++
mfc100d.dll!AfxCallWndProc(CWnd * pWnd, HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 257    C++
mfc100d.dll!AfxWndProc(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
mfc100d.dll!AfxWndProcBase(HWND__ * hWnd, unsigned int nMsg, unsigned int wParam, long lParam) Line 420 C++
The maximum number of stack frames supported by Visual Studio has been exceeded.

Сообщение, которое отправляется всегда, 528, это 0x210 = WM_PARENTNOTIFY
WParam = 77594625, lParam = 3409408

Я не знаю, в чем причина этого, и как это остановить, я искал дочерние объекты, если кто-либо из них отправляет какое-либо сообщение родителю, но сообщений нет, диалоговое окно не отображается, но его дескриптор окна был создан, и у пользовательского элемента управления также есть дескриптор, и у его первого потомка есть дескриптор, тогда мы застряли в аварии, а у других потомков не было шанса быть созданным. Я проследил выполнение и получил, что сбой произошел после вызова метода create дочернего элемента пользовательского элемента управления в диалоге.
Пользовательский элемент управления — это элемент управления базой данных, содержащий кнопки для следующего, предыдущего, нового, редактирования для ввода номера записи. Этот пользовательский элемент управления наследуется от TControl, который наследуется от CWnd. кнопки внутри него наследуются от TButton, который наследуется от CButton.

ОБНОВИТЬ


Проблема заключалась в следующем:

когда я зарегистрировал пользовательский класс окна управления, я установил windowproc на MFC windowProc, когда MFC proc не нашел никакого метода для получения сообщения, которое он называл процедурой по умолчанию для окна, то есть MFC windowPoc, вызвавшей открытую рекурсию, Я исправил это, установив для окна proc значение по умолчанию, как показано ниже

WNDCLASS wndClass;
//fill the window class data
wndClass.lpfnWndProc = ::DefWindowProc;//AfxWndProc;//this fixed it

это решило мою проблему

0

Решение

Я обновил ответ, чтобы он содержал решение этой проблемы, но в ответ на @Michael Walz я добавил решение к этому ответу.


когда я зарегистрировал пользовательский класс окна управления, я установил windowproc на MFC windowProc, когда MFC proc не нашел никакого метода для получения сообщения, которое он называл процедурой по умолчанию для окна, то есть MFC windowPoc, вызвавшей открытую рекурсию, Я исправил это, установив для окна proc значение по умолчанию, как показано ниже

WNDCLASS wndClass;
//fill the window class data
wndClass.lpfnWndProc = ::DefWindowProc;//AfxWndProc;//this fixed it
that fixed my problem
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]