Jump to content

  • Log In with Google      Sign In   
  • Create Account

MDI and Win32 API....


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 Mike   Members   -  Reputation: 140

Like
Likes
Like

Posted 08 August 2001 - 03:38 AM

The code:
  
#include 

#define APP_NAME	"server_test"
#define APP_WIDTH	300
#define APP_HEIGHT	200
#define APP_X		(GetSystemMetrics( SM_CXSCREEN )-APP_WIDTH)>>1
#define APP_Y		(GetSystemMetrics( SM_CYSCREEN )-APP_HEIGHT)>>1

#define CHAT_SERVER_NAME "chat_server"

HWND g_hWnd;
HWND g_mdi;

LRESULT CALLBACK ChatProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
	return DefMDIChildProc( hWnd, msg, wParam, lParam );
}

LRESULT CALLBACK WinProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
	switch( msg )
	{
	case WM_CLOSE:
		PostQuitMessage( 0 );
		return 0;

	default:
		return DefFrameProc( hWnd, g_mdi, msg, wParam, lParam );
	}
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE, LPSTR, int )
{
	WNDCLASS	wc;
	MSG			msg;

	wc.cbClsExtra		= NULL;
	wc.cbWndExtra		= NULL;
	wc.hbrBackground	= (HBRUSH)GetStockObject( GRAY_BRUSH );
	wc.hCursor			= LoadCursor( NULL, IDC_ARROW );
	wc.hIcon			= LoadIcon( NULL, IDI_APPLICATION );
	wc.hInstance		= hInstance;
	wc.lpfnWndProc		= WinProc;
	wc.lpszClassName	= APP_NAME;
	wc.lpszMenuName		= NULL;
	wc.style			= CS_HREDRAW | CS_VREDRAW;

	RegisterClass( &wc );

	wc.cbClsExtra		= NULL;
	wc.cbWndExtra		= NULL;
	wc.hbrBackground	= (HBRUSH)GetStockObject( GRAY_BRUSH );
	wc.hCursor			= LoadCursor( NULL, IDC_ARROW );
	wc.hIcon			= LoadIcon( NULL, IDI_APPLICATION );
	wc.hInstance		= hInstance;
	wc.lpfnWndProc		= ChatProc;
	wc.lpszClassName	= CHAT_SERVER_NAME;
	wc.lpszMenuName		= NULL;
	wc.style			= CS_HREDRAW | CS_VREDRAW;

	RegisterClass( &wc );

	g_hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, APP_X, APP_Y,
							 APP_WIDTH, APP_HEIGHT, NULL, NULL, hInstance, NULL );

	ShowWindow( g_hWnd, SW_SHOW );
	UpdateWindow( g_hWnd );

	CLIENTCREATESTRUCT ccs;

	ccs.hWindowMenu		= NULL;
	ccs.idFirstChild	= 50000;

	g_mdi = CreateWindow( "MDICLIENT", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
							0, 0, 0, 0, g_hWnd, NULL, hInstance, (LPSTR)&ccs );

	MDICREATESTRUCT mdic;

	mdic.cx			= 100;
	mdic.cy			= 100;
	mdic.hOwner		= hInstance;
	mdic.lParam		= NULL;
	mdic.style		= NULL;
	mdic.szClass	= CHAT_SERVER_NAME;
	mdic.szTitle	= "Chat Server Window";
	mdic.x			= 10;
	mdic.y			= 10;

	HWND c = (HWND)SendMessage( g_mdi, WM_MDICREATE, NULL, (LPARAM)(LPMDICREATESTRUCT)&mdic );

	while( GetMessage( &msg, 0, 0, 0 ) )
	{
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}

	return msg.wParam;
}
 
The Problem: When you run the program it does not show the MDI child window until you either resize the window or minimize and maximize the main window. What in the heck am I missing? Edited by - mike on August 8, 2001 10:42:01 AM

Sponsor:

#2 Alamar   Members   -  Reputation: 256

Like
Likes
Like

Posted 08 August 2001 - 04:57 AM

What you''re missing, is that you''re making an MDI app in win32 when MFC has been working on it and doing a much better job of it than you have, for years...

G''luck,
-Alamar

#3 Mike   Members   -  Reputation: 140

Like
Likes
Like

Posted 08 August 2001 - 08:10 AM

okay, now that i''ve heard the mfc advertisement, does anyone with any actually knowladge care to give me a helping hand? I know that MFC does MDI much better. So does VB for that matter. For what I''m doing I do not want the extra fluff indtroduced by MFC.

#4 Zerosignull   Members   -  Reputation: 122

Like
Likes
Like

Posted 08 August 2001 - 08:16 AM

quote:
Original post by Mike
okay, now that i''ve heard the mfc advertisement


LOL thats a clasic well done


~prevail by daring to fail~

#5 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 08 August 2001 - 05:49 PM

The problem is the way you create your client window. You make it a rectangle with coordinates (0, 0) - (0, 0). When you call resize, it automatically gets bigger (to match the window size), so then the child window (which is always created) becomes visible.

Change:

g_mdi = CreateWindow( "MDICLIENT", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0, 0, 0, 0, g_hWnd, NULL, hInstance, (LPSTR)&ccs );

to:

g_mdi = CreateWindow( "MDICLIENT", NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, 0, 0, APP_WIDTH, APP_HEIGHT, g_hWnd, NULL, hInstance, (LPSTR)&ccs );

And it works.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS