Re: My app's window class
I'm fishing around for examples for how to register my CMainFrame class.
I'm looking at this right now:
BOOL CSampleApp::InitInstance()
{
/********************************************************************/
// If a previous instance of the application is already running,
// then activate it and return FALSE from InitInstance to
// end the execution of this instance.
CWnd *pWndPrev;
// Determine if another window with your class name exists...
if (pWndPrev = CWnd::FindWindow(_T("WCE_MyNewClass"),NULL))
{
// Bring previous instance to the foreground
pWndPrev->SetForegroundWindow();
return FALSE;
}
WNDCLASS wndcls;
memset(&wndcls, 0, sizeof(WNDCLASS)); // start with NULL defaults
wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW;
wndcls.lpfnWndProc = ::DefWindowProc;
wndcls.hInstance = AfxGetInstanceHandle();
wndcls.hIcon = LoadIcon(IDR_MAINFRAME); // or load a different icon
wndcls.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wndcls.lpszMenuName = NULL;
// Specify your own class name for using FindWindow later
wndcls.lpszClassName = _T("MyNewClass");
// Register the new class and exit if it fails
if(!AfxRegisterClass(&wndcls))
{
AfxMessageBox(_T("Class Registration Failed\n"));
return FALSE;
}
/********************************************************************/
// Other code here...
}
How much of that applies to what I need to do?
------------------
"David Webber" <dave@musical-dot-demon-dot-co.uk> wrote in message
news:uxnFklsuIHA.4376@TK2MSFTNGP06.phx.gbl...
"SteveR" <maxsrussellatremovethisembarqmail.com> wrote in message
news:%23tma%23QsuIHA.5268@TK2MSFTNGP06.phx.gbl...
My installer calls FindWindow on my app, using the title parameter, and
that works fine, but I would rather use the class. I have a pretty
standard SDI and have never before had a reason to work with the name
app's window class. How do I know what that is?
In an MDI app it works as follows IIRC.
The class name is an element of the CREATESTRUCT which is passed to
CMDIFrameWnd::PreCreateWindow().
I believe MFC defines its own and if you look for windows of that class
you'll pick up almost anything created with MFC.
So the thing to do is override CMDIFrameWnd::PreCreateWindow() with your
own CMainFrame::PreCreateWindow() and replace the class name with your own
before calling CMDIFrameWnd::PreCreateWindow(). Then you can look for
your own application with that class name.
However you must also register your class name - I do it using
AfxRegisterClass()
[I do this so that I can check if my app is already running, and abort a
second instance if it tries to get going, passing its command line
parameters to the already running instance. That way double clicking on
a document file in explorer will open it in an already-running instance if
there is one, rather than launching a second.]
Dave
--
David Webber
Author of 'Mozart the Music Processor'
http://www.mozart.co.uk
For discussion/support see
http://www.mozart.co.uk/mozartists/mailinglist.htm