디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

입에횽 늦었지만 올려봄;;

야간편돌이(175.196) 2013.03.13 06:28:17
조회 118 추천 0 댓글 5

코드 죤나 ㅜㅜ 맨 마지막줄에 질문 올려놨으니깐 봐주셍

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT messa, WPARAM wParam, LPARAM lParam);
HINSTANCE g_hInst;
LPCTSTR lpszClass = "HelloAPI";
LPCTSTR ChildClassName = "ChildWin";

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
 HWND hWnd;
 MSG Messa;// MSG = 메시지 구조체, (HWND hwnd메시지받을 핸들, UINT messa어떤 종류의 메시지인가,
   //WPARAM wParam 부가 정보1, LPARAM lParam 부가 정보2, DWORD time 메시지 발생 시간,
   //POINT pt 발생시 마우스 위치)
   //메시지 종류에 따라 WPARAM, LPARAM의 의미가 달라짐
 WNDCLASS WndClass;
 g_hInst=hInstance;

 WndClass.cbClsExtra=0;//(1)
 WndClass.cbWndExtra=0;//(2)  (1)과 (2)는 예약영역으로 아주 특수한 목적에 사용되는 여분의 공간, 미사용시 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)WndProc;  //윈도우 프로시저 지정
 WndClass.lpszClassName=lpszClass;   //클래스 이름. 5행의 lpszClass="HelloAPI";
 WndClass.lpszMenuName=NULL;     //메뉴는 코드에서 만드는 것이 아니라 사용하지 않을 경우 NULL값 입력
 WndClass.style=CS_HREDRAW | CS_VREDRAW;  //클래스의 스타일=윈도우의 수직, 수평 크기가 변할 경우 윈도우를 다시 그린다
 RegisterClass(&WndClass);     //클래스 등록!!

 WndClass.lpfnWndProc = ChildWndProc;  //차일드 윈도우 프로시저
 WndClass.lpszClassName = ChildClassName; //차일드 윈도우 클래스 이름(6행의 "ChildWin")
 RegisterClass(&WndClass);     //차일드 윈도우 클래스 등록

 hWnd=CreateWindow(lpszClass,  //lpszClassName윈도우 클래스 이름(HelloAPI)
  "메인 윈도우",   //lpszWindowName윈도우 타이틀
  WS_OVERLAPPEDWINDOW    //dwStyle윈도우 형태(시스템 메뉴, 최대 최소 버튼, 타이틀바, 경계선을 가짐)
  | WS_VISIBLE,
  100, 100,      //x, y좌표(기준점은 모니터의 왼쪽 위 구석, 기준점에서 멀어지는 값)
  750, 600,      //nWidth, nHeight윈도우 폭(Width)과 높이(Height)
  (HWND)NULL,      //hwndParent부모 윈도우 핸들, 없을경우 NULL(이게 부모윈도우라서 NULL값 사용)
  (HMENU)NULL,     //hmenu윈도우가 가지는 메뉴 핸들, 없을경우 NULL
  hInstance,      //hinst객체 핸들, 윈도우를 만드는 주체로 WinMain의 매개변수로 전달된 값 사용
  NULL);       //lpvParam여분의 데이터 CREATESTRUCT라는 구조체의 번지, 특수목적에 사용, 보통은 NULL값 사용

 ShowWindow(hWnd, nCmdShow);// 윈도우 출력(출력할 윈도우 핸들, 출력방법)

 while(GetMessage(&Messa,0,0,0)) {
  TranslateMessage(&Messa);//키보드 메세지 입력, A를 눌렀다가 떼면 A문자가 입력되었다는 메세지를 만드는식의 역할
  DispatchMessage(&Messa);
 }
 return Messa.wParam;
}

#define ID_OK_BTN 2000
#define ID_OK_BTN1 2001
#define ID_OK_BTN2 2002
#define ID_OK_BTN3 2003
#define ID_OK_BTN4 2004
#define ID_OK_BTN5 2005

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessa, WPARAM wParam, LPARAM lParam)
{
 char text[] = "메인 윈도우 생성ㅋㅋ";

 switch(iMessa)
 {
 case WM_PAINT:
  {
   PAINTSTRUCT ps;
   HDC hdc = BeginPaint(hWnd,&ps);
   TextOut(hdc,100,100,text,strlen(text));
   EndPaint(hWnd,&ps);
   return 0;
  }
 case WM_CREATE:
  { //차일드 윈도우가 만들어진 후 윈도우 핸들값이 저장됨
   HWND hChildWnd = CreateWindow(
   ChildClassName,    //차일드 윈도우 클래스 이름
   "차일드 윈도우",
   WS_OVERLAPPEDWINDOW | WS_CHILD,//차일드 윈도우 형태
   150, 150,
   260, 200,
   hWnd,      //부모 윈도우
   (HMENU)2000,    //차일드 윈도우 ID
   g_hInst,     //객체 핸들
   (LPVOID)NULL);    //여분의 데이터
  //차일드 윈도우가 성공적으로 생성되었는지 윈도우 핸들을 검사
   if(!hChildWnd)  return -1;

   ShowWindow(hChildWnd, SW_SHOW); // 차일드 윈도우를 화면에 보여 줌

   //버튼 윈도우의 핸들이 지정
   hChildWnd = CreateWindow(
    "button",
    "정리요약1",
    WS_CHILD | WS_VISIBLE, //컨트롤은 예외 없이 차일드 윈도우이기 때문에 WS_CHILD 스타일이 필수.
       //WS_VISIBLE 스타일을 주어야 ShowWindow 함수를 호출하지 않아도 컨트롤이 나타나기에
       //위의 두 스타일은 컨트롤의 경우 예외 없이 주어야 한다.
    20,
    400,
    100,
    30,
    hWnd,
    (HMENU) ID_OK_BTN,//56행에서 정의한 #define ID_OK_BTN 2000 참조 (ID_OK_BTN 이라는 글자는 2000이라는 값을 가짐)
    g_hInst,
    (LPVOID) NULL);
 //  if(!hChildWnd) return -1;//버튼이 만들어지지 않으면 종료
 //  return 0;
   
   hChildWnd = CreateWindow(
    "button",
    "정리요약2",
    WS_CHILD | WS_VISIBLE,
    140,
    400,
    100,
    30,
    hWnd,
    (HMENU) ID_OK_BTN1,
    g_hInst,
    (LPVOID) NULL);

   hChildWnd = CreateWindow(
    "button",
    "정리요약3",
    WS_CHILD | WS_VISIBLE,
    260,
    400,
    100,
    30,
    hWnd,
    (HMENU) ID_OK_BTN2,
    g_hInst,
    (LPVOID) NULL);

   hChildWnd = CreateWindow(
    "button",
    "정리요약4",
    WS_CHILD | WS_VISIBLE,
    380,
    400,
    100,
    30,
    hWnd,
    (HMENU) ID_OK_BTN3,
    g_hInst,
    (LPVOID) NULL);

   hChildWnd = CreateWindow(
    "button",
    "정리요약5",
    WS_CHILD | WS_VISIBLE,
    500,
    400,
    100,
    30,
    hWnd,
    (HMENU) ID_OK_BTN4,
    g_hInst,
    (LPVOID) NULL);

   hChildWnd = CreateWindow(
    "button",
    "정리요약6",
    WS_CHILD | WS_VISIBLE,
    620,
    400,
    100,
    30,
    hWnd,
    (HMENU) ID_OK_BTN5,
    g_hInst,
    (LPVOID) NULL);
   if(!hChildWnd) return -1;
   return 0;

  }

 case WM_COMMAND:
  {
   //WM_COMMAND 메시지를 발생시킨 컨트롤의 ID를 검사
   if(LOWORD(wParam) == ID_OK_BTN)
   {//메시지 박스를 띄움
    MessageBox(hWnd, "[정리요약1]\n윈도우 프로그램이란 현재 개인용 컴퓨터에서 동작되는 Windows 운영체제에서\n실행할 수 있는 프로그램으로, 모든 윈도우는 윈도우 클래스로부터 만들어진다.\n윈도우 클래스는 윈도우를 만들기 위한 형틀이며 생성될 윈도우의 여러가지 특징\n을 모아놓은 구조체이다. CreateWindow 함수는 첫 번째 인수 lpszClassName\n으로 전달된 윈도우 클래스로부터 만들고자 하는 윈도우의 특성을 알아내며 윈도\n우 클래스가 지정한 특성대로 윈도우를 만든다.","정리요약1",MB_OK);
   }
   else if(LOWORD(wParam) == ID_OK_BTN1)
   {
    MessageBox(hWnd, "[정리요약2]\n메시지는 시스템이나 응용 프로그램에 의해 생성된다. 키보드나 마우스 등의 사용\n자 입력 시 시스템은 입력에 대해 메시지를 발생시키며 시스템의 상황 변화를 통지\n하기 위해서도 메시지를 발생시킨다. 응용 프로그램도 윈도우 간의 통신을 위해\n메시지를 보내며 특정함수 호출에 의해 간접적으로 메시지가 발생하기도 한다. 이\n처럼 Windows 운영체제는 메시지의 생성과 처리를 무수히 반복하며 실행된다.","정리요약2",MB_OK);
   }
   else if(LOWORD(wParam) == ID_OK_BTN2)
   {
    MessageBox(hWnd, "[정리요약3]\n운영체제는 하나의 시스템 메시지 큐를 관리하며 또한 각 스레드별로 하나씩 메시\n지 큐를 생성한다. 큐(Queue)라는 자료구조는 FIFO의 원칙에 따라 운영되는 자\n료구조이다. 즉, 메시지 큐는 들어온 순서대로 메시지를 쌓아놓는 곳이다. 시스템\n메시지 큐는 시스템 전체에 유일한 메시지 큐이며 모든 큐 메시지는 먼저 이곳에\n저장된다. 시스템은 큐의 메시지를 하나씩 꺼내어 어떤 스레드로 보낼 메시지인지\n판단하여 스레드 메시지 큐로 메시지를 보내고 시스템 메시지 큐에서 메시지를 지\n운다. 그러면 메시지 루프에 의해 이 메시지는 해당 윈도우의 윈도우 프로시저로\n보내져 처리되고 스레드 메시지 큐에서 메시지는 삭제된다.","정리요약3",MB_OK);
   }
   else if(LOWORD(wParam) == ID_OK_BTN3)
   {
    MessageBox(hWnd, "[정리요약4]\nWindows 운영체제는 세 가지 동적 연결 라이브러리(DLL)로 구성되어 있는데 메\n모리를 관리하고 프로그램을 실행시키는 KERNEL, 사용자 인터페이스와 윈도\n우를 관리하는 USER, 화면처리와 그래픽을 담당하는 GDI이다. Windows 운\n영체제 API 함수의 대부분이 이 세 가지 DLL에 의해 제공되고 있다.","정리요약4",MB_OK);
   }
   else if(LOWORD(wParam) == ID_OK_BTN4)
   {
    MessageBox(hWnd, "[정리요약5]\n콜백(Callback) 함수는 응용 프로그램이 제공하며 운영체제가 필요할 때 호출하는\n함수로 "운영체제에 의해 호출되는 프로그램 내부의 함수"라고 할 수 있다.","정리요약5",MB_OK);
   }
   else if(LOWORD(wParam) == ID_OK_BTN5)
   {
    MessageBox(hWnd, "[정리요약6]있는 프로그램 만든다.","정리요약6",MB_OK);
   }

   return 0;
  }

 case WM_DESTROY:
   PostQuitMessage(0);
   return 0;
 }

 return DefWindowProc(hWnd, iMessa, wParam, lParam);
}

LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT messa, WPARAM wParam, LPARAM lParam)
{
 char text[] = "차일드 윈도우 생성ㅋㅋㅋ";
 switch(messa)
 {
 case WM_PAINT:
  {
   PAINTSTRUCT ps;   //페인트 정보 구조체
   HDC hdc = BeginPaint(hWnd, &ps); //DC 핸들 얻어오기
   TextOut(hdc, 10, 10, text, strlen(text)); //문자열 출력 함수
   EndPaint(hWnd, &ps);     //핸들 해제
   return 0;
  }
 }
 return DefWindowProc(hWnd, messa, wParam, lParam);
}

이게 맨 처음 나오는 코딩인데
그 전까지 너무 설명(암기위주로 요구되는)만 해대서 ㅜㅜ


그리고 연습문제로
1. 예제 프로그램에서 버튼을 생성하고 버튼을 클릭했을 때 메시지 박스가 나타나는 기능을 추가하시오.
이거는 위에 있는 예제문제에 이미 포함된 내용 아니야?
프로그램에 버튼 있고 버튼 클릭하면 메시지박스 나오잖아.. 아닌건지 모르겐다

2. 예제 프로그램에서는 WinMain 함수와 윈도우 프로시저 함수로 구성되어 있다.
이것을 Init Application(HINSTANCE hinstance), InitInstance(HINSTANCE hinstance, int nCmdShow) 함수를 추가하여 프로그램 소스를 분리해보시오.
이건데 첫줄은 이해가는데 두번째줄에 뭔소린지 하나도 모르겠음;;

이해 안가는 이유라면 예를들어 winmain함수 설명 때 (HINSTANCE hInstance, .... , .... , ...)
요렇게 써놓고
-hInstance : 프로그램의 인스턴스 핸들
요 설명 하나 써놨는데 프로그램의 인스턴스 핸들이 뭔뎈ㅋㅋㅋ 왜 첫 장부터 c++에 대한 기반지식을 풍부하게 잡고 설명하는건지;
이전에 배운 교과목이래봐야 C프로그래밍, 프로그램설계 입문, 공학설계 입문 요런거 뿐이였는데
그다음줄은 -hPrevInstance : Win32에서는 항상 NULL

너무 막장같은 설명으로 느끼는건 나뿐인가?
앞에 C++에서 핸들이란 단어에 대한 설명같은것도 있긴 한데 앞장부터 차근차근 정독해서 다 보고 하는거야
원래 지금 4장 볼 차례인데 강의만 보다가 하도 답이 안나와서 차근차근 코딩 다 짜보고 하면서 정독하는데
이거 너무 이상해;; 어떻게 배우라는건지 모르겠어
차라리 빨리 다른 책을 구해볼까;; 전공과목은 다 쉽게 느껴졌는데 편입학후 이건 진짜 아니다 싶은데
심지어 어이없는건 방통대 인강에서 "코드를 직접 짜시면 오류가 많이 발생하니깐 제가 만들어놓은 소스를 다운해서 열어서 강의를 들으세요"
이거야 강의 듣고있는데 그냥 교과서 읽어주는수준이고 뭔소린지 몰겐다

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
349471 1번 타자 c. 니가 자랑하는 최신 기술이 뭐냐? [4] ㅇㅇ(119.203) 13.03.15 125 0
349470 ㅇㅇ 저새낀 인증은 하고 나불거리는거냐 [1] 124(211.189) 13.03.15 78 0
349469 NHN next 준비하는 중인데 [2] 조꼬딩(211.189) 13.03.15 137 0
349468 고정닉만들기 존나무섭 ㅠㅠ 1ㄷㅈ(175.215) 13.03.15 54 0
349467 나도 고정닉 만드러볼까여 1ㄷㅈ(175.215) 13.03.15 35 0
349466 열혈강의 mfc 최호성 이분도 악평많던데 게이피유갤로그로 이동합니다. 13.03.15 117 0
349464 싱글게임의 제한 깨뜨려 주실 분 구합니다. 징기스칸4갤로그로 이동합니다. 13.03.15 29 0
349462 싱겁게 깝치기는.. 20분 내에 집에 도착함 ㅇㅇ(110.70) 13.03.15 68 0
349461 영어 존나게 파노으면 도움많이됨? [3] ㄷㅈㅈ(175.215) 13.03.15 72 0
349460 프갤은 연봉 6천이상 받는분 없죠? [2] ㅇㅇ(115.41) 13.03.15 183 0
349458 웹은솔직히 좆밥아니냐 [2] ㄷㅈㅈ(175.215) 13.03.15 149 0
349457 좆 내가 좆 초딩시절 게임할때 [1] 백이(182.214) 13.03.15 68 0
349454 싱글게임의 제한을 깨주실 분 구합니다. [3] 징기스칸4갤로그로 이동합니다. 13.03.15 83 0
349452 자바카드 [1] (1.224) 13.03.15 56 0
349451 근데 js하면 php를 해야함? [4] 퓨퓨(121.186) 13.03.15 102 0
349450 프갤은 컨셉질을 해야 살아남는다. [9] (1.214) 13.03.15 179 0
349449 싱글 게임의 제한을 깨주실 분 구합니다 징기스칸4(125.182) 13.03.15 31 0
349448 인트러덕션 투 알고리즘 이책 난이도 어떰? 듀스(124.153) 13.03.15 110 0
349447 병쉰 덴시티 존나 올라가네 dot(113.30) 13.03.15 40 0
349446 SE와 PL을 정의해줄 사람 지금 시간에 있나? 궁그미(211.179) 13.03.15 42 0
349445 최신기술 모르는 꼰대 [3] c(175.208) 13.03.15 109 0
349444 집에 쌀이 없다 [7] 백이(182.214) 13.03.15 69 0
349442 게임만들고 싶으면 유니티와 스크립트언어는 c#를 해라 [2] 티모티모(211.112) 13.03.15 154 0
349441 아;;배열 저장하는거 말야 형들. 진짜 기본적인건데 [3] ㅇㅇ(1.216) 13.03.15 78 0
349440 진짜 고수는 뭔지아냐? 직관적인 새기들 있지 [1] 티모티모(211.112) 13.03.15 110 0
349439 ㅋ 어휴 프갤수준 저런 조잡한놈보다 니 손가락이 더 우월하다 [2] 티모티모(211.112) 13.03.15 83 0
349436 웹플밍할려면 어떤 테크트리 타야하나요? [3] 듀스(124.153) 13.03.15 102 0
349435 대학교 3학년 조언좀 해주십쇼.. [6] .(114.71) 13.03.15 217 0
349434 싱글 게임의 제한 깨주실분 구합니다 ㅠㅠ [5] 징기스칸4(125.182) 13.03.15 80 0
349433 형들 c언어문법 질문있습니다. [7] 맴맴(112.171) 13.03.15 86 0
349432 언어 책보고공부할때 어케들 공부함? [3] vvv(121.186) 13.03.15 70 0
349431 형들 도형출력할때 질문!! 맴맴(112.171) 13.03.15 39 0
349430 뇌를자극하는 jsp 봤는데 ㅈㄷㄱㅂ(121.186) 13.03.15 55 0
349429 C언어 연산쓸때 [3] ㅇㅇ(125.176) 13.03.15 53 0
349428 우리나라에 제대로던 mfc책없지? [4] 게이피유갤로그로 이동합니다. 13.03.15 113 0
349427 횽들 스트레스받음.. ㅠㅠ [4] 인간(110.35) 13.03.15 73 0
349426 낚시고수들 보소 [1] 씹죶(211.36) 13.03.15 83 0
349425 이거 시작을 어케해야될지 몰겠는데 좀 알려주셈요ㅜㅜ [6] 우동(125.176) 13.03.15 91 0
349424 내생각인데... [3] LastCorona갤로그로 이동합니다. 13.03.15 84 0
349423 이거 테스트좀 해줘요. [3] 크덕(118.131) 13.03.15 77 0
349422 이건 또 뭔 떡밥이여 ㅋㅋ ㅁㄴㄻㄹ갤로그로 이동합니다. 13.03.15 74 0
349420 책있는데 30%가격에 모십니다. [1] 책팔이(218.235) 13.03.15 103 0
349417 ㅇㅇ형 정말 부탁드립니다. [3] 1(1.245) 13.03.15 102 0
349414 ㅇㅇ님 대전사는대 아침저녁 출퇴근형식으로 공부하면안되는것입니까? 꼭숙식? [5] 근성가이(211.237) 13.03.15 148 0
349412 저 ㅇㅇ님? 우연찮게 프갤에 들어왔다가 님글을 봤는데 [4] ㅇㅇ(118.221) 13.03.15 184 0
349411 여자의 적은 누구? [3] 멍청닭(182.211) 13.03.15 97 0
349410 ㅇㅇ 게임프로그램을 초등학교때부터? 짱이다.. [1] (205.164) 13.03.15 88 0
349409 ㅇㅇ형 마감된건가요..? 답글이 없으시네 ㅜ.. [1] 1(1.245) 13.03.15 58 0
349407 ㅇㅇ형 연락처좀 부탁드려욤... 1(1.245) 13.03.15 45 0
349406 ㅇㅇ형은 좋겠다 ㅁㄴㅇ(1.245) 13.03.15 64 0
뉴스 "재벌도 요거트 뚜껑 핥아먹어요?"…'신세계 3세' 애니 답변은? 디시트렌드 07.10
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2