디시인사이드 갤러리

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

갤러리 본문 영역

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

야간편돌이(175.196) 2013.03.13 06:28:17
조회 115 추천 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 - -
공지 프로그래밍 갤러리 이용 안내 [88] 운영자 20.09.28 45285 65
2870622 17일 도쿄 여행인데 아스카영원히사랑해갤로그로 이동합니다. 21:30 12 0
2870620 PC-6001 페이지용 Contiki 발명도둑잡기(118.216) 21:19 6 0
2870618 국비들으면 쉽게 취업하는시대일때 국비 짤린거면 얼마나 병신새끼인거임?? 뒷.통수한방(1.213) 21:10 17 0
2870617 좆같은 기술스택을 쓰고있다 <- 탈출해야함 프갤러(59.14) 20:59 21 0
2870615 어우 일나가기 실타..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 20:36 7 0
2870613 러스트 비판서 거의 다 썼다. 루비갤로그로 이동합니다. 20:33 16 0
2870610 냥덩이는 그냥 귀척하는 윤서인이라봐야 [1] 류류(115.136) 20:00 16 0
2870609 윤석열 무능한건 맞지않나 ㅇㅅㅇ 류류(115.136) 19:58 10 0
2870607 멍퀴님 제발 부탁드립니다 그만해주세요 [1] ♥냥덩이♥갤로그로 이동합니다. 19:54 23 0
2870605 실력상승은 인정에서 나온당⭐+ By 나님 [1] ♥냥덩이♥갤로그로 이동합니다. 19:34 20 0
2870603 별찍기를 무시하지마라 [1] 배구공(119.202) 19:16 18 0
2870602 이 사람이 대다나당⭐ [1] ♥냥덩이♥갤로그로 이동합니다. 19:02 30 0
2870600 ❤✨☀⭐나님 시작합니당⭐☀✨❤ [1] ♥냥덩이♥갤로그로 이동합니다. 18:33 27 0
2870599 요즘 날이더워 그런강 피곤해서 일찍 자게됨 [5] ♥냥덩이♥갤로그로 이동합니다. 18:31 33 0
2870597 방화벽 지금 2주째 안 뚫어주는데 [12] 아스카영원히사랑해갤로그로 이동합니다. 18:17 85 0
2870595 퇴근하자 [8] 개멍청한유라갤로그로 이동합니다. 18:08 36 0
2870594 나는조현병이야 나는내향적이야 [5] 손발이시립디다갤로그로 이동합니다. 18:05 33 0
2870592 나이처먹고 피지컬은 떨어지는데 경험만 쌓여서 이거 저거 한번에 생각 [2] 프갤러(218.154) 17:36 48 0
2870590 프로펙트인가 지원해본 사람 있음? [1] ㅇㅇ(118.36) 17:16 25 0
2870589 정좌불능증 재현갤로그로 이동합니다. 17:10 19 0
2870587 그냥 나가긴 싫고 실업급여라도.. [5] ㅇㅇ(211.235) 17:07 27 0
2870585 와 근데 config 설정이 80여개 넘어가니까 수정하다 지치네 [4] ㅆㅇㅆ(124.216) 16:39 47 0
2870584 deepseek 정말 못쓰겠다 쓰고싶어도 뒷통수한방(1.213) 16:28 33 0
2870583 와 근데 거북목 존나 많구나 [2] 루도그담당(211.184) 16:27 49 0
2870582 파이썬 똥쓰레기네 ㅇㅇ(106.101) 16:21 51 0
2870581 이준떡하고 시진핑 딸하고 대학동문이누?? 뒷통수한방(1.213) 16:15 17 0
2870579 그럼 ai 기술이 발전할수록 ai는 말바꾸는게 일상 되니깐 유용할듯 ㅇㅂ [1] 뒷통수한방(1.213) 16:08 30 0
2870578 ai는 말바꾸면 안되는거아님??? [1] 뒷통수한방(1.213) 16:07 23 0
2870576 귀염은 타고나는것⭐+ [3] ♥냥덩이♥갤로그로 이동합니다. 15:02 57 0
2870575 css 프레임워크 배워서 써먹는데 오래걸릴까요 [3] 프갤러(211.245) 15:00 55 0
2870574 하이부와 프로미스 [1] ㅇㅇ(39.7) 14:48 43 0
2870573 짱깨폭염 ㅅㅂ [2] 뒷통수한방(1.213) 14:47 32 0
2870571 우리 행복하자 [8] 개멍청한유라갤로그로 이동합니다. 14:33 57 0
2870570 재밌는거 개발할거없냐 [2] 밀우갤로그로 이동합니다. 14:10 59 0
2870569 3년차 프리로 sm 400받는데 걍 ㅍㅌㅊ지? [7] ㅇㅇ갤로그로 이동합니다. 13:32 75 0
2870568 날씨 리재명 같네 나라가 망한다 망해;; [4] ♥냥덩이♥갤로그로 이동합니다. 13:32 47 0
2870567 위시캣같은데서 외주 받으려면 [3] 프갤러(124.54) 13:08 36 0
2870566 ❤✨☀⭐나님 시작합니당⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 13:04 17 0
2870563 도메인 하나팠는데 http는 접속되고 https는 접속안되는 이유머냐 [2] 노갤러(106.102) 12:29 42 0
2870561 님들 AI 뭐 씀 [4] ㅇㅇ갤로그로 이동합니다. 12:11 86 0
2870560 50세 이상한남은 주1회 [6] 개멍청한유라갤로그로 이동합니다. 12:11 64 0
2870559 한남은 [7] 개멍청한유라갤로그로 이동합니다. 12:09 78 1
2870557 거북목 올려하나 어깨가 뻐근하네 [1] 루도그담당(211.184) 11:44 23 0
2870556 요새 주식 핫하다고 해서 오랜만에 계좌 다시 열어봤는데 [2] 프갤러(118.235) 11:37 55 1
2870554 ai는 기술이 발전하는거임?? [6] 뒷통수한방(1.213) 11:29 41 0
2870552 무능 재앙 리죄명 [1] ♥냥덩이♥갤로그로 이동합니다. 11:19 26 1
2870551 저번에 납품한거 품질 괜찮아서 딴 사람한테 납품했었는데 [3] ㅆㅇㅆ(124.216) 11:05 46 0
2870550 Ai 코드몽키 거르는법 [3] ♥냥덩이♥갤로그로 이동합니다. 11:04 92 0
2870549 드디어 1차 납품 끝났다 [1] ㅆㅇㅆ(124.216) 11:00 36 0
뉴스 조째즈, 감동의 프러포즈 이벤트로 신곡 ‘사랑’ 화제성 ing…차세대 프러포즈송 등극 디시트렌드 14:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2