How Blinking Text IN MFC on CDC

I am using the CDC Class from the MFC class library and the
 associated Textout() function to display text on the screen.
 Is there any way of making the text blink?

LVL 1
yogesh28577Asked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
bastibartelConnect With a Mentor Commented:
Hi there,

Because you are now using CClientDC dc(this), there is no need for ReleaseDC() (my mistake!).
ReleaseDC() will be called when 'dc' is destroyed.

Otherwise it would be
DCD *dc = GetDC();
dc.SetText(...)
ReleaseDC(dc);   // free this DC so others can use it

But there are some other things:

1.
the call time1(.1) passes 0.1 to the time1 function, which converts to integer t=0.
So in time1(int t) the while-loop is never executed.

Instead use the Sleep function
Sleep(1000); waits 1000 milliseconds.

2.
In CChildView::OnPaint()

I guess disp() does the painting.
You should pass the dc to disp(), because it will need it to paint into. It's unneccessary to get yet another handle to the dc in disp().

Cheers,
Sebastian



 



 
0
 
bastibartelCommented:

Add a message handler for the WM_TIMER message (class wizard)
Launch the timer in OnInitDialog

#define ID_MY_BLINKER (WM_USER+1)

BOOL CMyClass::OnInitiDialog()
{
   /* ...*/
   SetTimer(ID_MY_BLINKER, 1000, NULL);  // blink every 1000 ms
}

void CMyClass::OnTimer(UINT nIDEvent)
{
             if (nIDEvent == ID_MY_BLINKER)
             {
                  static bool IsOn = true;
                  IsOn ^= true;              // toggle true/false;

                  DCD *dc = GetDC();

                  if (IsOnĀ“)
                      dc->TextOut("hello", ...
                   else
                      dc->TextOut("world", ...
                 
                    ReleaseDC(dc);
               }
               else
                   CDialog::OnTimer(nIDEvent)
}

Excuse any syntax errors - cannot compile on this machine
Cheers Sebastian
0
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

 
yogesh28577Author Commented:
i got solution on my problem
first define two timer
#define IDT_WINDOW_TIMER_1 100
#define IDT_WINDOW_TIMER_2 101

in paint events add following lines
void CChildView::OnPaint()
{
CPaintDC dc(this);

SetTimer(IDT_WINDOW_TIMER_1, 50, NULL);      
}
add following code to ontimer

void CChildView::OnTimer(UINT nIDEvent)
 {
CClientDC dc(this);

 switch(nIDEvent)
 {

 case  IDT_WINDOW_TIMER_1:

      
      str="Yogesh Shrikhande ";
      
            dc.TextOut ( 200, 100, str) ;
            
KillTimer(IDT_WINDOW_TIMER_1);
       SetTimer(IDT_WINDOW_TIMER_2, 50, NULL);      



break;
case      IDT_WINDOW_TIMER_2:

int l;
l=str.GetLength();       
s.Format("%d",l) ;
str.Empty();
for (int i=0;i<=l*2;i++)
str=str+" ";
dc.TextOut ( 200, 100,str) ;
KillTimer(IDT_WINDOW_TIMER_2);
SetTimer(IDT_WINDOW_TIMER_1, 100, NULL);

 }
CWnd::OnTimer(nIDEvent);
 }

in this text are blinking on disp device
0
 
bastibartelCommented:
That's my code .. only a bit longer ;-)
You should call ReleaseDC() after using the dc.
Maybe it's better to set the timer in CWnd::OnCreate() - as it is, it will restart on every WM_PAINT notification

Cheers,
Sebastian
0
 
bastibartelCommented:
Hi yogesh28577

Do you have any more questions on the code ?
and did you think of the ReleaseDC() ?

If you have no more comments you should finalize the question.

Cheers,
Sebastian
0
 
yogesh28577Author Commented:
hi bastibartel
plz tell me how to use ReleaseDc()
in my program

i have also another method with out using timer but after some time it gives error


// ChildView.cpp : implementation of the CChildView class
//

#include "stdafx.h"
#include "Rotating.h"
#include "ChildView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CString str;

/////////////////////////////////////////////////////////////////////////////
// CChildView

CChildView::CChildView()
{
}

CChildView::~CChildView()
{
}


BEGIN_MESSAGE_MAP(CChildView,CWnd )
      //{{AFX_MSG_MAP(CChildView)
      ON_WM_PAINT()      
      ON_WM_CREATE()
      //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CChildView message handlers



void CChildView::OnPaint()
{
CPaintDC dc(this);

disp();

}

void CChildView::disp()
 {

CClientDC dc(this);

str="Yogesh Shrikhande";
dc.TextOut ( 200, 100, str) ;
time1(.1);

disp1();

}
void CChildView::disp1()
{
CString s;
CClientDC dc(this);
int l;
l=str.GetLength();       
s.Format("%d",l) ;
str.Empty();
for (int i=0;i<=l*2;i++)
str=str+" ";
dc.TextOut ( 200, 100,str) ;
time1(.1);
disp();

 }
int CChildView::time1(int t)
{


  long initial,final;
  long ltime;

  initial=time(&ltime);
  final=initial+t;

  while (time(&ltime) < final);
  return 1;

}



0
 
bastibartelCommented:
Hello yogesh28577 ,

Do have any more questions ?.

Cheers,
Sebastia
0
 
yogesh28577Author Commented:
plz give me yahoo messager id i want to chat with u
0
 
bastibartelCommented:
Sorry I don't have an account there ...
Go ahead, ask me here at EE :-)

Cheers,
Sebastian
0
 
yogesh28577Author Commented:
ok
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.