Win32 API how to hide console window

I'm practicing with the Win32 API and I have a questions.
This is the first program that I have created, and simply shows a window: the problem is that in addition to the program I get the DOS window, how can I do so that doesn't pop-up?

This is the code of the program, with CodeLite as IDE and the compiler is MinGW g+ + 4.8.1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <windows.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    PSTR szCmdLine, int iCmdShow)
{
	static TCHAR szAppName[] = TEXT ("HelloWin") ;
	HWND hwnd ;
	MSG msg ;
	WNDCLASS wndclass ;
	wndclass.style = CS_HREDRAW | CS_VREDRAW ;
	wndclass.lpfnWndProc = WndProc ;
	wndclass.cbClsExtra = 0 ;
	wndclass.cbWndExtra = 0 ;
	wndclass.hInstance = hInstance ;
	wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
	wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
	wndclass.hbrBackground = 0 ;
	wndclass.lpszMenuName = NULL ;
	wndclass.lpszClassName = szAppName ;
	if (!RegisterClass (&wndclass)) {
		MessageBox (NULL, TEXT ("This program requires Windows NT!"),
		            szAppName, MB_ICONERROR) ;
		return 0 ;
	}
	hwnd = CreateWindow (szAppName, // window class name
	                     TEXT ("The Hello Program"), // window caption
	                     WS_OVERLAPPEDWINDOW, // window style
	                     CW_USEDEFAULT, // initial x position
	                     CW_USEDEFAULT, // initial y position
	                     CW_USEDEFAULT, // initial x size
	                     CW_USEDEFAULT, // initial y size
	                     NULL, // parent window handle
	                     NULL, // window menu handle
	                     hInstance, // program instance handle
	                     NULL) ; // creation parameters
	ShowWindow (hwnd, iCmdShow) ;
	UpdateWindow (hwnd) ;
	while (GetMessage (&msg, NULL, 0, 0)) {
		TranslateMessage (&msg) ;
		DispatchMessage (&msg) ;
	}
	return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HDC hdc ;
	PAINTSTRUCT ps ;
	RECT rect ;
	switch (message) {
	case WM_CREATE:
		return 0 ;
	case WM_PAINT:
		hdc = BeginPaint (hwnd, &ps) ;
		GetClientRect (hwnd, &rect) ;
		EndPaint (hwnd, &ps) ;
		return 0 ;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0 ;
	}
	return DefWindowProc (hwnd, message, wParam, lParam) ;
}
Are you sure the program has a console window ? It could be CodeLite that's its showing it.

Launch the EXE from windows explorer to check.

If the problem persists, add -mwindows to compiler/linker command line (but I think you already have that, as you have WinMain entry point).
Yea, what modoran said. Here are some command lines for g++ I've used ...

1
2
g++ Client5.cpp Strings.cpp -lole32 -loleaut32 -luuid -oClient5_MinGW64.exe -mwindows -m64 -s -Os
g++ Client5.cpp Strings.cpp -lole32 -loleaut32 -luuid -oClient5_MinGW32.exe -mwindows -m32 -s -Os
Last edited on
Topic archived. No new replies allowed.