Re: problem in using CPaintDC
David Wilkinson wrote:
bruceminoo@hotmail.com wrote:
Hi
I am trying to change a piece of code that ran in CClientDC into
CPaintDC on VC 6.
I have tried using ...
//win32 app
// needs multi threading
#include <afxwin.h>
XxXxXx removed original query
XxXxXx end block removed original query
MyApp theApp;
....
It compiles but does exactly nothing
Could someone please tell me what I am doing wrong
Thanks
Bruce
Bruce:
1. CPaintDC should be used only in the OnPaint() handler.
2. All painting should be done in OnPaint().
3. The correct way to trigger a paint event is to call Invalidate() or
InvalidateRect().
David Wilkinson
David,
Thank your for your interest in replying to me
I think I have impliemented your suggestions but I cant trigger an
invalidate
You can see the different attempts that I have made
Can you please advise what I have done wrong
thanks
Bruce
======== updated code follows
//win32 app
// needs multi threading
#include <afxwin.h>
class A_Std_Window :public CFrameWnd
{
CPoint m_StartPoint, m_EndPoint;
public:
A_Std_Window()
{
Create(NULL,"put window title here");
}
void OnLButtonUp();
void OnPaint();
DECLARE_MESSAGE_MAP()
};
void A_Std_Window::OnPaint()
{
AfxMessageBox("in on paint",MB_ICONEXCLAMATION|MB_YESNOCANCEL);
m_StartPoint.x=40;
m_StartPoint.y=50;
m_EndPoint.x=4;
m_EndPoint.y=5;
CPaintDC dc(this); //paint here
dc.MoveTo(m_StartPoint);
dc.LineTo(m_EndPoint);
dc.FillSolidRect(0,0,40,40, RGB(255,0,0));
CRect rect; // Create a CRect object
GetClientRect(rect); // Retrieve the view's rectangle into the rect
object
// Draw the text in the middle of the view
dc.DrawText(_T("hello"), rect, DT_CENTER | DT_VCENTER |
DT_SINGLELINE);
// dc.DrawText(m_strText, rect, DT_CENTER | DT_VCENTER |
DT_SINGLELINE);
}
BEGIN_MESSAGE_MAP( A_Std_Window, CFrameWnd)
ON_WM_LBUTTONUP() //Macro to map the left button click to the
handler
END_MESSAGE_MAP()
void A_Std_Window::OnLButtonUp()
{
// TODO: Add your message handler code here and/or call default
m_StartPoint.x=40;
m_StartPoint.y=50;
m_EndPoint.x=4;
m_EndPoint.y=5;
AfxMessageBox("heading for
invalidated",MB_ICONEXCLAMATION|MB_YESNOCANCEL);
// Invalidate(TRUE); // invalidate trigger OnPaint one of them should
work
// Invalidate(NULL);
// Invalidate(FALSE);
Invalidate();
// InvalidateRect(NULL); // sends message
UpdateWindow(); // force act on message
}
class MyApp :public CWinApp
{
A_Std_Window *windo; // create a window pointer
public:
BOOL InitInstance()
{
windo = new A_Std_Window();
m_pMainWnd = windo;
m_pMainWnd->ShowWindow(1);
m_pMainWnd->UpdateWindow();
return 1;
}
};
MyApp theApp;