I cant figure out how make the Button visible proccessing WM_PAINT myself, it just get visible after pressing it..

//THE WM_PAINT message:

case WM_PAINT:{

			RECT myrect;

				//get the device contest for the current window-------------------
				gsp_hdc = GetDC( hWnd );

				if( !gsp_hdc ){

					MessageBox( NULL, TEXT(" Error Getting DC!"), TEXT(" error"), MB_ICONEXCLAMATION | MB_OK );

					gsp_error_id = GetLastError();
					return 0;

				gsp_old_txtcolor = SetTextColor( gsp_hdc, RGB( 255, 0, 0 ) );
				//gsp_old_bgcolor  = SetBkColor( gsp_hdc, RGB( 0, 0, 0 ) );
				SetBkMode( gsp_hdc, TRANSPARENT );
						/*	all the functions above returns
							the not more current value, so
							you can save it for backup		*/

				TextOut( gsp_hdc, 0, 0, TEXT(" My text "), 9 );
				DrawText(	gsp_hdc, TEXT(" My other balacodation text,\r\nwith lots and lots of words...\r\njust to see what happens... "),
							(int)strlen	 (" My other balacodation text,\r\nwith lots and lots of words...\r\njust to see what happens... "),
							&gsp_textrect, DT_LEFT );
						/*	strlen counts the numbers of characters on a string	*/


				ReleaseDC( hWnd, gsp_hdc );		//cada GetDC precisa de um ReleaseDC

				GetClientRect( hWnd, &myrect );

				ValidateRect( hWnd, &myrect  );//WM_PAINT donne! ( NULL apaga tudo )



HWND gsp_button1;
	gsp_button1 = CreateWindow( TEXT("Button"), TEXT("My Button"), 
								300, 300, 150, 50,
								gsp_hmainwnd,(HMENU) 100, hInstance, NULL );
//THE MAIN WINDOW(parent):

	HWND gsp_hmainwnd;	//the window handle

	gsp_hmainwnd = CreateWindowEx( WS_EX_APPWINDOW | WS_EX_OVERLAPPEDWINDOW/* | WS_EX_TOPMOST*/,			//EX style
								   TEXT("GSP Main Windows Class"), TEXT("GSP Main Window"),					//Name Classe, Name Window
								   CW_USEDEFAULT, NULL,														//x, y
								   CW_USEDEFAULT, CW_USEDEFAULT,											//w, h
								   NULL, NULL,																//pai, menu
								   hInstance, NULL );														//instance module, value?

WNDCLASSEX gsp_wc;//the window class structure

	gsp_wc.cbSize		 = sizeof( WNDCLASSEX );					//tamanho da estrutura(em bytes)
	gsp_wc.style         = CS_HREDRAW | CS_VREDRAW;					//estilo da classe( varias opçoes CS_..)
	gsp_wc.lpfnWndProc   = gsp_MainWndProc;							//pointer pro 'wndproc'
	gsp_wc.cbClsExtra	 = 0;										//class extra bytes
	gsp_wc.cbWndExtra	 = 0;										//window extra bytes
	gsp_wc.hInstance	 = hInstance;								//instance q tem o 'wndproc'

	gsp_wc.hIcon		 = (HICON)LoadImage( NULL, TEXT("gsp_TsmIcon.ico"), IMAGE_ICON, 16, 16, LR_LOADFROMFILE|LR_SHARED);//LoadIcon( NULL, IDI_APPLICATION );		//large icon( ALT+TAB )TEM q ser NULL a hInstance..
	gsp_wc.hCursor		 = LoadCursor( NULL, IDC_ARROW );			//cursor
	gsp_wc.hIconSm		 = (HICON)LoadImage( NULL, TEXT("gsp_TsmIcon.ico"), IMAGE_ICON, 16, 16, LR_LOADFROMFILE|LR_SHARED);//small icon(caption, barr..)

	gsp_wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND + 1; 			//cor de fundo//pode ser: (HBRUSH) GetStockObject( BLACK_BRUSH );
	gsp_wc.lpszMenuName	 = TEXT("RC_GSP_MAINMENU");					//nome do menu

	gsp_wc.lpszClassName = TEXT("GSP Main Windows Class");			//nome da classe( identificador)

I dont get whats going on, since WS_VISIBLE is set...( I dont know what WS_VISIBLE is at all, I tried create my main window with WS_VISIBLE, but I STILL need to call ShowWindow, or notting is displaied )..

Not handling WM_PAINT myself solve the problem.
Using BeginPaint / EndPaint at the WM_PAINT solve the problem too.

So, what I have to do ?( I want proccess WM_PAINT myself, using GetDC / Release DC instead of Begin / EndPaint )