본문 바로가기
프로그래밍/API

API-Control(1)

by 리뷰하는 (게임)프로그래머_리프TV 2010. 4. 24.



API에 존재하는 컨트롤중 버튼과 체크박스, 라디오 버튼에 대해서만 먼저 보자,
사실 구지 소스로 만들지 않고,
추후에 다이얼로그를 사용해서 편하게 할 수 있으니,
그냥 존재에 대해서만 보고 넘어가도록 하겠다.

#include <windows.h>

enum { ID_R1 = 101, ID_R2, ID_R3, ID_R4, ID_R5, ID_R6 };
HWND r1, r2, r3, r4, r5, r6;
int Graph = 0;
COLORREF Color = RGB( 0, 0, 0 );

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("Control");

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
					 LPSTR lpszCmdParam, int nCmdShow )
{
	HWND hWnd;
	MSG Message;
	WNDCLASS WndClass;
	g_hInst = hInstance;

	WndClass.cbClsExtra = 0;
	WndClass.cbWndExtra = 0;
	WndClass.hbrBackground = (HBRUSH)( COLOR_BTNFACE+1 );
	WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
	WndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = WndProc;
	WndClass.lpszClassName = lpszClass;
	WndClass.lpszMenuName = NULL;
	WndClass.style = CS_HREDRAW | CS_VREDRAW;
	RegisterClass( &WndClass );

	hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
		NULL, (HMENU)NULL, hInstance, NULL );
	ShowWindow( hWnd, nCmdShow );

	while( GetMessage( &Message, NULL, 0, 0 ) )
	{
		TranslateMessage( &Message );
		DispatchMessage( &Message );
	}
	return (int)Message.wParam;
}

LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
	HDC hdc;
	PAINTSTRUCT ps;
	static HWND c1, c2, c3, c4;
	static BOOL bEllipse = FALSE;
	HBRUSH MyBrush, OldBrush;

	switch( iMessage )
	{
	case WM_CREATE:
		c1 = CreateWindow( TEXT("button"), TEXT("Draw Ellipse?"), WS_CHILD | WS_VISIBLE |
			BS_CHECKBOX, 20, 80, 160, 25, hWnd, (HMENU)3, g_hInst, NULL );
		c2 = CreateWindow( TEXT("button"), TEXT("Goodbye Message?"), WS_CHILD | WS_VISIBLE |
			BS_AUTOCHECKBOX, 20, 110, 160, 25, hWnd, (HMENU)4, g_hInst, NULL );
		c3 = CreateWindow( TEXT("button"), TEXT("3State"), WS_CHILD | WS_VISIBLE |
			BS_3STATE, 20, 140, 160, 25, hWnd, (HMENU)5, g_hInst, NULL );
		c4 = CreateWindow( TEXT("button"), TEXT("Auto 3State"), WS_CHILD | WS_VISIBLE |
			BS_AUTO3STATE, 20, 170, 160, 25, hWnd, (HMENU)6, g_hInst, NULL );

		CreateWindow( TEXT("Button"), TEXT("Click Me"), WS_CHILD | WS_VISIBLE |
			BS_PUSHBUTTON, 20, 20, 100, 25, hWnd, (HMENU)0, g_hInst, NULL );
		CreateWindow( TEXT("Button"), TEXT("Me Two"), WS_CHILD | WS_VISIBLE |
			BS_PUSHBUTTON, 20, 50, 100, 25, hWnd, (HMENU)1, g_hInst, NULL );

		CreateWindow( TEXT("button"), TEXT("Graph"), WS_CHILD | WS_VISIBLE |
			BS_GROUPBOX, 20, 200, 120, 130, hWnd, (HMENU)7, g_hInst, NULL );
		CreateWindow( TEXT("button"), TEXT("Color"), WS_CHILD | WS_VISIBLE |
			BS_GROUPBOX, 20, 350, 120, 130, hWnd, (HMENU)8, g_hInst, NULL );

		r1 = CreateWindow( TEXT("button"), TEXT("Rectangle"), WS_CHILD | WS_VISIBLE |
			BS_AUTORADIOBUTTON | WS_GROUP,
			25, 220, 100, 30, hWnd, (HMENU)ID_R1, g_hInst, NULL );
		r2 = CreateWindow( TEXT("button"), TEXT("Ellipse"), WS_CHILD | WS_VISIBLE |
			BS_AUTORADIOBUTTON,
			25, 250, 100, 30, hWnd, (HMENU)ID_R2, g_hInst, NULL );
		r3 = CreateWindow( TEXT("button"), TEXT("Line"), WS_CHILD | WS_VISIBLE |
			BS_AUTORADIOBUTTON,
			25, 280, 100, 30, hWnd, (HMENU)ID_R3, g_hInst, NULL );

		r4 = CreateWindow( TEXT("button"), TEXT("Black"), WS_CHILD | WS_VISIBLE |
			BS_AUTORADIOBUTTON | WS_GROUP,
			25, 370, 100, 30, hWnd, (HMENU)ID_R4, g_hInst, NULL );
		r5 = CreateWindow( TEXT("button"), TEXT("Red"), WS_CHILD | WS_VISIBLE |
			BS_AUTORADIOBUTTON,
			25, 400, 100, 30, hWnd, (HMENU)ID_R5, g_hInst, NULL );
		r6 = CreateWindow( TEXT("button"), TEXT("Blue"), WS_CHILD | WS_VISIBLE |
			BS_AUTORADIOBUTTON,
			25, 430, 100, 30, hWnd, (HMENU)ID_R6, g_hInst, NULL );

		CheckRadioButton( hWnd, ID_R1, ID_R3, ID_R1 );
		CheckRadioButton( hWnd, ID_R4, ID_R6, ID_R4 );
		return 0;
	case WM_COMMAND:
		switch( LOWORD(wParam) )
		{
		case 0:
			MessageBox( hWnd, TEXT("First Button Clicked"), TEXT("Button"), MB_OK );
			break;
		case 1:
			MessageBox( hWnd, TEXT("Second Button Clicked"), TEXT("Button"), MB_OK );
			break;
		case 3:
			if( SendMessage( c1, BM_GETCHECK, 0, 0) == BST_UNCHECKED )
			{
				SendMessage( c1, BM_SETCHECK, BST_CHECKED, 0 );
				bEllipse = TRUE;
			}
			else
			{
				SendMessage( c1, BM_SETCHECK, BST_UNCHECKED, 0 );
				bEllipse = FALSE;
			}
			InvalidateRect( hWnd, NULL, TRUE );
		case ID_R1:
			Graph = 0;
			break;
		case ID_R2:
			Graph = 1;
			break;
		case ID_R3:
			Graph = 2;
			break;
		case ID_R4:
			Color = RGB(0, 0, 0 );
			break;
		case ID_R5:
			Color = RGB(255, 0, 0 );
			break;
		case ID_R6:
			Color = RGB(0, 0, 255 );
			break;
		case 5:
			if( SendMessage( c3, BM_GETCHECK, 0, 0 ) == BST_UNCHECKED )
				SendMessage( c3, BM_SETCHECK, BST_CHECKED, 0 );
			else if( SendMessage( c3, BM_GETCHECK, 0, 0 ) == BST_CHECKED )
				SendMessage( c3, BM_SETCHECK, BST_INDETERMINATE, 0 );
			else if( SendMessage( c3, BM_GETCHECK, 0, 0 ) == BST_INDETERMINATE )
				SendMessage( c3, BM_SETCHECK, BST_UNCHECKED, 0 );
			break;
		}
		InvalidateRect( hWnd, NULL, TRUE );
		return 0;
	case WM_DESTROY:
		if( SendMessage( c2, BM_GETCHECK, 0, 0) == BST_CHECKED ) 
			MessageBox( hWnd, TEXT("Good Bye"), TEXT("Check"), MB_OK );
		PostQuitMessage(0);
		return 0;
	case WM_PAINT:
		hdc = BeginPaint( hWnd, &ps );
		if( bEllipse == TRUE )
		{
			Ellipse( hdc, 200, 100, 400, 200 );
		}
		else
		{
			Rectangle( hdc, 200, 100, 400, 200 );
		}
		MyBrush = CreateSolidBrush( Color );
		OldBrush = (HBRUSH)SelectObject( hdc, MyBrush );
		switch( Graph )
		{
		case 0:
			Rectangle( hdc, 200, 250, 400, 450 );
			break;
		case 1:
			Ellipse( hdc, 200, 250, 400, 450 );
			break;
		case 2:
			MoveToEx( hdc, 200, 250, NULL );
			LineTo( hdc, 400, 450 );
			break;
		}
		SelectObject( hdc, OldBrush );
		DeleteObject( MyBrush );
		EndPaint( hWnd, &ps );
		return 0;
	}
	return( DefWindowProc( hWnd, iMessage, wParam, lParam));
}​


// 실행 화면

'프로그래밍 > API' 카테고리의 다른 글

API-대화상자  (0) 2010.04.24
API-Control(2)  (0) 2010.04.24
API-BitMap  (0) 2010.04.24
API-RopMode  (0) 2010.04.24
API-GdiObject  (0) 2010.04.22