15,979
社区成员
发帖
与我相关
我的任务
分享
//建立 Property Sheet
CWnd* pwndpropsheetholder = GetDlgItem(IDC_PLACEHOLDER); // IDC_PLACEHOLDER是Picture控件ID
m_pTLMPropsheet = new CTLMPropertySheet(pwndpropsheetholder);
CRect rectpropsheet;
pwndpropsheetholder->GetWindowRect(rectpropsheet);
m_pTLMPropsheet->SetWindowPos(NULL, 0, 0,
rectpropsheet.Width(), rectpropsheet.Height(),
SWP_NOZORDER|SWP_NOACTIVATE);
HBRUSH CDispView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if ((pWnd->GetDlgCtrlID() == IDC_PLACEHOLDER) && (nCtlColor == CTLCOLOR_STATIC)) //IDC_PLACEHOLDER是Picture控件ID,后面一部分是看到网上的一种说法,去掉后也不行
{
pDC->SetBkColor(RGB(0,0,255));
return m_brush; //作为约定,返回背景色对应的刷子句柄
}
// TODO: Return a different brush if the default is not desired
return m_brush;
}
以上是你的代码,请问if里面执行了吗?
另外,你的if里面返回的画刷和非if返回的画刷是同一个(view默认的画刷),这个怎么解释?
m_hrPicture = ::CreateSolidBrush(RGB(255,0,0));
3、给View添加ON_WM_CTLCOLOR()消息(感觉给View添加这个消息好怪,一般的做法是在view上包一层窗口,所有的子窗口都在这个窗口上创建,最后把这个窗口create到view上)
HBRUSH CxxView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch(pWnd->GetDlgCtrlID())
{
case IDC_PICTURE:
return m_hrPicture;
default:
break;
}
return CView::OnCtlColor(pDC, pWnd, nCtlColor);
}
4、析构的时候删除GDI对象
::DeleteObject(m_hrPicture);
m_hrPicture = NULL;
HBRUSH CDispView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if ((pWnd->GetDlgCtrlID() == IDC_PLACEHOLDER) && (nCtlColor == CTLCOLOR_STATIC)) //IDC_PLACEHOLDER是Picture控件ID,后面一部分是看到网上的一种说法,去掉后也不行
{
pDC->SetBkColor(RGB(0,0,255));
return m_brush; //作为约定,返回背景色对应的刷子句柄
}
// TODO: Return a different brush if the default is not desired
return m_brush;
}