Solved

How Blinking Text IN MFC on CDC

Posted on 2006-07-04
13
1,160 Views
Last Modified: 2008-01-09
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?

0
Comment
Question by:yogesh28577
  • 6
  • 4
13 Comments
 
LVL 8

Expert Comment

by:kaliyugkaarjun
ID: 17036477
0
 
LVL 5

Expert Comment

by:bastibartel
ID: 17037914

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
 
LVL 1

Author Comment

by:yogesh28577
ID: 17041742
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
 
LVL 5

Expert Comment

by:bastibartel
ID: 17041782
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
 
LVL 5

Expert Comment

by:bastibartel
ID: 17047115
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
Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

 
LVL 1

Author Comment

by:yogesh28577
ID: 17049292
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
 
LVL 5

Accepted Solution

by:
bastibartel earned 60 total points
ID: 17049351
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
 
LVL 5

Expert Comment

by:bastibartel
ID: 17062787
Hello yogesh28577 ,

Do have any more questions ?.

Cheers,
Sebastia
0
 
LVL 1

Author Comment

by:yogesh28577
ID: 17063792
plz give me yahoo messager id i want to chat with u
0
 
LVL 5

Expert Comment

by:bastibartel
ID: 17069495
Sorry I don't have an account there ...
Go ahead, ask me here at EE :-)

Cheers,
Sebastian
0
 
LVL 1

Author Comment

by:yogesh28577
ID: 17152996
ok
0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
scoresClump  challenge 31 108
array11 challenge 16 52
allStar challenge 1 43
Microsoft C++ code failing in executable that worked 9 56
This article will show, step by step, how to integrate R code into a R Sweave document
This is an explanation of a simple data model to help parse a JSON feed
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
In this seventh video of the Xpdf series, we discuss and demonstrate the PDFfonts utility, which lists all the fonts used in a PDF file. It does this via a command line interface, making it suitable for use in programs, scripts, batch files — any pl…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now