#include<Windows.h>

API선언, 상수, 데이터타입, 필요한 헤더들 포함.


Winmain

- Windows 프로그램의 엔트리 포인트


hInstance

- 프로그램의 인스턴스 핸들

- 인스턴스(Instance) : 클래스가 메모리에 실제로 구현된 실체


WndClass

-윈도우를 생성하는 클래스




typedef struct tagWNDCLASS{

UINT style;

WNDPROC lpfnWndProc;

int            cbClsExtra;

int            cbWndExtra;

HINSTANCE    hInstance;

HICON            hIcon;

HCURSOR        hCursor;

HBRUSH            hbrBackground;

LPCSTR            lpszMenuName;

LPCSTR            lpszCLassName;

}WNDCLASS;



style : 윈도우의 스타일 지정

lpfnWndProc : 메시지 발생시 여기서 지정한 함수를 호출하여 메시지를 처리함.

cbClsExtra,cbWndExtra : 예약영역

hInstance : 윈도우 클래스를 사용하느 프로그램

hIcon,hCursor : 마우스 커서와 아이콘 지정

hbrBackground : 배경 색지정

lpszMenuName : 프로그램이 사용할 메뉴 지정

lpszClassName : 클래스 이름 정의


윈도우 클래스를 정의한 후에는 다음과 같이 등록한다.

RegisterClass(&ClassName);


윈도우 생성 함수 : CreateWindow


HWND CreateWindow(lpszClassName,lpszWindowName,dwStyle,x,y,nWidth,nHeight,hwndParent,hmenu,hinst,lpvParam);


lpszClassName : 생성하고자 하는 윈도우 클래스 지정

lpszWindowName : 타이틀 바에 나타날 문자

dwStyle : 윈도우 형태 지정

X,Y,nWidth,nHeigth : 윈도우 크기와 위치 지정

hWndParent : 부모윈도우 존재 시 부모윈도우 핸들 지정

hmenu : 윈도우에서 사용할 메뉴의 핸들 지정

hinst : 윈도우를 만드는 주체 지정

lpvParam : 보통 NULL


화면 출력함수

ShowWindow(hWnd,nCmdShow);


hwnd : 출력하고자 하는 윈도우의 핸들 값

nCmdShow : 화면에 출력하는 방식 지정.


윈도우 창띄우기 소스


#include <windows.h>

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);


int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpCmdString, int CmdShow )

{

    WNDCLASS windowClass;

    HWND hWnd;


    windowClass.cbClsExtra = 0;

    windowClass.cbWndExtra = 0;

    windowClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);

    windowClass.hCursor = LoadCursor (NULL, IDC_ARROW);

    windowClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);

    windowClass.hInstance = hInstance;

    windowClass.lpfnWndProc = (WNDPROC)WndProc;

    windowClass.lpszClassName = "ClassName";

    windowClass.lpszMenuName = NULL;

    windowClass.style = CS_HREDRAW | CS_VREDRAW;

 

    if (!RegisterClass (&windowClass))

    {

        MessageBox(NULL, "Error : Cannot Register Window Class", "ERROR", MB_OK);

        return (0);

    } // end if

 

    hWnd = CreateWindow ("ClassName",   // 클래스명

       "Taesun1114",   // 윈도우 타이틀

       WS_OVERLAPPEDWINDOW | 

       WS_VISIBLE |

       WS_SYSMENU |

       WS_CLIPCHILDREN |

       WS_CLIPSIBLINGS,

       100,     // 윈도우 좌표 x

       100,     // 윈도우 좌표 y

       640,     // 윈도우 너비

       480,     // 윈도우 높이

       NULL, 

       NULL, 

       hInstance, 

       NULL);

 

    if ( hWnd == NULL )

    {

        MessageBox(NULL, "Error : Failed to Create Window", "ERROR", MB_OK);

        return (0);

    } // end if

 

    ShowWindow ( hWnd , CmdShow);

    UpdateWindow ( hWnd );

 

    MSG msg;

    while(1)

    {

        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))

        {

            if (msg.message == WM_QUIT)

                break;

 

            TranslateMessage(&msg); 

DispatchMessage (&msg);

        } // end if

    } // end while

 

    return msg.wParam;

}


LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam){

switch(iMessage)

{

case WM_DESTROY:

PostQuitMessage(0);

return 0;

}

return (DefWindowProc(hWnd,iMessage,wParam,lParam));

}


윈도우가 띄어짐!!


'System > Windows' 카테고리의 다른 글

Message HOOK - Window  (0) 2012.08.20
CreateProcess  (2) 2012.08.03
파일복사 api  (0) 2012.08.02
WinAPI 레지스트리  (0) 2012.07.27
WinApi MessageBox  (0) 2012.07.26

+ Recent posts