報錯dlgdata.cpp Line:656
void AFXAPI DDX_Control(CDataExchange* pDX, int nIDC, CWnd& rControl)
{
if ((rControl.m_hWnd == NULL) && (rControl.GetControlUnknown() == NULL)) // not subclassed yet
{
ASSERT(!pDX->m_bSaveAndValidate);/////////////////////////斷點在這里
pDX->PrepareCtrl(nIDC);
HWND hWndCtrl;
pDX->m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
CMFCControlContainer* pMFCCtrlContainer = pDX->m_pDlgWnd->GetMFCControlContainer();
if (pMFCCtrlContainer != NULL && pMFCCtrlContainer->IsSubclassedFeaturePackControl(hWndCtrl))
{
pMFCCtrlContainer->ReSubclassControl(hWndCtrl, (WORD)nIDC, rControl);
return;
}
if ((hWndCtrl != NULL) && !rControl.SubclassWindow(hWndCtrl))
{
ASSERT(FALSE); // possibly trying to subclass twice?
AfxThrowNotSupportedException();
}
由于是仿照別人做的畫圖工具,個人分析地點可能是在繪圖工具箱對話框類
void CDrawToolDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_STATIC_COLOR, m_stColor);
DDX_Control(pDX, IDC_STATIC_PREV, m_stPrev);
DDX_Text(pDX, IDC_EDIT_LINE_WIDTH, m_nLineWidth);
}
因為斷點運行后,原版本起始pDX的m_bSaveandValidate為0,而我的起始為1,也檢查了對話框初始化函式,仍然不知道哪里有問題,求助各位大佬,謝謝。
uj5u.com熱心網友回復:
我在 dlgdata.cpp 檔案中,都找不到 DDX_Control的定義uj5u.com熱心網友回復:
if ((rControl.m_hWnd == NULL) && (rControl.GetControlUnknown() == NULL))看這個條件,是不是你變數的型別不對?
uj5u.com熱心網友回復:
變數型別沒問題 ,感覺應該是 IDC_STATIC_COLOR,IDC_STATIC_PREV附近的問題,點兩次忽略后或者Release運行,都可以運行uj5u.com熱心網友回復:
崩潰的時候在彈出的對話框按相應按鈕進入除錯,按Alt+7鍵查看Call Stack即“呼叫堆疊”里面從上到下列出的對應從里層到外層的函式呼叫歷史。雙擊某一行可將游標定位到此次呼叫的源代碼或匯編指令處,看不懂時雙擊下一行,直到能看懂為止。uj5u.com熱心網友回復:
仔細看了一下這段代碼,不知道理解的對不對?應該就是沒有生成之前,先子類化。
在子類化之前ASSERT(!pDX->m_bSaveAndValidate);,就是不能先UpdateData
uj5u.com熱心網友回復:
感覺是我的對話框初始化OnInitDialog()順序不太對,我的先對對話框進行的操作,再初始化的對話框,請問這個要怎么更改uj5u.com熱心網友回復:
檔案在http://pan.baidu.com/s/1cdGmPw里,如果有時間的話能否幫忙看一下,謝謝uj5u.com熱心網友回復:
我猜, 你可能在非UI執行緒, 呼叫了Invalidate函式轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/91112.html
標籤:基礎類
上一篇:正則運算式匹配中文逗號分隔開
