• Advertisement

Archived

This topic is now archived and is closed to further replies.

Simple question - WINAPI

This topic is 6053 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello I''ve gotten to make a window and use a menu system and all, but am trying to get this stuff into my head so I can stop referring to the simple tutorials. In breakin gup the creation of a simple window for winprog. (which it does work, so I''n not complaining) : I''ve extracted the register and create window procedures. The program compiles, but when run, the "Window creation Failed" error activates. What is essiantially required to make this program run ? (Not display the window, just "run" without errors). I''d just like to know how it works, instead of just memorizing code.. Wez
  
#include <windows.h>

const char g_szClassName[] = "myWindowClass";

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM 

lparam)
{
	return 0;
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hpinst, LPSTR cmdln, int 

cmdshow)
{
WNDCLASSEX wc;
HWND hwnd;

wc.cbSize	= sizeof(WNDCLASSEX);
wc.style	= CS_BYTEALIGNCLIENT;
wc.lpfnWndProc	= WndProc;
wc.cbClsExtra	= 0;
wc.cbWndExtra	= 0;
wc.hInstance	= hinst;	
wc.hIcon	= LoadIcon(NULL, IDI_EXCLAMATION);
wc.hCursor	= LoadCursor(NULL, IDC_CROSS);
wc.hbrBackground= (HBRUSH) (COLOR_APPWORKSPACE);
wc.lpszMenuName = NULL;
wc.lpszClassName= g_szClassName;
wc.hIconSm	= LoadIcon(NULL, IDI_EXCLAMATION);

if (!RegisterClassEx(&wc))
{
	MessageBox(NULL,"window reg failed","err",MB_OK);
	return 0;
}

hwnd = CreateWindowEx(
	WS_EX_CLIENTEDGE,
	g_szClassName,
	" - ? - ",
	WS_OVERLAPPEDWINDOW,
	CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
	NULL, NULL, hinst, NULL);

if (hwnd == NULL)
{
	MessageBox(NULL, "Window Creation Failed","err", MB_OK);
	return 0;
}

}
[/souce]  

Share this post


Link to post
Share on other sites
Advertisement
Guest Anonymous Poster
The problem is that you''re returning 0 from WndProc rather than passing the message on to DefWindowProc.

Share this post


Link to post
Share on other sites
oh ... yes ! .. um .. yes i .. er .. knew that already .. but .. er e=mc squared ..

heheh

thanx

hmm .. so

(btw im being sarc over there ^ .. i dint relly kno) ..

so .. in WndProc, instead of returning 0, I should return DefWindowProc(hwnd, msg, wparam, lparam);

and it should open and close without errors ? ..

will try

thanx

Share this post


Link to post
Share on other sites
If you debug your program, you''ll find that the window procedure is called multiple times in response to a call to CreateWindow.

Share this post


Link to post
Share on other sites
DefWindowProc doesn''t do default processing for WM_DESTROY, so you''ll have to add that to your procedure (or modifiy your message loop.

Share this post


Link to post
Share on other sites
*LOL* yeah i found that out, BC complained about the prog being open, checked out task manager and there were gazzilion test.exes running *lololo*

thanx :D ..

atleast the code makes a bit more sense as to why bits and pieces are there



will be moving on to the next ones, when i have sum time ..

Share this post


Link to post
Share on other sites

  • Advertisement