Solved

wndclass and registerclass()

Posted on 2008-06-16
9
745 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
  • 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
Independent Software Vendors: 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: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

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

Suggested Solutions

Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
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…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

685 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