Tuesday, July 06, 2004

Today's Technical Stuff - RDF ( Resource Description Framework)

I got this material from xml.com
 
What is RDF?
By Tim Bray

Spanish Translation available here.

This article was first published as "RDF and Metadata" on XML.com in June 1998. It has been updated by ILRT's Dan Brickley, chair of the W3C's RDF Interest Group, to reflect the growing use of RDF and updates to the specification since 1998.

The Right Way to Find Things

RDF stands for Resource Description Framework. RDF is built for the Web, but let's leave the Web behind for now and think about how we find things in the real world.

Scenario 1: The Library

You're in a library to find books on raising donkeys as pets. In most libraries these days you'd use the computer lookup system, basically an electronic version of the old card file. This system allows you to list books by author, title, subject, and so on. The list includes the date, author, title, and lots of other useful information, including (most important of all) where each book is.

Scenario 2: The Video Store

You're in a video store and you want a movie by John Huston. A large modern video store offers a lookup facility that's similar to the library's. Of course, the search properties are different (director, actors, and so on) but the results are more or less the same.

Scenario 3: The Phone Book

You're working late at a customer's office in South Denver, and it seems that a pizza is essential if work is to continue. Fortunately, every office comes equipped with a set of Yellow Pages that, when properly used, can lead to quick pizza delivery.

The Common Thread

What do all these situations have in common, and what differences lie behind the scenes? First of all, each of these systems is based on metadata, that is, information about information. In each case, you need a piece of information (the book's location, the video's name, the pizza joint's phone number) you don't have. In each case, you use metadata (information about information) to get it.

We're all used to this stuff; metadata ordinarily comes in named chunks (subject, director, business category) that associate lookup information ("donkeys", "John Huston", "Pizza, South Side") with the information you're really after.

Here's a subtle but important point -- in theory, metadata is not really necessary: you could go through the library one book at a time looking for donkey books, or through the video store shelves until you found your movie, or call all the numbers in your area code until you find pizza delivery. But that would be very wasteful, in fact, it would be stupid. Metadata is the way to go.

It's All Different Behind the Scenes

In each of our scenarios, we used metadata, and we used it in remarkably similar ways. Does this mean that the library, the video store, and the phone company all use the same metadata setup? Of course not. Every library has a choice among at least two systems for organizing their books, and among many vendors who will sell them software to do the looking-up. The same is obviously true for video stores and phone companies.

In fact most such products define their own system of metadata and their own facilities for storing and managing it. They typically do not offer facilities for sharing or interchanging it. This doesn't cause too much of a problem, assuming they do a decent job with the user interface. We are comfortable enough with the general process we call "looking things up" (really, searching via metadata) that we are able to adapt and use all these different systems.

Not Just For Searching

The most common daily use of metadata is to aid our discovery of things. But there are lots of other uses going on behind the scenes. The library and video store are storing other metadata that you don't see: how often the books and videos are being used, how much it cost to buy them, where to go for a replacement, etc. Running a library or a video store would be unthinkable without metadata. Similarly, the phone company, of course, uses its metadata, most obviously to print the Yellow Pages, but for many other internal management and administration tasks.

What About the Web?

The Web is a lot like a really really big library. There are millions of things out there, and if you know the URL (in effect a kind of call number) you can get them. Since the Web has books, movies, and pizza joints, the number of ways you might want to look things up includes all the things a library uses, plus all the things the video store uses, plus all the things the Yellow Pages use, and lots more.

The problem at the moment is that there is hardly any metadata on the Web. So how do we find things? Mostly by using dumb, brute force techniques. The dumb, brute force is supplied by the wandering web robots of search engine sites like Altavista, Infoseek, and Excite. These sites do the equivalent of going through the library, reading every book, and allowing us to look things up based on the words in the text. It's not surprising that people complain about search results, or that the robots are always way behind the growth and change of the Web.

In fact there is one metadata-based general purpose lookup facility: Yahoo! Yahoo doesn't use a robot. When you search through Yahoo, you're searching through human-generated subject categories and site labels. Compared to the amount of metadata that a library maintains for its books, Yahoo! is pitiful; but its popularity is clear evidence of the power of (even limited) metadata.

by Tim Bray

Divine Metadata for the Web

People who have thought about these problems, including many librarians and webmasters, generally agree that the Web urgently needs metadata. What would it look like? If the Web had an all-powerful Grand Organizing Directorate (at www.GOD.org), it would think up a set of lookup fields such as Author, Title, Date, Subject, and so on. The Directorate, being, after all, GOD, would simply decree that all Web pages start using this divine Metadata, and that would be that. Of course there would be some details such as how the Web sites ought to package up and interchange the metadata, and we all know that the Devil is in the details, but GOD can lick the Devil any day.

In fact, there is no www.GOD.org. For this reason, there is no chance that everyone will agree to start using the same metadata facilities. If libraries, which have existed for hundreds of years, can't agree on a single standard, there's not much chance that the Web will.

Does this mean that there is no chance for metadata? That everyone is going to have to build their own lookup keys and values and software, and that we're going to be stuck using dumb, brute force robots forever?

No. As we observed with our three search scenarios, metadata operations have an awful lot in common, even when the metadata is different. RDF is an effort to identify these common threads and provide a way for Web architects to use them to provide useful Web metadata without divine intervention.

Introducing RDF

Resource Description Framework, as its name implies, is a framework for describing and interchanging metadata. It is built on the following rules.

  1. A Resource is anything that can have a URI; this includes all the Web's pages, as well as individual elements of an XML document. An example of a resource is a draft of the document you are now reading and its URL is http://www.textuality.com/RDF/Why.html
  2. A Property is a Resource that has a name and can be used as a property, for example Author or Title. In many cases, all we really care about is the name; but a Property needs to be a resource so that it can have its own properties.
  3. A Statement consists of the combination of a Resource, a Property, and a value. These parts are known as the 'subject', 'predicate' and 'object' of a Statement. An example Statement is "The Author of http://www.textuality.com/RDF/Why.html is Tim Bray." The value can just be a string, for example "Tim Bray" in the previous example, or it can be another resource, for example "The Home-Page of http://www.textuality.com/RDF/Why.html is http://www.textuality.com."
  4. There is a straightforward method for expressing these abstract Properties in XML, for example:
<rdf:Description about='http://www.textuality.com/RDF/Why-RDF.html'> <Author>Tim Bray</Author>  <Home-Page rdf:resource='http://www.textuality.com' /> </rdf:Description> 

RDF is carefully designed to have the following characteristics.

Independence
Since a Property is a resource, any independent organization (or even person) can invent them. I can invent one called Author, and you can invent one called Director (which would only apply to resources that are associated with movies), and someone else can invent one called Restaurant-Category. This is necessary since we don't have a GOD to take care of it for us.
Interchange
Since RDF Statements can be converted into XML, they are easy for us to interchange. This would probably be necessary even if we did have a GOD.
Scalability
RDF statements are simple, three-part records (Resource, Property, value), so they are easy to handle and look things up by, even in large numbers. The Web is already big and getting bigger, and we are probably going to have (literally) billions of these floating around (millions even for a big Intranet). Scalability is important.
Properties are Resources
Properties can have their own properties and can be found and manipulated like any other Resource. This is important because there are going to be lots of them; too many to look at one by one. For example, I might want to know if anyone out there has defined a Property that describes the genre of a movie, with values like Comedy, Horror, Romance, and Thriller. I'll need metadata to help with that.
Values Can Be Resources
For example, most web pages will have a property named Home-Page which points at the home page of their site. So the values of properties, which obviously have to include things like title and author's name, also have to include Resources.
Statements Can Be Resources
Statements can also have properties. Since there's no GOD to provide useful assertions for all the resources, and since the Web is way too big for us to provide our own, we're going to need to do lookups based on other people's metadata (as we do today with Yahoo!). This means that we'll want, given any Statement such as "The Subject of this Page is Donkeys", to be able to ask "Who said so? And When?" One useful way to do this would be with metadata; so Statements will need to have Properties.

Why Not Just Use XML?

XML allows you to invent tags, which may contain both text data and other tags. XML has a built-in distinction between element types, for example the IMG element type in HTML, and elements, for example an individual <img src='Madonna.jpg'>; this corresponds naturally to the distinction between Properties and Statements. So it seems as though XML documents should be a natural vehicle for exchanging general purpose metadata.

XML, however, falls apart on the Scalability design goal. There are two problems:

  1. The order in which elements appear in an XML document is significant and often very meaningful. This seems highly unnatural in the metadata world. Who cares whether a movie's Director or Title is listed first, as long as both are available for lookups? Furthermore, maintaining the correct order of millions of data items is expensive and difficult, in practice.
  2. XML allows constructions like
<Description>The value of this property contains some text, mixed up with child properties such as its temperature (<Temp>48</Temp>) and longitude  (<Longt>101</Longt>). [&Disclaimer;]</Description>
When you represent general XML documents in computer memory, you get weird data structures that mix trees, graphs, and character strings. In general, these are hard to handle in even moderate amounts, let alone by the billion.

On the other hand, something like XML is an absolutely necessary part of the solution to RDF's Interchange design goal. XML is unequalled as an exchange format on the Web. But by itself, it doesn't provide what you need in a metadata framework.

by Tim Bray

The Devil is in the Details

The four general rules given above define the central ideas of RDF. It turns out that it takes quite a lot of abstract terminology and XML syntax to define them precisely enough that people can write computer programs to process them. In particular, turning Statements into Resources is quite tricky. It also turns out that in a (very) few cases, you do need to order your properties, and this requires quite a bit of syntax.

This article doesn't explain all these details; there are a variety of excellent resources to be found at http://www.w3.org/RDF that are designed to do just that.

Vocabularies

RDF, as we've seen, provides a model for metadata, and a syntax so that independent parties can exchange it and use it. What it doesn't provide though is any Properties of its own. RDF doesn't define Author or Title or Director or Business-Category. That would be a job for GOD, if there were one. Since there isn't, it's a job for everyone.

It seems unlikely that one Property standing by itself is apt to be very useful. It is expected that these will come in packages; for example, a set of basic bibliographic Properties like Author, Title, Date, and so on. Then a more elaborate set from OCLC and a competing one from the Library of Congress. These packages are called Vocabularies; it's easy to imagine Property vocabularies describing books, videos, pizza joints, fine wines, mutual funds, and many other species of Web wildlife.

What RDF Might Mean

The Web is too big for anyone person to stay on top of. In fact, it contains information about a huge number of subjects, and for most of those subjects (such as fine wines, home improvement, and cancer therapy), the Web has too much information for any one person to stay on top of and much of anything else .

This means that opinions, pointers, indexes, and anything that helps people discover things are going to be commodities of very high value. Nobody thinks that everyone will use the same vocabulary (nor should they), but with RDF we can have a marketplace in vocabularies. Anyone can invent them, advertise them, and sell them. The good (or best-marketed) ones will survive and prosper. Probably most niches of information will come to be dominated by a small number of vocabularies, the way that library catalogs are today.

And even among people who are sharing the use of metadata vocabularies, there's no need to share the same software. RDF makes it possible to use multiple pieces of software to process the same metadata, and to use a single piece of software to process (at least in part) many different metadata vocabularies.

With any luck, this should make the Web more like a library, or a video store, or a phone book, than it is today.

Getting started with RDF

Since RDF became a W3C Recommendation in February 1999, a number of tools have been created by developers working with RDF. For an in-depth treatment of these, consult the W3C RDF home page. A number of other listings are available, including XML.com, XMLhack and Dave Beckett's RDF Resource Guide.

Developer Community

The main email list for RDF developer discussion is W3C's RDF Interest Group. A number of other RDF-related discussion lists exist, including the Mozilla-RDF forum (the Mozilla and Netscape 6 browsers make heavy use of RDF). More recently, the RDF-Logic list has been announced, providing a forum for the discussion of formal, logic-based approaches to knowledge representation for the Web. DARPA's DAML (DARPA Agent Markup Language) initiative uses the RDF-Logic list for discussions and announcements.

The RDF developer community is rather diverse, which is reflected in the nature of online discussions on the RDF lists. While one strand of RDF development is concerned with highly formal topics (RDF-Logic, DAML and so on), others are busy deploying simpler, more pragmatic applications for Web-based content and metadata syndication. All these themes meet (sometimes productively, sometimes confusingly) on the RDF Interest Group list, but they also typically each have a dedicated email list. For example, the RSS-DEV group has produced the RDF Site Summary (RSS) 1.0 Specification, which provides an RDF-based channel format, designed for interoperability with high level vocabularies such as Dublin Core as well as a variety of more application-specific RDF vocabularies.

Notes on Update (Dan Brickley)

This update to the 1998 article serves only to synchronize it with recent RDF terminology. Since this document was first published, the W3C has published the Model and Syntax specification as a Recommendation.

I have updated the markup example to use current RDF 1.0 syntax. There have also been some terminology changes: 'PropertyType' became 'Property', 'Property' became 'Statement'. I have also added a brief mention of subject/predicate/object terminology, and lowercased a few mentions 'Value' (since rdf:object replaced rdf:value for talking about the object of a statement).

Monday, July 05, 2004

Your Mindset Determines Your Life

Hi Friends,
 
I read the article "Your Mindset Determines Your Life" from the link http://www.barvin.com/427.aspx. Its very nice once... read it and njoy....
 
Regards,
Prakash
 
 

Your Mindset Determines Your Life

by Sopan Greene

To keep at the top of your game you have to keep a clear head. You can't afford to fill up on news and negativity. The world's overflowin' with it and the only way to be a winner is to be in control of your thoughts.

Your thoughts become words, your words become actions and your actions become your destiny. Someone else came up with that, but I've always remembered it because it's true. Our actions show who we truly are and how shallow or deep our character is.

Where you are today is a direct reflection of the words, thoughts and actions you took days, months and years ago. No matter how much some people blame their parents,teachers, where they grew up, television, the government or anything else, the truth is that nobody got them where they are today but themselves. The longer we choose to not take responsibility for our lives, the longer we'll living uninspired lives that we don't love.

I've heard 40 year old adults who complain about their lives and take no responsiblility for what they've created. Give me a break. If you think you're on the recieving end of life you're mistaken and too lazy to do anything about it.

Simply think about the pictures you've seen on TV of people in third world countries. When I start to get mad about having to stand behind two people in a line at the grocery store I remind myself that a lot of people don't even know where their food will come from tonight. This shifts me from anger to gratitude.

The next time you notice yourself getting frustrated or angry about something in your life I invite you to shift your focus onto what's great in your life. It doesn't matter if you think you don't have enough money or you're mad at your dog for chewing up a shoe. Remember how much love you get from having your dog in the first place and how your weekly earnings are more than some people make in a month or year.

Keep your focus on what is working - for you and for others. We are bombarded with negative input all day long. We need to watch what goes in because our livlihoods depend on what we creatively crank out. Our heads need to be full of positive inspiration or free space where we can dream.

A recent study revealed that the people who watch the most television news are the most fearful in our society. Crime has been going down in America for over a decade, but since the news focuses on it and repeats it over and over, a lot of people are receiving multiple messages that the world isn't safe. These people end up being less confident and less successful as a result of being emotinally paralyzed to a degree by their fears.

Remember the old phrase "garbage in, garbage out"? If you were asked to be on television based on the person you are today would it be on Jerry Springer or Oprah?

Yeah, I know. You're probably laughing or snickering right now. I can practically see that questioning look of disbelief on your face.

You may even think that you wouldn't be on either one. Just imagine that there's a guy at your door and he's going to put you in a limo right now and you have to pick one show or the other to be a guest on or you'll be locked in your house for a month. (It's silly, but you get the point, I want you to get into it).

There's a definite difference between Oprah guests and Jerry's guests. Oprah's guests radiate confidence and have taken responsibility for their lives and have created lemonade out of lemons. Jerry's guests radiate low self esteem and think they're victims of life. Even worse, they think they have a right to inflict their negative self-defeating attitude on others.

Oprah people know that they're on the creative end of life. Jerry people choose to think they're on the receiving end of life. And the truth is that if that's what they beleive then thats what they get. It's an easy cop out to settle in life and a lot of folks do it.

It's important to keep a positive mental attitude nomatter what your life is like because nothing is more important than your thoughts. They determine how you'll experience the next minute, hour, day, week, year, decade and century. Rid your life of people and circumstances that don't inspire and enliven you. Life's simply too short to put up distracting drama and complainers who never change anything.

We all throw around phrases about how life is too short, but we don't live that way. Take at least one action today to reaffirm that you're creating a life you love.

Fire a friend who drains your energy. Read from an autobiography of a person who inspires you. Turn off the TV and write your goals and values. Take a walk in nature or with a friend who supports the best in you. Write a note to someone who has impacted your life in a positive way to let them know you're grateful for having them in your life. Rub your dog's belly and watch a doggy smile of ecstasy come out to greet you.

You're building a powerful future. Study successful people and you'll notice they all surround themselves with other inspired and successful people. Your life is your show, choose to be an Oprah person and aviod the Jerry people who show up in your life. Or better yet, treat the Jerry people you meet like they are the Oprah person buried inside them so we can all shine together.

Let your positive mental attitude infect everyone you meet and we'll all enjoy better lives.

 

 

Friday, July 02, 2004

Spring Clean Your Life

 

Spring Clean Your Life

by Kathy Gates

Our minds are much like our homes. They both get cluttered with old ideas, old attitudes, old conversations, old hurts. Both need a routine cleaning out of stuff that we collected for one reason, and are holding onto out of habit, neglect, or just sheer willfulness.

Pursuing a simple, sustainable, flexible, happier lifestyle means that you have to choose it. And that means choosing to lose some other things. It means getting rid of things that no longer work for you, it means updating the way you do things, it means freeing up some space for new and exciting opportunities and challenges.

Just like cleaning your home, a mental Spring Cleaning takes a dedicated effort, a conscious choice to make changes in your mind the same way you make changes in your décor.

Here are some ideas to get you started on a Spring Cleaning for your Life:

1. Clean out the anger, hatred, jealousy, and self doubt. If you need to apologize, bit the bullet and do it. If you’re still angry and waiting on an apology from someone who won’t or can’t give you one, decide to let it go. It’s not contributing to your life - in fact it’s contaminating it - so it needs to go to the junk heap at the curb. Only then can you put something POSITIVE in it’s place. Make some room for happiness.

2. Wash away delay and procrastination. Delay and procrastination set you up for frustration after frustration. You’ll find yourself constantly in the past, trying to catch up, scrambling around trying not to get caught. Is that really how you want to live? Get into the present! You’re missing your life by living yesterday over and over.

3. Dust off your attitude, and put on a fresh coat of positive. A positive attitude begins with gratitude. For just one day, practice giving instead of taking, practice sharing as much love, help, care, concern, and gratitude as possible. It’ll change your perspective.

4. Throw out misunderstanding, and lack of patience. Sweep out the dirt of gossip or lies. Open the shades and let in the warmth of friendship. True friendships, take work, time, energy, thoughtfulness. True friendships require forgiveness, require understanding. You don’t want to be a doormat to anyone, but you do want to find relationships that are equal and reciprocal. The results are certainly worth it.

5. Lighten up your thoughts with humor and fun. Yes life is difficult and the world can be a scary, tiresome place. But in your own world, you are in charge of every day. You decide what to think about. You decide when to laugh, you decide what to read, what to listen to, what to think about. Choose to insert laughter into each day; choose to have a little fun every day.

6. Open the windows of your mind to new ideas and a fresh perspective on living a happier, better, easier life. Change takes action. There’s no silver bullet, no magic pill. But if you’ll open your mind to some different ways of doing things, if you’ll try some new habits, if you’ll work your mind muscles and your organizational skills in a different way, you’ll find that you’ll create the life that you truly want, not just the one that you end up with.

7. Enjoy the person you are. If you don’t like yourself, find out why, and start working on becoming a person you do enjoy and that others will enjoy also. The returns will be worth it.

Thursday, July 01, 2004

File Types Created for Visual C++ Projects

File Types Created for Visual C++ Projects

Starter files are automatically generated for your Visual C++ project, whenever you create one either by using a wizard (such as the MFC AppWizard or the ActiveX ControlWizard) or one of the icons (such as the Application icon) available on the Projects tab of the New dialog.

This topic describes all the types of files that are associated with Visual C++ projects. The actual files included in your project will depend on the project type and the options you select when using a wizard. PROJNAME represents the name of your project.

What kind of files do you want to know more about?

Project Files and Makefiles

PROJNAME.DSW

This is the workspace file used within the development environment. It organizes all the projects into a single workspace.

PROJNAME.OPT

This is the workspace options file used within the development environment. It stores all the user options you create for your workspace, so that each time you open the project workspace it has the look and feel you want and includes any customizations you have made.

PROJNAME.DSP

This is the project file used within the development environment. In previous versions of Visual C++ this file extension was MAK. It stores the information specific to your project. There will be a separate .DSP file for each project you create. .DSP files are not compatible with NMAKE. You must export a makefile to build with NMAKE.

PROJNAME.CLW

This file is used by ClassWizard to store information about the classes in your project

PROJNAME.ODL

This file contains the Object Description Language source code for a control type library. This file is used by Visual C++ to generate a type library. The generated library exposes the control’s interface to other Automation clients.

PROJNAME.NCB  This is the No compile Browser file. It contains information generated by the parser which is used by ClassView, WizardBar, and Component Gallery. If the file is accidentally or deliberately deleted, it is automatically regenerated.

README.TXT  A file (located in the parent directory of the project) that describes each file in your project using the actual filenames created by AppWizard or ControlWizard.

Program or Control Source and Header Files

PROJNAME.H

This is the main include file for the program or DLL. It contains all global symbols and #include directives for other header files. It derives the CPrjnameApp class from CWinApp and declares an InitInstance member function. For a control, the CPrjnameApp class is derived from COleControlModule.

PROJNAME.CPP

This file is the main program source file. It creates one object of the class CPrjnameApp (which is derived from CWinApp) and overrides the InitInstance member function.

For executables, CPrjnameApp::InitInstance does several things. It registers document templates, which serve as a connection between documents and views, creates a main frame window, and creates an empty document (or opens a document if one is specified as a command-line argument to the application).

For DLLs and ActiveX (formerly OLE) controls, CProjNameApp::InitInstance registers the control’s object factory with OLE by calling COleObjectFactory::RegisterAll and makes a call to AfxOLEControlInit. In addition, the member function CProjNameApp::ExitInstance is used to unload the control from memory with a call to AfxOleControlTerm.

This file also registers and unregisters the control in the Windows registration database by implementing the DllRegisterServer and DllUnregisterServer functions.

PROJNAMECTL.H, PROJNAMECTL.CPP

These files declare and implement the CProjnameCtrl class. CProjnameCtrl is derived from COleControl, and skeleton implementations of some member functions are defined that initialize, draw, and serialize (load and save) the control. Message, event, and dispatch maps are also defined.

PROJNAMEDLG.CPP, PROJNAMEDLG.H

These files are created if you choose a dialog-based application. The files derive and implement the dialog class, named CProjnameDlg, and include skeleton member functions to initialize a dialog and perform dialog data exchange (DDX). Your About dialog class is also placed in these files instead of in PROJNAME.CPP.

DLGPROXY.CPP, DLGPROXY.H

in a dialog-based program, these are the implementation and header file for the project’s Automation proxy class for the main dialog. This is only used if you have chosen Automation support. This file is one of the templates provided by MFCAPWZ.DLL.

PROJNAMEDOC.CPP, PROJNAMEDOC.H

These files derive and implement the document class, named CProjnameDoc, and include skeleton member functions to initialize a document, serialize (save and load) a document, and implement debugging diagnostics.

PROJNAMESET.H/.CPP   These files are created if you create a program that supports a database and contains the recordset class.

PROJNAMEVIEW.CPP, PROJNAMEVIEW.H

These files derive and implement the view class, named CProjnameView, that is used to display and print the document data. The CProjnameView class is derived from CEditView, CFormView, CRecordView, CDaoRecordView, CTreeView, CListView, CRichEditView, CScrollView, or CView and has skeleton member functions to draw the view and implement debugging diagnostics. If you have enabled support for printing, message-map entries are added for print, print setup, and print preview command messages. These entries call the corresponding member functions in the base view class.

PROJNAMEPPG.H, PROJNAMEPPG.CPP

These files declare and implement the CProjnamePropPage class. CProjnamePropPage is derived from COlePropertyPage and a skeleton member function, DoDataExchange, is provided to implement data exchange and validation.

IPFRAME.CPP, IPFRAME.H

These files are created if the Mini-Server or Full-Server option is selected in AppWizard’s Automation Options page (step 3 of 6). The files derive and implement the in-place frame window class, named CInPlaceFrame, used when the server is in-place activated by a container program.

MAINFRM.CPP, MAINFRM.H

These files derive the CMainFrame class from either CFrameWnd (for SDI applications) or CMDIFrameWnd (for MDI applications). The CMainFrame class handles the creation of toolbar buttons and the status bar, if the corresponding options are selected in AppWizard’s Application Options page (step 4 of 6).

CHILDFRM.CPP, CHILDFRM.H

These files derive the CChildFrame class from CMDIChildWnd. The CChildFrame class is used for MDI document frame windows. These files are always created if you select the MDI option.

Precompiled Header Files

STDAFX.CPP, STDAFX.H

These files are used to build a precompiled header file PROJNAME.PCH and a precompiled types file STDAFX.OBJ. It is important that you neither define nor undefine any of the _AFX_NO_XXX macros in stdafx.h. See the Knowledge Base article "PRB: Problems Occur When Defining _AFX_NO_XXX". You can find Knowledge Base articles on the MSDN Library CD, or at http://www.microsoft.com/kb/.

Resource Files

PROJNAME.RC, RESOURCE.H

This is the resource file for the project and its header file. The resource file contains the default menu definition and accelerator and string tables for a generic MFC application. It also specifies a default About box and an icon file (RES\PROJNAME.ICO). The resource file includes the file AFXRES.RC for standard Microsoft Foundation class resources. If toolbar support has been specified as an option, it also specifies the toolbar bitmap file (RES\TOOLBAR.BMP).

PROJNAME.RC2

The RC2 file can be included at the top of the RC file in a project.  An RC2 file is useful for including resources used by several different projects.  Instead of having to create the same resources several times for different projects, you can put them in an RC2 file and include the RC2 file into the main RC file.

PROJNAME.DEF

If the project is for a DLL, this is the module-definition file for the project. For a control it provides the name and description of the control, as well as the size of the run-time heap.

RES\PROJNAME.ICO

This is the icon file for the MFC program or control. This icon appears when the application is minimized and is also used in the About box.

RES\TOOLBAR.BMP

This bitmap file is used to represent your program or control in a toolbar or palette. This bitmap is included in the project’s resource file.  The initial toolbar and status bar are constructed in the CMainFrame class.

Help File Option

MAKEHELP.BAT

This batch file (located in the parent directory) is provided only for backward compatibility with older projects. In Visual C++ 6.0, custom build rules are now attached to the .hpj, .cnt and resource.h files, making makehelp.bat obsolete.

This file is used to create the help file PROJNAME.HLP for your program or control.

PROJNAME.HPJ

This file (located in the parent directory) is the Help project file used by the Help compiler to create your program or control’s Help file.

PROJNAME.RTF

This Help file (located in the HLP subdirectory) contains template topics that you can edit and information on customizing your HPJ file.

PROJNAME.CNT

This file provides the structure for the Contents window in Windows Help.

PRINT.RTF

This file, created if printing support is selected (which it is by default), describes the printing commands and dialog boxes.

BULLET.BMP

This bitmap is used by standard Help file topics to represent bulleted lists.

Other File Options

PROJNAME.LIC

This is the user license file. This file must be present in the same directory as the program or DLL to allow an instance of the control to be created in a design-time environment. Typically, you will distribute this file with a control, but your customers will not distribute it.

PROJNAME.REG

This file is created in two cases. (1) You have selected any Automation server option or an Automation option. (2) You have selected a document file extension (one of the options available in the Advanced Options dialog). The file demonstrates the kind of registration settings the framework will set for you.

RES\ITOOLBAR.BMP

This file is created only if you have chosen any Automation server support and have also chosen the Dockable Toolbar option. The file contains tiled images for the toolbar when the server application is in-place activated inside a container application. The file is similar to the standard RES\TOOLBAR.BMP except that many nonserver commands are removed.