Drawing on transparent window

S

ShurikAg

Hi,

I have this kind of class:

// SplashWnd.cpp : implementation of the CSplashWnd class

//

/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "CapturePrevWnd.h"

#include "Resource.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CSplashWnd class

CCapturePrevWnd* CCapturePrevWnd::m_pSplashWnd = NULL;

CCapturePrevWnd::CCapturePrevWnd()

{

start.SetPoint(0,0);

end.SetPoint(0,0);

}

CCapturePrevWnd::~CCapturePrevWnd()

{

// Clear the static window pointer.

ASSERT(m_pSplashWnd == this);

m_pSplashWnd = NULL;

}

BEGIN_MESSAGE_MAP(CCapturePrevWnd, CWnd)

//{{AFX_MSG_MAP(CSplashWnd)

ON_WM_CREATE()

ON_WM_PAINT()

ON_WM_LBUTTONDOWN()

ON_WM_LBUTTONUP()

ON_WM_MOUSEMOVE()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

void CCapturePrevWnd::ShowCaptureScreen(CWnd* pParentWnd /*= NULL*/)

{

if (m_pSplashWnd != NULL)

return;

// Allocate a new splash screen, and create the window.

m_pSplashWnd = new CCapturePrevWnd;

if (!m_pSplashWnd->Create(pParentWnd))

delete m_pSplashWnd;

else m_pSplashWnd->UpdateWindow();

}

BOOL CCapturePrevWnd::Create(CWnd* pParentWnd /*= NULL*/)

{

return CreateEx(0,

AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW |CS_DBLCLKS,
AfxGetApp()->LoadStandardCursor(IDC_CROSS)),

NULL, WS_POPUP | WS_VISIBLE | WS_EX_TRANSPARENT | WS_BORDER |
WS_MAXIMIZE,
0, 0, 0, 0,

pParentWnd->GetSafeHwnd(), NULL);

}

void CCapturePrevWnd::HideCaptureScreen()

{

// Destroy the window, and update the mainframe.

DestroyWindow();

AfxGetMainWnd()->UpdateWindow();

}

void CCapturePrevWnd::postNcDestroy()

{

// Free the C++ class.

delete this;

}

int CCapturePrevWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CWnd::OnCreate(lpCreateStruct) == -1)

return -1;

// Center the window.

//CenterWindow();

return 0;

}

void CCapturePrevWnd::OnPaint()

{

CRect selRect = GetSelRect();

if(!selRect.IsRectEmpty())

{

CClientDC dc(this);

//dc.SetROP2(R2_NOTXORPEN);

dc.DrawFocusRect(&selRect);

}

}

void CCapturePrevWnd::OnLButtonDown(UINT nFlags, CPoint point)

{

start = end = point;

Invalidate();

UpdateWindow();

}

void CCapturePrevWnd::OnMouseMove(UINT nFlags, CPoint point)

{

switch(nFlags)

{

case MK_LBUTTON:

end = point;

Invalidate();

UpdateWindow();

break;

}

}

void CCapturePrevWnd::OnLButtonUp(UINT nFlags, CPoint point)

{

end = point;

CRect rect = GetSelRect();

if(!rect.IsRectEmpty())

{

CBitmap bitmap;

CClientDC dc(NULL);

CDC memDC;

CBitmap* pOldBitmap;

memDC.CreateCompatibleDC(&dc);

bitmap.CreateCompatibleBitmap(&dc, rect.Width(),rect.Height() );

pOldBitmap = memDC.SelectObject(&bitmap);

memDC.BitBlt(0, 0, rect.Width()-2,rect.Height()-2, &dc, rect.left+1,
rect.top+1, SRCCOPY);




OpenClipboard() ;

EmptyClipboard() ;

SetClipboardData (CF_BITMAP, bitmap.GetSafeHandle() ) ;

CloseClipboard () ;

memDC.SelectObject(pOldBitmap);

bitmap.Detach();

}

HideCaptureScreen();

}

CRect CCapturePrevWnd::GetSelRect()

{

return CRect(min(start.x,end.x), min(start.y,end.y),

max(start.x,end.x), max(start.y,end.y));

}



this class is suppose to give an ability to draw rectangle on the
desktop
(on top of everything).

All works well except: when I'm drawing the rectangle with mouse the
transparent window doesn't remove the old, already drawn, rectangles in
order
to draw a new one with right dimensions.

All rectangles from every redraw are staing on the window.

How do I solve this problem?
 
B

BigBrian

Hi,

I have this kind of class:

implementation of the CSplashWnd class

What is CSplashWnd? It's not part of the standard.
/////////////////////////////////////////////////////////////////////////////
#include "stdafx.h"

Oh, must be some sort of Windows header.
this class is suppose to give an ability to draw rectangle on the
desktop
(on top of everything).

All works well except: when I'm drawing the rectangle with mouse the
transparent window doesn't remove the old, already drawn, rectangles in
order
to draw a new one with right dimensions.

All rectangles from every redraw are staing on the window.

How do I solve this problem?

By asking in a windows group. This is off topic here.

-Brian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top