Solved

wndclass and registerclass()

Posted on 2008-06-16
9
748 Views
Last Modified: 2013-11-26
Hello
In the following code, registerclass(wndclass) is called, what exactly are we doing in this call conceptually? am new to GUI application!!!!!!!!!


typedef struct tagAPPINFO {
   INT      iVersion;
   INT      iFiller;

   HWND     hAppInst;
   INT      iAppType;

   HWND     hWndFrame;
   HWND     hWndMDIClient;
   HWND     hWndToolbar;
   HWND     hWndStatbar;

   UINT     uMemBlocks;
   UINT     uMemBlockSize;

   char     szAppName  [MAXOBJNAME      + 2];
   char     szFileName [FILENAME_LENGTH + 2];
   char     szHelpFile [PATHNAME_LENGTH + 2];
   char     szPathName [PATHNAME_LENGTH + 2];
   BOOL     bDeltaMode;
   char     szSysPathName[PATHNAME_LENGTH + 2];
   } APPINFO;

int WINAPI TNGMain (LPSTR lpszCmdLine, ULONG TNGContext, int nCmdShow, HWND hParent)
{
/* clear application information structure */
   memset  (&appInfo, '\0', sizeof (APPINFO));

   /* save instance handle in structure */
   hAPPINST = hResourceModule;
   hWndParent = hParent;

   /* set other application information in structure */
   appInfo.iVersion      = iVERSION;
   appInfo.uMemBlocks    = NUMMEMBLOCKS;
   appInfo.uMemBlockSize = MEMBLOCKSIZE;
   strncpy(appInfo.szAppName,  szAPPNAME, MAXOBJNAME);
   strcpy(appInfo.szFileName, szFILENAME);
   strcpy(appInfo.szHelpFile, sz2DHELPFILE);

   /* register window classes if this is the first instance */
   if (!RegisterClasses (hAPPINST))
      return FALSE;
.
.
.
}

static BOOL PASCAL RegisterClasses (hInstance)
HANDLE      hInstance;
   {
   WNDCLASS   wndclass;

   SetFunctionName (RegisterClasses);

/* register class for frame window */
   wndclass.style         = CS_HREDRAW | CS_VREDRAW;  
   wndclass.lpfnWndProc   = GRFFrameWndProc;            
   wndclass.cbClsExtra    = 0;
   wndclass.cbWndExtra    = 0;
   wndclass.hInstance     = hInstance;
   wndclass.hIcon         = LoadIcon   (hInstance, "GrafBASEIcon");
   wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW);
   wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
   wndclass.lpszMenuName  = NULL;
   wndclass.lpszClassName = appInfo.szFileName;

   if (!RegisterClass (&wndclass))
      return FALSE;
 
/* register class for MDI child windows */
/*   wndclass.style         = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; */
   wndclass.style         = CS_DBLCLKS;
   wndclass.lpfnWndProc   = GRFChildWndProc;
   wndclass.hIcon         = LoadIcon   (hInstance, "CALOGOICON");
   wndclass.lpszClassName = szWndClass;
   wndclass.lpszMenuName  = NULL;

   return (RegisterClass (&wndclass));
   }


Regards
Sham

0
Comment
Question by:sham_ibmgs
[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
  • 3
  • 3
  • 3
9 Comments
 
LVL 19

Expert Comment

by:alb66
ID: 21792710
0
 

Author Comment

by:sham_ibmgs
ID: 21792978
Why are we running RegisterClass() with wndclass as parameter?

Regards
Sham
0
 
LVL 19

Expert Comment

by:alb66
ID: 21793068
"wndclass" is the structure where you define all the window class behavior ( for example the background color).
RegisterClass registers in the system the "wndclass" that you have defined.
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 10

Expert Comment

by:peetm
ID: 21793176
You can sort of think as RegisterClass as the definition of an *object's class* definition in an OO language.

The WNDCLASS defines this template,  RegisterClass let's the system know about it once you've defined it, and the WndProc defines the behaviour of objects of that type - think of it as a single parameterised method definition.

Once you've registered a class, you can then create as many instances of objects of that class using CreateWindow etc.
0
 

Author Comment

by:sham_ibmgs
ID: 21793232
@peet: definition of an object's class definition?

Regards
Sham
0
 
LVL 19

Accepted Solution

by:
alb66 earned 100 total points
ID: 21793292
From the link of my first post...

Each window class has an associated window procedure shared by all windows of the same class. The window procedure processes messages for all windows of that class and therefore controls their behavior and appearance. For more information, see Window Procedures.

A process must register a window class before it can create a window of that class. Registering a window class associates a window procedure, class styles, and other class attributes with a class name. When a process specifies a class name in the CreateWindow or CreateWindowEx function, the system creates a window with the window procedure, styles, and other attributes associated with that class name.
0
 

Author Closing Comment

by:sham_ibmgs
ID: 31467534
Done
0
 
LVL 10

Expert Comment

by:peetm
ID: 21793325
Like in a language like C++ ..

class Foo
{
public:
     Foo();
}

So now you can have any number of Foos

Foo a;
Foo b;

etc.

The WNDCLASS is very similar in so many ways.

WNDCLASS definition somewhat analogous to ...

class appInfo_szFileName
{
public:

    // No constructor - handled by WM_CREATE and CreateWindow().

    long GRFFrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
}

So now you can ...

HWND hWnd = CreateWindow(appInfo_szFileName, ...)

CreateWindow's creating a appInfo_szFileName type window and returning a polymorphic pointer to it here.

// Single method that handles all message traffic for objects of type appInfo_szFileName
//
HWND appInfo_szFileName::GRFFrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
}

Hope this hasn't confused more than it's helped??
class

Open in new window

0
 
LVL 10

Expert Comment

by:peetm
ID: 21793356
It really pi***s me off when someone asks an additional question, and you answer it - just to find they've already accepted a solution!
0

Featured Post

[Webinar] Code, Load, and Grow

Managing multiple websites, servers, applications, and security on a daily basis? Join us for a webinar on May 25th to learn how to simplify administration and management of virtual hosts for IT admins, create a secure environment, and deploy code more effectively and frequently.

Question has a verified solution.

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

Suggested Solutions

For those of you who don't follow the news, or just happen to live under rocks, Microsoft Research released a beta SDK (http://www.microsoft.com/en-us/download/details.aspx?id=27876) for the Xbox 360 Kinect. If you don't know what a Kinect is (http:…
More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The goal of the video will be to teach the user the difference and consequence of passing data by value vs passing data by reference in C++. An example of passing data by value as well as an example of passing data by reference will be be given. Bot…

734 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