Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

redrawing text and graphics of a window

Posted on 2002-03-17
14
Medium Priority
?
287 Views
Last Modified: 2013-11-20
If I draw some graphics or text in a window using DC classes, I can't be able to regain the content after minmizing and maximizing or if another window overlaps, they are lost.  Pls tell me What I should do to redraw the contents.

Venkataramanan
0
Comment
Question by:venkataramanan
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2
  • 2
  • +5
14 Comments
 
LVL 2

Accepted Solution

by:
shilpa_Jb earned 100 total points
ID: 6876038
Hi,
U should write ur code in the WM_PAINT message i.e override this message in the window class.
In OnPaint() of that window place ur code to draw grahics or to write text.
Hope that helps u.
-Shilpa
0
 
LVL 1

Expert Comment

by:pkreddy
ID: 6876162
use Ondraw(CDC *pDC) of your view class to draw inthe client area, this function is called for every WM_PAINT message.
0
 

Author Comment

by:venkataramanan
ID: 6879128
i am having a static control in a dialog box and i like have to free hand drawing in that.  I am capturing the mousedown and mousemove events and setting pixels in that static control.  I want that drawing to be persistent.  what i have to do for this
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
LVL 44

Expert Comment

by:AndyAinscow
ID: 6879332
You need to store the mouse/keyboard actions somehow and then 'replay' this store everytime you need to repaint.  See the Scribble example that comes with VC++, if I remember correctly that does the same as you are doing just in a view.
0
 
LVL 1

Expert Comment

by:Mazen
ID: 6879491
Hi Venkataramanan ,
 you can store your drawings in a metafile and then eveytime you refresh(minimze or maximize) you will play back the graphics by calling the method
 PlayMetaFile(myfile)which should be called from the
 OnDraw().
N.B:The metafile can store DC class graphics.
Write a comment for me if you're interested and  want me to give you the whole code.
Good luck
Bye
0
 
LVL 3

Expert Comment

by:Crius
ID: 6881148
Hi! I recommend you first CreateCompatibleDC() of your screen (GetDC() of your display), then CreateCompatibleBitmap() (And pass in the compatible DC).

Once you have this, all drawing, do it to the Bitmap instead (You can just get the DC of the Bitmap anytime to make changes to it). Then, when you have to display the bitmap on the screen, in the OnDraw(), take your Bitmap DC, the and CDC passed to you in the OnDraw, and do a pDC->BitBlt() passing in the bitmap's DC.

This is the simplest, fastest, and most easily understood method I know of.

Good luck, questions?
0
 

Expert Comment

by:surki
ID: 6882131
Dear Mazen,

I will be very much happy if u give me the code.

Thanks in advance.

-Venkataramanan
0
 
LVL 1

Assisted Solution

by:Mazen
Mazen earned 100 total points
ID: 6886301
Hi Venkataramanan, ok there goes the code:
first in the Doc.h write in the public area:
CMetaFileDC* pMetaFileDC;
and in the Doc constructor write this:
pMetaFileDC = new CMetaFileDC();
pMetaFileDC->Create();
Now in the methods that are used to draw graphics you should mirror every drawing to the metafile like this, for example if you're drawing ellipse:
pDC->Ellipse(Anchor.x,Anchor.y,DrawTo.x,DrawTo.y);
also write with it:
pDoc->pMetaFileDC->Ellipse(Anchor.x,Anchor.y,DrawTo.x,DrawTo.y);
and so on...
and don't forget to declare the pointer pDoc to Doc using GetDocument() in these methods
Now to play the metafile again at refreshing,add the following code to the OnDraw() method:
{
HMETAFILE MetaFileHandle = pDoc->pMetaFileDC->Close();
// to play a metafile you must close it first
pDC->PlayMetaFile(MetaFileHandle);
CMetaFileDC* replaceMetaFile = new CMetaFileDC();
replaceMetaFile->Create();
replaceMetaFile->PlayMetaFile(MetaFileHandle);
// this is a back up metafile before deletion
DeleteMetaFile(MetaFileHandle);
delete pDoc->pMetaFileDC;
pDoc->pMetaFileDC = replaceMetaFile;
}

I hope this helps you
Best Regards
Mazen
0
 

Expert Comment

by:amarzee
ID: 7023724
Try to use the metafile for storing drawing actions and in OnDraw method play that metafile content.
0
 
LVL 44

Expert Comment

by:AndyAinscow
ID: 11116232
My comment should have given him all he required.
0
 
LVL 3

Expert Comment

by:Crius
ID: 11120962
I think most of ours did, one way or another.

The question is likely abandoned because it got answered satisfactorily. :\
0

Featured Post

Enroll in September's Course of the Month

This month’s featured course covers 16 hours of training in installation, management, and deployment of VMware vSphere virtualization environments. It's free for Premium Members, Team Accounts, and Qualified Experts!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Dynamic window placements and drawing on a form, simple usage of windows registry as a storage place for information. Continuing from the first article about sudoku.  There we have designed the application and put a lot of user int…
Introduction: Dialogs (1) modal - maintaining the database. Continuing from the ninth article about sudoku.   You might have heard of modal and modeless dialogs.  Here with this Sudoku application will we use one of each type: a modal dialog …
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Monitoring a network: how to monitor network services and why? Michael Kulchisky, MCSE, MCSA, MCP, VTSP, VSP, CCSP outlines the philosophy behind service monitoring and why a handshake validation is critical in network monitoring. Software utilized …
Suggested Courses

722 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