Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

wndclass and registerclass()

Posted on 2008-06-16
9
Medium Priority
?
761 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
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.

 
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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Hello there! As a developer I have modified and refactored the unit tests which was written by fellow developers in the past. On the course, I have gone through various misconceptions and technical challenges when it comes to implementation. I would…
The viewer will learn how to use the return statement in functions in C++. The video will also teach the user how to pass data to a function and have the function return data back for further processing.
The viewer will be introduced to the member functions push_back and pop_back of the vector class. The video will teach the difference between the two as well as how to use each one along with its functionality.
Suggested Courses

971 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