일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- tomcat
- orioledb
- springboot
- PG-Strom
- Spring Boot
- loadcomplete
- MariaDB
- OGM
- Maven Project
- Java
- HTML Special Entity
- tortoise SVN
- HTML Code
- exit code = -805306369
- BRIN
- Windows 10
- typeorm
- PostgreSQL
- STS
- JSP
- Spring Cloud
- Next.js
- Can't load AMD 64-bit .dll on a IA 32-bit platform
- graph database
- NestJS
- Spring
- Eclipse
- NextJs
- 서브라임 텍스트
- maven
- Today
- Total
Undergoing
빈 창 만들기 본문
참고 서적 : 윈도우즈 API 정복/김상형/한빛미디어
#include<stdio.h>
#include<conio.h>
void main()
{
clrscr();
getch();
}
간단하게 끝나는 위 소스코드도 API로 설계하면 다음과 같다.
#include <windows.h> //기본적인 데이터 타입, 함수 원형, 매크로 상수 및 그 외 윈도우즈 프로그래밍에 필요한 보조 헤더 파일 포함
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("First");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow) //프로그램의 시작점. 콘솔 프로그래밍의 main()과 같은 기능
// hInstance : 프로그램의 인스턴스 핸들
// hPrevInstance : 바로 앞의 실행된 현재 프로그램의 인스턴스 핸들. Win32에서는 없어도 됨
// IpszCmdParam : 명령형으로 입력된 프로그램 인수. 도스의 argv와 같은 기능
// nCmdShow : 프로그램이 실행될 형태.
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance; //윈도우 클래스를 등록하는 프로그램의 번호
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);
hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
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) //윈도우의 메시지 처리 함수 지정
{
switch (iMessage) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
뭐 이리 복잡하나요 ㅠㅠ
'~2012.05.01 Legacy' 카테고리의 다른 글
회전 3D 가스켓을 향한 시점의 이동 (0) | 2010.04.14 |
---|---|
OpenGL로 시계 그리기 (0) | 2010.04.06 |
Agile Process Model (0) | 2010.03.31 |
입력 n이 주어질 때 원주상에 균일하게 자리잡은 n 개의 점들을 서로 연결한 그림을 출력하는 OpenGL 프로그램을 작성하시오. (1) | 2010.03.19 |
삼각형 분할하기 + 사면체 분할하기 (0) | 2010.03.17 |