디시인사이드 갤러리

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

갤러리 본문 영역

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

야간편돌이(175.196) 2013.03.13 06:28:17
조회 121 추천 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/14 - -
AD 휴대폰 액세서리 SALE 운영자 25/07/15 - -
347147 성공적인 웹 프로그래밍(PHP와 MYSQL) 이책 연습문제잇삼? [9] ㅇㅈ1ㅇ1(175.215) 13.02.25 116 0
347146 sublime text로 ssh 되나 ? [2] 규식이(218.153) 13.02.25 68 0
347145 샘성이 바다 os 포기했덴다. 타이젠과 통합한데. [3] 멍청닭(182.211) 13.02.25 145 1
347143 게임 프로그래머는 어디 고등학교 가야카나.. [18] WeKia(121.164) 13.02.25 240 0
347142 c언어에서 포인터의 존재는 그냥 작업상 편하게할려는건가요? [8] ㅁㄴㅇㄹ(76.94) 13.02.25 134 0
347141 디시는왜 html소스를 본문에 쓰는게 안되는거냐 [2] 엽산.갤로그로 이동합니다. 13.02.25 72 0
347140 왜 정치인은 IT 분야에서 일자리 창출을 하려고 하는가?? [2] 멍청닭(182.211) 13.02.25 129 0
347139 대통령에 대해서 [2] 박근혜사랑(210.221) 13.02.25 59 1
347138 형들 컴공+무역 어케생각해 [8] (39.7) 13.02.25 181 0
347136 (뒤 주의)하..... 개발자들 불쌍하다 멍청닭(182.211) 13.02.25 170 0
347135 26고졸, 3월부터 학원다니고 내년에 방통대 간다 ㅜㅜ [4] 자살직전(117.111) 13.02.25 322 1
347133 면허증나왔당 [3] 黑猫갤로그로 이동합니다. 13.02.25 78 0
347132 이거 해결좀 부탁드립니다 프로그램전문가형님들 ㅠㅠ dd(119.206) 13.02.25 50 0
347131 memset 함수도 알아봤는데 [3] dd(124.197) 13.02.25 85 0
347130 asp, jsp, php 누가 젤 죠음? [4] 오오(175.197) 13.02.25 129 0
347128 IT특기병/전공대비/C언어,고졸,휴학생,미취업자중소기업친화국비지원전액지원 김민섭팀장(211.48) 13.02.25 41 0
347126 리눅스에서 php mysql apache 설치하는법좀갈쳐주라ㅠ [11] 엽산.갤로그로 이동합니다. 13.02.25 86 0
347125 내 아는놈중에 미스테리한놈 [4] 黑猫갤로그로 이동합니다. 13.02.25 140 0
347124 JAVA랑 C중 조금이나마 전망을 비교해보자면.... [7] JJ(58.151) 13.02.25 270 0
347120 님들 참고 도서 하나 추천부탁드립니다. [4] 빌어먹을야옹갤로그로 이동합니다. 13.02.25 125 0
347119 JAVA랑 C중에 전망조금더 나은건 어느쪽인가요? [3] JJ(58.151) 13.02.25 137 0
347118 여친이 나보고 키스못한다고 뭐라하는데 어떡함 [2] ㄷㄱ(211.208) 13.02.25 107 0
347117 죄송한데 다시질문드릴게요 정보처리기능사.실기 (병특관련) [5] kkkk(112.161) 13.02.25 115 0
347115 c++의 shared_ptr은 obj-c 의 reference count [2] asd(110.15) 13.02.25 53 0
347114 컴공과 경영. 고민입니다..... [16] LML(125.135) 13.02.25 358 0
347113 공대학생분들IT특기병준비방법궁금하신점 무료로상담해드립니다. 실시간 상 [1] 김민섭팀장(211.48) 13.02.25 79 0
347111 파이썬 잘하는 형 계심..........? [5] 1(1.245) 13.02.25 174 0
347110 컴공과 2학년 복학게이인데, 조언 투척점요 [2] 김딸똘갤로그로 이동합니다. 13.02.25 113 0
347107 Python 소켓 프로그래밍.... 살려줘 형들 ㅠㅠㅠㅠㅠ 고기맨(183.100) 13.02.25 284 0
347105 [C] 메모리 에서 해당 부분만 지우고싶은데 안되 -_-.. [1] dd(124.197) 13.02.25 98 0
347104 c 전처리기에 newline 넣을수없어? [2] ㅇㅇ(122.128) 13.02.25 74 0
347103 1억번 연산 해봣는디 fgfgf(61.37) 13.02.25 69 0
347101 회사에서 이력서내고 기술과제 몇일까지소스제작해서내라고했을때 [1] 노알라(211.237) 13.02.25 94 0
347100 아~ 졸 짜증~ [3] ☎2.52™갤로그로 이동합니다. 13.02.25 63 0
347099 자바 어느정도 배우면 뭐 배워야 되요 중밍중밍아웃(180.68) 13.02.25 38 0
347098 자바 GUI로 기본 윈도우창 변경 가능해요? [1] 구이(222.116) 13.02.25 95 0
347097 컴공과 재학중이다 다 집어치우고 1년동안 자바스크립트만 팔려고 한다 [5] 잰카(119.70) 13.02.25 220 0
347095 우리나라는 망조가 들었다. [2] ㅁㅁㅁ(175.117) 13.02.25 124 0
347093 정보처리기능사실기시험에대해서 질문좀드립니다(병특도포함) [4] kkkk(112.161) 13.02.25 259 0
347092 XML 이거 왜이러나요? 형님덜(211.202) 13.02.25 50 0
347091 요즘은 닥치고 C++이나 하라면 욕먹냐? [1] ㅇㅇ(180.231) 13.02.25 220 0
347090 자바 배우면 어디로 취업함? ㅇㅇ(121.164) 13.02.25 102 0
347089 기계쪽 프로그래밍은 어떤걸로 하는건가요? [5] d(222.237) 13.02.25 118 0
347088 윈드러너 같은건 몰로 만드는거죠? [1] ggg(1.231) 13.02.25 132 0
347087 요즘 왜 자바만 배우는거에요 ?? [3] 자바(121.164) 13.02.25 190 0
347086 유니티로 만들다가 나중에 UDK로 갈아엎기 쉬울까? [1] ㅇㅇ(180.231) 13.02.25 71 0
347085 프갤에 이 에러를 아시는 분이 계실까.. [4] ggg(1.231) 13.02.25 151 0
347084 요즘은 자소서 쓰기가 너무 빡세다 [3] dot(113.30) 13.02.25 130 0
347083 빨랑좀 도와주삼 이거 2시간내로 못하면 나처맞아죽음 [8] ㄴㅇ2(175.215) 13.02.25 168 0
347081 && 연산자 있자나 [6] dd(124.197) 13.02.24 97 0
뉴스 김준호♥김지민, 한강뷰 용산 신혼집 최초 공개...“9살 많은 이혼남이 혼수도 안 챙겨왔다” 디시트렌드 07.17
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2