RT MFC CPen 画图怎么去掉背景色。主要代码
void CSketchpad::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd::OnMouseMove(nFlags, point);
// 取得鼠标移动的当前坐标,并在屏幕画图
if (!blMouseUp)
{
CClientDC dc(this); CPen Pen;
CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
OldPen=dc.SelectObject (&Pen); dc.MoveTo (nX, nY);
dc.LineTo (point.x,point.y); this->Invalidate(TRUE); nX = point.x;
nY = point.y; dc.SelectObject (&OldPen);
Pen.DeleteObject();
OldPen = NULL;
}
}
症状如下
void CSketchpad::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd::OnMouseMove(nFlags, point);
// 取得鼠标移动的当前坐标,并在屏幕画图
if (!blMouseUp)
{
CClientDC dc(this); CPen Pen;
CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
OldPen=dc.SelectObject (&Pen); dc.MoveTo (nX, nY);
dc.LineTo (point.x,point.y); this->Invalidate(TRUE); nX = point.x;
nY = point.y; dc.SelectObject (&OldPen);
Pen.DeleteObject();
OldPen = NULL;
}
}
症状如下
解决方案 »
- RicheditCtrl怎么添加滚动条
- 微软EFS加密文件夹的问题:什么用户可以打开加密后的文件夹
- 为什么无法使用HBRUSH转换CBrush??
- 在一种规矩的清晰的JPG或者GIF或者PNG或者BMP图片上,有几个规矩的宋体字,如何识别出来呢?
- 求教:如何使对话框上的Button能够接收WM_MOUSEMOVE消息
- 关于MFC框架的一点理解和疑问。
- 请问用vc做数据库的兄弟们,我用ORACLES为后台数据库,接口用什么好,ODBC?ADO?
- 请教!!!!
- 请问谁能帮我解释一下串口通讯中的CreateEvent()函数,它的参数什么意思,返回值等情况。谢谢
- 珍藏资料公布,有兴趣的人可去看看,http://yycnet.yeah.net
- 多文档窗口中的分割条当WM_SIZE如何改变位置
- 捕获自绘图形消息问题
背景没有画,用画刷填充,是CBrush,应该画背景函数,被你直接返回了吧代码改了一下,你看看:
if (!blMouseUp)
{
CDC *pDC = GetDC();
CPen Pen;
CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
OldPen=pDC->SelectObject (&Pen); pDC->MoveTo (nX, nY);
pDC->LineTo (point.x,point.y); nX = point.x;
nY = point.y; pDC->SelectObject (&OldPen);
Pen.DeleteObject();
OldPen = NULL;
ReleaseDC(pDC);
}
你贴出onpaint 的代码!
//#include "stdafx.h"
#include "ToolBox.h"
#include "Sketchpad.h"
// CSketchpadIMPLEMENT_DYNAMIC(CSketchpad, CWnd)CSketchpad::CSketchpad()
{
nWidth = 3;
nR = 255;
nG = 0;
nB = 0;
nX = 0;
nY = 0;
blMouseUp = TRUE;
}CSketchpad::~CSketchpad()
{
}
BEGIN_MESSAGE_MAP(CSketchpad, CWnd)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
END_MESSAGE_MAP()// CSketchpad 消息处理程序
BOOL CSketchpad::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, LPVOID lpParam)
{
return CWnd::CreateEx(dwExStyle, lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, lpParam);
}
BOOL CSketchpad::CreateEx(LPCTSTR pTitle, RECT &rect)
{
return CreateEx(
WS_EX_TRANSPARENT,
AfxRegisterWndClass(0,AfxGetApp()->LoadStandardCursor(IDC_ARROW)),
pTitle,
WS_POPUP,
rect,
NULL,
NULL,
NULL
);
}
BOOL CSketchpad::PreTranslateMessage(MSG* pMsg)
{
if( pMsg->message ==WM_KEYDOWN)
{
// 如果是ESC键,则屏蔽
if(pMsg->wParam == VK_ESCAPE)
{
this->DestroyWindow();
return TRUE;
}
} return CWnd::PreTranslateMessage(pMsg);
}
void CSketchpad::OnPaint()
{
CPaintDC dc(this);
//dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
//CRect rect;
//GetClientRect(&rect);
//dc.DrawText(_T("nice to meet you"),&rect,DT_SINGLELINE| DT_CENTER|DT_VCENTER);
//dc.Ellipse(100,100,200,200);
}
void CSketchpad::OnLButtonDown(UINT nFlags, CPoint point)
{
CWnd::OnLButtonDown(nFlags, point);
// 设置鼠标左键按下标志
blMouseUp = FALSE;
if (!blMouseUp)
{
// 取得鼠标坐标
nX = point.x;
nY = point.y;
}
}
void CSketchpad::OnLButtonUp(UINT nFlags, CPoint point)
{
CWnd::OnLButtonUp(nFlags, point);
if(!blMouseUp)
{
// 设置鼠标左键释放标志
blMouseUp = TRUE;
ReleaseCapture();
}
}void CSketchpad::OnMouseMove(UINT nFlags, CPoint point)
{
CWnd::OnMouseMove(nFlags, point);
// 取得鼠标移动的当前坐标,并在屏幕画图
if (!blMouseUp)
{
/*
CClientDC dc(this); CPen Pen;
CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
Pen.CreatePen(PS_SOLID, nWidth, RGB(nR, nG, nB));
OldPen=dc.SelectObject (&Pen); dc.MoveTo (nX, nY);
dc.LineTo (point.x,point.y); Invalidate(TRUE); nX = point.x;
nY = point.y; dc.SelectObject (&OldPen);
Pen.DeleteObject();
OldPen = NULL;
*/ CDC *pDC = GetDC();
CPen Pen;
CPen *OldPen; //dc.SetBkColor(RGB(0, 255, 0));
//dc.SetBkMode(TRANSPARENT);
Pen.CreatePen(PS_SOLID, 1, RGB(nR, nG, nB));
OldPen=pDC->SelectObject (&Pen); pDC->MoveTo (nX, nY);
pDC->LineTo (point.x,point.y); nX = point.x;
nY = point.y; pDC->SelectObject (&OldPen);
Pen.DeleteObject();
OldPen = NULL;
ReleaseDC(pDC); }
}
pDC->SelectObject (&OldPen);
改为
pDC->SelectObject (OldPen);
BOOL CSketchpad::CreateEx(LPCTSTR pTitle, RECT &rect)
来创建一个透明窗体,然后在用鼠标画线条。 方法
void CSketchpad::OnPaint()
基本没内容
实验证明Windows7不好用, Win2003 和 XP系统都是好用的。