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

x
?
Solved

wndclass and registerclass()

Posted on 2008-06-16
9
Medium Priority
?
758 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
Visualize your virtual and backup environments

Create well-organized and polished visualizations of your virtual and backup environments when planning VMware vSphere, Microsoft Hyper-V or Veeam deployments. It helps you to gain better visibility and valuable business insights.

 
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 400 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

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

Question has a verified solution.

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

This document covers how to connect to SQL Server and browse its contents.  It is meant for those new to Visual Studio and/or working with Microsoft SQL Server.  It is not a guide to building SQL Server database connections in your code.  This is mo‚Ķ
Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
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.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

715 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