{
//使用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);*/
}
//.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);
}