改变对话框控件背景运行报错是什么问题?
加入成员变量:CBrush m_Blackbrush
在对话框构造函数中:m_Blackbrush.CreateSolidBrush(RGB(0,0,0));
在HBRUSH CMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
中
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(pWnd->GetDlgCtrlID()==IDC_BLACK)
{
pDC->SetBkColor(RGB(0,0,0));
pDC->SetBkMode(TRANSPARENT);
return m_Blackbrush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
感觉没什么问题的,为什么在编译时不出错,运行的时候跳错呢?
请哪位指教一下,谢谢
问题点数:20、回复次数:5Top
1 楼handsomerun(毛毛)回复于 2005-08-01 21:05:29 得分 10
你这个IDC_BLACK是一个static框吗??
这些代码没问题啊,偶试了试,
你怎么调用这个对话框的啊??Top
2 楼njvisual(抵制日貨,保衛中國領土釣魚島)回复于 2005-08-01 21:11:08 得分 10
HBRUSH CMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//更改背景颜色
if (nCtlColor != CTLCOLOR_EDIT && nCtlColor != CTLCOLOR_LISTBOX)
{
pDC->SetBkMode(TRANSPARENT);
HBRUSH B = CreateSolidBrush(RGB(0,0,0));
return (HBRUSH) B;
}
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
return hbr;
}
Top
3 楼yyzz1102(初学VC好郁闷)回复于 2005-08-01 22:20:10 得分 0
IDC_BLACK是static框,我做的是个基于对话框的结构,这个框就是起始对话框上的控件,但跳debug assertion failed这样的错误
Top
4 楼yyzz1102(初学VC好郁闷)回复于 2005-08-01 22:29:27 得分 0
我也试过了,新建一个程序能实现这个功能,我自己那个程序不加这段代码,也能运行啊,加上就报错了,郁闷Top
5 楼yyzz1102(初学VC好郁闷)回复于 2005-08-01 23:04:02 得分 0
HWND CDataExchange::PrepareCtrl(int nIDC)
{
ASSERT(nIDC != 0);
ASSERT(nIDC != -1); // not allowed
HWND hWndCtrl;
m_pDlgWnd->GetDlgItem(nIDC, &hWndCtrl);
if (hWndCtrl == NULL)
{
TRACE1("Error: no data exchange control with ID 0x%04X.\n", nIDC);
ASSERT(FALSE);*****这是出问题的地方
AfxThrowNotSupportedException();
}
m_hWndLastControl = hWndCtrl;
m_bEditLastControl = FALSE; // not an edit item by default
ASSERT(hWndCtrl != NULL); // never return NULL handle
return hWndCtrl;
}
这是调试的时候出来的一段,这是出问题的一段代码Top




