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 |