'Visual C++/API 프로젝트 따라하기'책에 나온 Visual C++ 6.0 API 예제들 따라하기.
API 프로그래밍 기본 작성 순서:
1. 메뉴에서 [File]-[New] 클릭, 팝업 대화상자에서 [Projects] 탭
선택, [Win32 Application] 선택, Location에 소스가 저장될 폴더
선택, Project name에 파일명을 넣고 [OK] 클릭.
2. Win32 Application-Step 1 of 1 대화상자에서 An Empty
Project 선택된 상태에서 [Finish], [OK] 클릭.
3. 워크스페이스에서 [FileView]탭 선택.
4. 파일명 files를 마우스 우클릭, 메뉴 중 [Add Files to Project...]선택,
팝업 대화상자에서 파일이름에 '파일명.rc'를 입력, [OK] 클릭.
5. 파일명 file-Source Files 아래 파일명.rc를 더블클릭. [예] 클릭.
6. 에디트 상자에 나타난 파일명.rc에서 마우스 우클릭, 메뉴 중 [Import...]선택,
팝업 대화상자에서 아이콘으로 사용할 ico 파일을 찾아 선택해 준다.
7. 화면에 선택한 아이콘 모양이 나타나고 워크스페이스에 ResourceView 탭이 새로 생긴다.
ResourceView탭을 선택, 파일명 resources 폴더를 더블클릭하면 에디터 화면에 IDI_ICON1이
보인다. IDI_ICON1에서 마우스 우클릭, 메뉴중 [Properties] 선택, 팝업 대화상자 중
ID에 "IDI_ICON"으로 입력, 엔터키.
8. 워크스페이스에서 [FileView]탭 선택.
9. 파일명 files를 마우스 우클릭, 메뉴 중 [Add Files to Project...]선택,
팝업 대화상자에서 파일이름에 '파일명.cpp' 입력, [OK] 클릭.
10. 파일명 file-Source Files 아래 파일명.cpp 더블클릭. [예] 클릭.
11. 소스를 입력할 수 있는 에디트 상자가 나타나는데 이곳에 소스를 입력한다.
12. 모두 작성한 뒤 [Build]-[Excute exa4.exe] 또는 Ctrl-F5로
컴파일, 실행.
|
#include "resource.h"
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//메시지 처리를 위한 콜백함수 선언
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
HWND hWnd;
MSG mSg;
char szTitle[]={"화면 기준 윈도우 4각 꼭지점 위치표시"};
char szClass[]="Class";
WNDCLASSEX WndEx;
WndEx.cbSize=sizeof(WndEx); //구조체 크기
WndEx.style=NULL; //윈도우의 스타일
WndEx.lpfnWndProc=WndProc;
//메시지 처리할 콜백 함수 지정,
//즉 WM_PAINT,WM_CREATE,WM_KEYDOWN등의 메시지를 처리할 함수를 지정
WndEx.cbClsExtra=0; //추가 클래스 지정
WndEx.cbWndExtra=0; //추가 윈도우 지정
WndEx.hInstance=hInstance; //인스턴스 핸들 지정
WndEx.hIcon=LoadIcon(NULL, "IDI_ICON"); //실행파일에 쓰일 아이콘 등록
WndEx.hCursor=LoadCursor(NULL,IDC_ARROW);
//윈도우에 쓰일 커서 지정
WndEx.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
//윈도우 배경화면 지정
WndEx.lpszMenuName=NULL; //메뉴 지정
WndEx.lpszClassName=szClass; //클래스 지정
WndEx.hIconSm=LoadIcon(hInstance, "IDI_ICON");
//윈도우 캡션에 쓰일 아이콘 지정
RegisterClassEx(&WndEx);
hWnd=CreateWindowEx(NULL,
szClass,
szTitle,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
320,
100,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hWnd,nShowCmd);
UpdateWindow(hWnd);
while(true){
if(PeekMessage(&mSg,NULL,0,0,PM_NOREMOVE)){
if(!GetMessage(&mSg,NULL,0,0))
break;
TranslateMessage(&mSg);
DispatchMessage(&mSg);
}
}
return mSg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
HDC hDC;
RECT rEct;
char szText[100];
switch(uMsg){
case WM_SIZE:
case WM_MOVE:
hDC=GetDC(hWnd);
GetWindowRect(hWnd,&rEct);
InvalidateRect(hWnd,NULL,true);
UpdateWindow(hWnd);
sprintf(szText,"left: %d, top: %d, right: %d, bottom: %d",
rEct.left,rEct.top, rEct.right, rEct.bottom);
TextOut(hDC,5,5,szText,lstrlen(szText));
return false;
case WM_KEYDOWN:
if(LOWORD(wParam)==VK_RETURN)
{
GetWindowRect(hWnd,&rEct);
sprintf(szText,"left: %d, top: %d, right: %d, bottom: %d",
rEct.left,rEct.top, rEct.right, rEct.bottom);
MessageBox(hWnd,szText,"출력",NULL);
}
return false;
case WM_DESTROY:
PostQuitMessage(0);
return false;
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
} |