디시인사이드 갤러리

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

갤러리 본문 영역

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

야간편돌이(175.196) 2013.03.13 06:28:17
조회 113 추천 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 - -
349163 파이썬 쓰는 사람이 김치국엔 별로 없는거? [18] DART(116.41) 13.03.14 374 0
349161 c# 파일 동기화 문제.. - 뮤텍스로 해결 봄 [3] 힝아(115.161) 13.03.14 100 0
349160 기계공학과는 컴본갤 가서 물어보면 되나요 [4] ㄹㅇㄴㅁ(49.143) 13.03.14 85 0
349159 조금 중2병 돋는 이야기. [11] LastCorona갤로그로 이동합니다. 13.03.14 177 0
349157 정보처리 보니까 선행되야할 지식이 종범이다. [1] dot(113.30) 13.03.13 100 0
349156 다크서클 내려온다 [1] 루비•‿•갤로그로 이동합니다. 13.03.13 52 0
349155 학원 갈려는새끼들 쳐봐라 [10] ㅁㄴㅇ(59.11) 13.03.13 563 0
349154 내일은 ca정하는 날인데 백이(182.214) 13.03.13 45 0
349153 오늘 파일처리로 내상을 입었으니 탕수육을 먹어야겠습니다. ㅎㅋㅋㅋ(59.152) 13.03.13 61 0
349151 집구할떄 가장 중요한건 백이(182.214) 13.03.13 66 0
349149 숫자로써 정렬된 다운로드용 url 파일이름 보는 프로그램없나요? [2] dd(211.208) 13.03.13 66 0
349148 비주얼 스튜디오에 백슬래시 입력할때 [2] Savior(182.210) 13.03.13 120 0
349147 c# 파일 동기화 관련 헉헉헉헉! [6] 힝아(115.161) 13.03.13 104 0
349145 형들 궁금한게 있는데요 비주얼 스튜디오에선 제가 만든게 실행되는데 [6] Savior(182.210) 13.03.13 114 0
349143 형님들 json초보 살려주십시요 [1] ajax(182.219) 13.03.13 80 0
349142 c# 하는 형들 동기화 질문임. 흐엉흐엉 [5] 힝아(115.161) 13.03.13 91 0
349141 형들 나 자바 배울려고 종로IT뱅크 전화 조졌는데 40만이라는데 [3] ㅅㄹㄷ(61.37) 13.03.13 203 0
349139 아 ㅆ 벌 유저 불량이었네 ㅋㅋㅋ 분당살람갤로그로 이동합니다. 13.03.13 59 0
349138 에디트플러스 30일 지나면어떡함 [6] wer2r(175.215) 13.03.13 121 0
349136 안드로이드 어플 19세게임들 어디까지허용가능함? (211.237) 13.03.13 117 0
349134 이번엔 윈도우8을 리뷰해 보려고 해... [6] 분당살람갤로그로 이동합니다. 13.03.13 118 0
349131 프갤형들 죄송하지만 질문이 있어요 ㅠㅠ 메모장 관련 [6] yyyyxxzz(220.89) 13.03.13 106 0
349130 대학교에서 프로그램을 하나 만들어야되는데요. [5] Benny Benassi갤로그로 이동합니다. 13.03.13 145 0
349129 c할때마다 느끼는건대 [3] 백이(182.214) 13.03.13 127 0
349128 악 자바스크립트 textarea에서 커서위치까지 length구하는게... [1] 궁굼궁굼(211.55) 13.03.13 96 0
349127 it뱅크 다니는데 거의마스터되감ㅎㅎ [2] 호갱사마(203.236) 13.03.13 224 0
349126 c언어에 무지한 중생을구해주십쇼 [3] 중생(110.47) 13.03.13 111 0
349125 ㅋㅋㅋㅋ 시각디자인 vs 프로그래밍 고민하다가 프로그래밍으로 바꿧는데ㅋ [5] 형들(182.218) 13.03.13 159 0
349124 자바 너무 어렵네요 [4] 징징이(222.116) 13.03.13 155 0
349122 형들 오늘 대학에서 C++ 했는데 시발 이거 너무어려움.. 도와줘요.. [2] 형들(182.218) 13.03.13 132 0
349121 API에서 팩토리 메소드가 뭔가요? [3] 에어로홍갤로그로 이동합니다. 13.03.13 101 0
349119 _strdup이 제대로 메모리 반환을 안 하는 거 같다 [1] ㅁㄴㄻㄹ갤로그로 이동합니다. 13.03.13 77 0
349118 도움좀 주세용 ㅎ [3] 미샤(211.104) 13.03.13 69 0
349117 API에서 impl이란 거 들어간거 뭔가요? [2] 에어로홍갤로그로 이동합니다. 13.03.13 199 0
349116 어느 언어든 3~5년 경력차면.. [1] ㅇㅇ(58.150) 13.03.13 176 0
349115 Android SDK Manager 질문... adt(1.251) 13.03.13 1690 0
349114 고졸 비전공자인데 진로문제.. ㅇᆞ(223.33) 13.03.13 51 0
349113 크롬 실행 옵션 질문 좀 [2] ㅁㄴㄻㄹ갤로그로 이동합니다. 13.03.13 126 0
349112 니들 이런 경험 없냐? ㅁㄴㄻㄹ갤로그로 이동합니다. 13.03.13 74 0
349111 궁금궁금궁금궁금궁금궁금궁금궁금움그묵믁묵음굼금ㅇ굼ㄱ음ㅇ굼ㅇ그므 [3] 궁금궁금(211.189) 13.03.13 64 0
349110 오늘 학교에서 실습하고 떡발리고 왔습니다. [3] ㅎㅋㅋㅋ(59.152) 13.03.13 133 0
349109 전기전자공학도학생입니다 [3] (121.155) 13.03.13 119 0
349108 고졸비전공자인데 부산에 학원아는사람있어? [3] 오리온(223.33) 13.03.13 97 0
349107 ㅇㅇ 니네 이럴때 있지 않냐? [1] GGDY(121.134) 13.03.13 70 0
349106 학원다닌다는 놈들 [1] LastCorona갤로그로 이동합니다. 13.03.13 107 0
349105 스잡 따라하는 삼성의 위엄 [3] ㅇㄴㅁㅇㄴㅁ(59.11) 13.03.13 224 0
349104 오빠 제 자취방 컴퓨터가 고장났는데요... [4] 에어로홍갤로그로 이동합니다. 13.03.13 139 0
349103 니들 소닉붐 이라고 알지? [2] iljeomobolt갤로그로 이동합니다. 13.03.13 105 0
349101 프로그래밍학원에서 배우는거 뭐가 가장적당함 [2] ㅇㅇ(220.78) 13.03.13 117 0
349100 이거 좀 봐줘봐 악마의 프로그램!!!!ㅅㅂ [3] 학생증(61.33) 13.03.13 193 0
뉴스 황민우, 음방+챌린지+예능 종횡무진…2년 만의 컴백에 음악적 성장 증명 디시트렌드 07.07
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2