在对话中为控件添加背景图片问题? 本帖最后由 VisualEleven 于 2014-01-15 20:31:05 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 重写CStatic类,在OnPaint函数中去贴图。 LRESULT CSYourControl::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/){ PAINTSTRUCT stPaintStruct; HDC hDC = ::BeginPaint(m_hWnd, &stPaintStruct); RECT rcDialog = { 0 }; ::GetClientRect(m_hWnd, &rcDialog); HDC hCacheDC = ::CreateCompatibleDC(hDC); HBITMAP hCacheBitmap = ::CreateCompatibleBitmap(hDC, rcDialog.right, rcDialog.bottom); ::SelectObject(hCacheDC, hCacheBitmap); HBRUSH hBackBrush = ::CreateSolidBrush(RGB(255, 255, 255)); ::FillRect(hCacheDC, &rcDialog, hBackBrush); ::DeleteObject(hBackBrush); ::DrawIcon(hCacheDC, x, y, m_hYourIcon); ::BitBlt(hDC, 0, 0, rcDialog.right, rcDialog.bottom, hCacheDC, 0, 0, SRCCOPY); ::DeleteObject(hCacheBitmap); ::DeleteDC(hCacheDC); ::EndPaint(m_hWnd, &stPaintStruct); return 0;} BOOL CkkkStatic::OnEraseBkgnd(CDC* pDC){ if (m_Bmp.GetSafeHandle() == NULL) { CRect Rect; GetWindowRect(&Rect); CWnd *pParent = GetParent(); ASSERT(pParent); pParent->ScreenToClient(&Rect); CDC *pDC = pParent->GetDC(); CDC MemDC; MemDC.CreateCompatibleDC(pDC); m_Bmp.CreateCompatibleBitmap(pDC,Rect.Width(),Rect.Height()); CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp); MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),pDC,Rect.left,Rect.top,SRCCOPY); MemDC.SelectObject(pOldBmp); pParent->ReleaseDC(pDC); } else { CRect Rect; GetClientRect(Rect); CDC MemDC; MemDC.CreateCompatibleDC(pDC); CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp); pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY); MemDC.SelectObject(pOldBmp); } return TRUE;}void CkkkStatic::OnNcPaint(){ if(GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)&WS_EX_CLIENTEDGE) { CDC *pDC = GetWindowDC(); CRect rt; GetWindowRect(&rt); rt.OffsetRect(-rt.left,-rt.top); CPen pen; rt.DeflateRect(1, 1); pen.CreatePen(PS_SOLID,1,RGB(0, 0, 0)); CPen *pOldPen = pDC->SelectObject(&pen); CBrush *pOldBursh = (CBrush*)pDC->SelectStockObject(NULL_BRUSH); pDC->Rectangle(&rt); pDC->SelectObject(pOldPen); pDC->SelectObject(pOldBursh); pen.DeleteObject(); } else { CStatic::OnNcPaint(); }}重绘控件,仅供参考 vc如何调用 java写的com组件 VC6.0 ado 数据库删除问题 问个非代码的简单问题:编辑窗口时,右下角的200*100是什么意思? 关于碰壁测试 GDI+ MFC PNG 关于ListControl控件的问题 部门就要解散了,我就要失业了 已有LIB文件,是否可从中导出头文件? 如何改变propertypage的标题? 羡慕 请帮看看错哪的 按钮不能回复原来的状态
{
PAINTSTRUCT stPaintStruct;
HDC hDC = ::BeginPaint(m_hWnd, &stPaintStruct); RECT rcDialog = { 0 };
::GetClientRect(m_hWnd, &rcDialog); HDC hCacheDC = ::CreateCompatibleDC(hDC);
HBITMAP hCacheBitmap = ::CreateCompatibleBitmap(hDC, rcDialog.right, rcDialog.bottom);
::SelectObject(hCacheDC, hCacheBitmap); HBRUSH hBackBrush = ::CreateSolidBrush(RGB(255, 255, 255));
::FillRect(hCacheDC, &rcDialog, hBackBrush);
::DeleteObject(hBackBrush); ::DrawIcon(hCacheDC, x, y, m_hYourIcon); ::BitBlt(hDC, 0, 0, rcDialog.right, rcDialog.bottom, hCacheDC, 0, 0, SRCCOPY); ::DeleteObject(hCacheBitmap);
::DeleteDC(hCacheDC); ::EndPaint(m_hWnd, &stPaintStruct); return 0;
}
{
if (m_Bmp.GetSafeHandle() == NULL)
{
CRect Rect;
GetWindowRect(&Rect);
CWnd *pParent = GetParent();
ASSERT(pParent);
pParent->ScreenToClient(&Rect); CDC *pDC = pParent->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
m_Bmp.CreateCompatibleBitmap(pDC,Rect.Width(),Rect.Height());
CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp); MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),pDC,Rect.left,Rect.top,SRCCOPY); MemDC.SelectObject(pOldBmp); pParent->ReleaseDC(pDC);
}
else
{
CRect Rect;
GetClientRect(Rect);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap *pOldBmp = MemDC.SelectObject(&m_Bmp);
pDC->BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBmp);
} return TRUE;
}void CkkkStatic::OnNcPaint()
{
if(GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE)&WS_EX_CLIENTEDGE)
{
CDC *pDC = GetWindowDC();
CRect rt;
GetWindowRect(&rt);
rt.OffsetRect(-rt.left,-rt.top); CPen pen;
rt.DeflateRect(1, 1);
pen.CreatePen(PS_SOLID,1,RGB(0, 0, 0));
CPen *pOldPen = pDC->SelectObject(&pen);
CBrush *pOldBursh = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
pDC->Rectangle(&rt);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBursh);
pen.DeleteObject();
}
else
{
CStatic::OnNcPaint();
}
}
重绘控件,仅供参考