HINSTANCE from main()

vince koch vkoch@nvsmedia.com
Tue, 24 Apr 2001 17:18:00 -0400


Axel -

While browising FAQs and message boards I found a question you had
posted a few months ago.  I decided to write
you in case you had not learned the answer yet.  (I remember this answer
was pretty tough to find when I needed it!)

===========================================================================

Hi all,

I tried to write a Win32 program in with GHC 4.05 but I am stumbeling
over
the definition

type WNDCLASS =
 (ClassStyle,  -- style
  HINSTANCE,   -- hInstance
  MbHICON,     -- hIcon
  MbHCURSOR,   -- hCursor
  MbHBRUSH,    -- hbrBackground
  MbLPCSTR,    -- lpszMenuName
  ClassName)   -- lpszClassName

which looks fine if I'd knew where to get hInstance. main doesn't give
it
to me. Can specify something like

winMain hInstance ... =

as my main program entry? Or a more sensible question: Is there any
userguide on how to use the Win32 library?

Cheers,
Axel.

===========================================================================

You can get a handle to the current instance of your app in one of 2
ways that I am aware of...
1) You can replace your main() with WinMain (defined below) in which
case windows will pass you the instance,
and you can either pass it into other functions or use it directly

int WINAPI WinMain(
  HINSTANCE hInstance,  // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,      // pointer to command line
  int nCmdShow          // show state of window
);

OR

2) you can call GetModuleHandle (defined below) and pass in NULL for the
lpModuleName and cast the resulting
HMODULE into a HINSTANCE as shown below

HMODULE GetModuleHandle(
  LPCTSTR lpModuleName   // address of module name to return handle for
);

To Use:
    HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);



Good luck!
Vince