Hisworld.tistory.com
The hisWorld
(140)
hisworld_new
(0)
hisOld
(138)
Android
(7)
Computer Vision
(18)
JAVA
(4)
C/C++
(26)
열혈강의 C
(32)
TCP/IP socket
(12)
WinAPI
(16)
System Programming
(0)
etc
(23)
Plan
(0)
hisWorld
(0)
hiStory
(0)
hiStudy
(0)
hiSnap
(0)
홈
태그
미디어로그
위치로그
방명록
Windows Live Messenger
winapi
Join C
대학생 공모전
The Turing test page
훈스닷넷
C/C++ Reference
WIKI
/
/
블로그 내 검색
전체 글
WinAPI 기본
2013.06.20
WinAPI 기본
URUZ-7
2013. 6. 20. 20:04
2013. 6. 20. 20:04
원문 :
http://www.soen.kr/lecture/win32api/lec2/lec2-1-1.htm
윈도우즈API정복 - First.cpp
/* <Windows.h> 헤더 파일은 기본적인 데이터 타입, 함수 원형, 매크로 상수 등을 정의 윈도우즈 프로그래밍에 필요한 보조 헤더 파일을 포함 */ #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hinst; LPCTSTR lpszClass = TEXT("First"); /* 프로그램을 초기화하고 시작 -------------------------- APIENTRY : 윈도우즈 표준 호출 규약 __stdcall 을 사용 hInstance : 프로그램의 인스턴스 핸들 hPrevInstance : 바로 앞에 실행된 현재 프로그램의 인스턴스 핸들 (win32에서는 항상 NULL / 16비트와 호환성 위해 존재) lpszCmdParam : 명령행으로 입력된 프로그램 인수 (도스의 argv[] , 실행 직후 열일 파일 경로가 전달됨) nCmdShow : 프로그램의 실행 형태 (최소화,보통모양 등) */ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { HWND hWnd; MSG Message; WNDCLASS WndClass; g_hinst = hInstance; /* 윈도우 클래스 생성 (윈도우의 특성을 정의하는 구조체) ----------------------------------------------------- typedef struct tagWNDCLASS { UINT style; : 윈도우의 스타일 정의. |(or 연산자)로 여러개 사용 WNDPROC lpfnWndProc; : 메시지 처리 함수 지정.(함수명 자유) 메시지 발생시 지정함수 호출되어 메시지 처리 int cbClsExtra; int cbWndExtra; : 예약영역. 내부적으로 특수한 목적으로 사용. 미사용시 0 HINSTANCE hInstance; : 윈도우 클래스를 등록하는 프로그램의 번호 WinMain의 인수로 전달된 hInstance 값을 전달하면 됨. HICON hIcon; HCURSOR hCursor; : 윈도우가 사용할 마우스 커서,아이콘 지정. 사용자 커서,아이콘 사용가능 HBRUSH hbrBackground; : 배경색상 지정. GetStockObject 함수 또는 시스템 색상 지정 LPCTSTR lpszMenuName; : 프로그램이 사용할 메뉴 지정. 리소스 에디터에 의해 별도로 만들어져 링크시 병합 LPCTSTR lpszClassName; : 윈도우 클래스 이름 (실행파일 이름과 일치시켜 작성) CreateWindow 함수에 전달됨. } WNDCLASS, *PWNDCLASS; */ WndClass.cbClsExtra = 0; WndClass.cbWndExtra = 0; WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 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); /* 윈도우 생성 : CreateWindow() ----------------------------- 윈도우에 관한 모든 정보를 메모리에 만든 후 윈도우 핸들을 리턴. ----------------------------- HWND WINAPI CreateWindow( _In_opt_ LPCTSTR lpClassName, : 생성할 윈도우 클래스 지정 (윈도우 클래스의 멤버 값) _In_opt_ LPCTSTR lpWindowName, : 윈도우 타이틀바에 표시될 문자열 _In_ DWORD dwStyle, : 윈도우의 형태 지정(or 연산자로 연결된 비트 필드값) _In_ int x, _In_ int y, _In_ int nWidth, _In_ int nHeight, : 윈도우의 크기와 위치 _In_opt_ HWND hWndParent, : 부모 윈도우의 핸들(MDI,팝업 윈도우) _In_opt_ HMENU hMenu, : 메뉴의 핸들 _In_opt_ HINSTANCE hInstance, : 프로그램의 핸들 지정(WinMain 인수로 전달된 hInstance) 누가 윈도우 생성 주체 기억, 프로그램 종료시 파괴되지 않은 윈도우 자동 파괴 _In_opt_ LPVOID lpParam : 여러개 윈도우 생성시 고유의 파라미터 전달 CREATESTRUCT 구조체의 번지 ); --------------------------- */ hWnd = CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW , CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT, NULL,(HMENU)NULL,hInstance,NULL); /* 윈도우 표시 : ShowWindow() --------------------------- BOOL WINAPI ShowWindow( _In_ HWND hWnd, : 화면으로 출력하고자 하는 윈도우의 핸들 CreateWindow()가 리턴한 핸들 _In_ int nCmdShow : 윈도우를 화면에 출력하는 방법 지정 WinMain의 인자 nCmdShow 인자를 그대로 사용 (프로그램이 실행시킨 쉘로부터 전달된 것이며, 사용자가 프로그램 등록 정보 대화상자에서 지정한 값) ); */ ShowWindow(hWnd,nCmdShow); /* 메시지 루프 ------------ GetMessage : 메시지 큐에서 메시지를 읽어 들임. (WM_QUIT : FALSE, 그 외 : TRUE) TranslateMessage : 키보드 입력에 따른 메시지 생성. DispatchMessage : 메시지 큐에서 꺼낸 메시지를 윈도우 메시지 처리 함수(WndProc)로 전달 메시지 -> 윈도우로 전달 */ while(GetMessage(&Message,NULL,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } //Message.wParam : WM_QUIT가 전달한 탈출 코드. 사용되는 경우 거의 없음. return (int)Message.wParam; } /* 프로그램의 실질적인 처리를 담당 -------------------------------- CALLBACK : ( __stacall ) 호환성과 이식성을 위해 존재 --------------------------------------------------------- typedef struct tagMSG { HWND hwnd; : 메시지를 받을 핸들 윈도우 UINT message; : 메시지의 종류(가장 중요함) WPARAM wParam; LPARAM lParam; : 메시지의 부가정보. 32비트 DWORD time; : 메시지 발생 시간 POINT pt; : 메시지 발생시 마우스의 위치 } MSG, *PMSG, *LPMSG; --------------------------------------------------------- MSG의 앞쪽 멤버 4개와 동일한 인자를 갖음 */ LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { //메시지에 따른 분기 switch(iMessage) { case WM_DESTROY: PostQuitMessage(0); //WM_QUIT 메시지를 보냄 return 0; //WndProc()에서 메시지 처리했을 경우 반드시 0 리턴 } /* 나머지 메시지 처리 ------------------- switch()에서 분기한 메시지 외 나머지 메시지를 처리 DefwindowProc()가 리턴한 값은 WndProc()가 다시 리턴해야 함. */ return(DefWindowProc(hWnd,iMessage,wParam,lParam)); }
공유하기
게시글 관리
Hisworld.tistory.com
저작자표시
비영리
변경금지
PREV
이전
1
2
3
4
5
6
···
140
NEXT
다음
+ Recent posts
Powered by
Tistory
, Designed by
wallel
Rss Feed
and
Twitter
,
Facebook
,
Youtube
,
Google+
티스토리툴바