CClientDC画图

CMyView::OnLButtonUp(UINT nFlags,CPoint point)
{
//使用API函数来画图
/*HDC hdc=::GetDC(m_hWnd);
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin_y);//从当前点移动到画图起始点
LineTo(hdc,point.x,point.y);
Release(hdc);
*/

//使用CDC类来画图,使用GetDC来获取DC
/*CDC *pDC=GetDC():
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
pDC->ReleaseDC(pDC);*/


//使用CClientDC类来画图,创建的是视图窗口的DC对象,作图只能在视图的客服区内作图
/*CClientDC dc(this)://结束时会自释放DC
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.ReleaseDC(pDC);*/

//使用CClientDC类来画图,创建的是框架窗口的DC对象,作图也只能在窗口的客服区内作图
/*CClientDC dc(GetParent()):
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.ReleaseDC(pDC);*/

//使用CWindowDC类来画图,通过选择窗口对象的指针,可以创建各种窗口的DC甚至是整个屏幕窗口的DC对象,
//作图也只能在窗口的客服区内作图
/*
//CWindowDC dc(this)://视图客户区内作图,结束时会自释放DC
//CWindowDC dc(GetParent());//整个程序窗口
//CWindowDC dc(GetDesktopWindow());//整个桌面范围内
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

pDC->ReleaseDC(pDC);*/

//使用画笔,可以选择/改变颜色,粗细,宽度等属性
/*
CPen pen(PS_SOLID,1,RGB(255,0,0));//RGB(红,绿,蓝)
CClientDC dc(this);
CPen *pOldPen=dc.SelectObject(&pen);//需要把画笔选进DC里面,选进时候会返回旧的画笔以供保存恢复
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(&pOldPen);//恢复旧的画笔*/

//使用画刷去填充矩形区域
/*CBrush brush(RGB(255,0,0));//创建一个的红色画刷
CClientDC dc(this);
dc.FillRect(CRect(m_pOrigin,point),&brush);*/

//也可以创建带位图的画刷,
/*CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
CBrush brush(&bitmap);
CClientDC dc(this);
dc.FillRect(CRect(m_ptOrigin,point),&brush);*/

//透明画刷的创建,这样先前画的图不会被后面画的挡住
/*CClientDC dc(this);
CBrush *pBrush()=CBrush::FormHandle((HBRUSH)GetStockObject(NULL_BRUSH));//把得到的句柄转换为指针,FormHandle为静态函数,所以可以用类名调用
CBrush *pOldBrush=dc.SelectObject(pBrush);
dc.Rectangle(CRect(m_ptOrigin,point));
dc.SelectObject(pOldBrush);*/

CView::OnLButtonUp(nFlags,point);
}


//////////////////////////////////////////////////////////////////////////////////////////////////
//画连续线条,需要捕获WM_MOUSEMOVE消息,在按下鼠标左键后开始作图,当鼠标右键盘按下后停止作图
//添加一个成员变量m_bDraw记录鼠标按下与否
CMyView::OnMouseMove()
{
CClient dc(this);
CPen Pen(PS_SOLID,1,RGB(255,0,0));
CPen *pOldPen=dc.SelectObject(&pen);

/*if (m_bDraw==TRUE)
{
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
m_pOrigin=point; 

}
dc.SelectObject(pOldPen);*/

//画扇形,再增加一个成员变量保存点

/*if (m_bDraw==TRUE)
{

dc.SetROP2(R2_BLACK); //也可以设置绘画模式
dc.MoveTo(m_ptOrigin);
dc.LineTo(m_ptOld);

dc.MoveTo(m_ptOld);
dc.LineTo(point);

m_pOld=point; 

}
dc.SelectObject(pOldPen);*/


}


转一点资料:
CListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)//重载void CListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)

//.h

#pragma once
class CCustomListCtrl : public CXTListCtrl
{
DECLARE_DYNCREATE(CCustomListCtrl)
public:
CCustomListCtrl()
{
   m_nCurSelItemId = 0;
}

public :
void SetCurSelItemId(int id)
{
   m_nCurSelItemId = id;
}
int GetCurSelItemId()
{
   return m_nCurSelItemId;
}
private:
int m_nCurSelItemId;

protected:
void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
};

//.cpp

#include "StdAfx.h"
#include "CustomListCtrl.h"

IMPLEMENT_DYNCREATE(CCustomListCtrl, CListCtrl)

void CCustomListCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC   = CDC::FromHandle(lpDrawItemStruct->hDC);
HBRUSH hbrush;
COLORREF crColor;
if((lpDrawItemStruct->itemID) == m_nCurSelItemId)
{
   hbrush = CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));//创建一个画刷
   crColor = GetSysColor(COLOR_HIGHLIGHTTEXT);

   // Clear the rectangle
  
}
else
{
   hbrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW));//创建一个画刷
   crColor = GetSysColor(COLOR_WINDOWTEXT);
}
FillRect( lpDrawItemStruct->hDC,&lpDrawItemStruct->rcItem,hbrush);
pDC->SetTextColor(crColor);
pDC->SetBkMode(TRANSPARENT);

CString text = GetItemText(lpDrawItemStruct->itemID, 0);
DrawText(lpDrawItemStruct->hDC, text, text.GetLength(), &lpDrawItemStruct->rcItem, DT_LEFT | DT_SINGLELINE|DT_VCENTER);
DeleteObject(hbrush);
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值