목차
1. 문제서술
2. 소스분석
가. 메인윈도우(CMainWindow.cpp) 분석
나. 차일드윈도우(CChildWindow.cpp) 분석
다. 차일드윈도우 헤더 (CChildWindow.h) 분석
2. 소스분석
가. 메인윈도우(CMainWindow.cpp) 분석
나. 차일드윈도우(CChildWindow.cpp) 분석
다. 차일드윈도우 헤더 (CChildWindow.h) 분석
본문내용
E | WS_TABSTOP, 204, 300, 100, 30, hWnd, (HMENU) BUTTON2, g_hInst, NULL);
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
int wmId, wmEvent;
switch(iMessage)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch( wmId )
{
case BUTTON1 : // 학번 뿌려주기..
SendMessage(ChildWindow.hWnd ,iMessage,1,(LPARAM)NULL);
break;
case BUTTON2 : // 이름 뿌려주기..
SendMessage(ChildWindow.hWnd ,iMessage,2,(LPARAM)NULL);
break;
}
break;
case WM_PAINT:
HDC hdc;
hdc=GetDC(hWnd);
TextOut(hdc,100,30,"서울 제 1 지역대학 ",20);
ReleaseDC(hWnd, hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
나. CChildWindow.cpp
#include "CChildWindow.h"
static LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int CChildWindow::Create(HINSTANCE hInstance, HWND hParentWnd)
{
char *ClassName = "ChildWindow";
WNDCLASS WndClass;
WndClass.cbClsExtra = WndClass.cbWndExtra = 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;
WndClass.lpszClassName = ClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, ClassName,ClassName,WS_OVERLAPPEDWINDOW, 100, 100, 400, 100,
hParentWnd,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
int wmId, wmEvent;
char szHello[64] = "서울 제 1 지역대학";
char *check;
switch(iMessage)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch(wmId)
{
case 1 :
check = "1001";
break;
case 2 :
check = "1002";
break;
}
case WM_PAINT:
if( check == "1001" )
{
HDC hdc;
hdc=GetDC(hWnd);
TextOut(hdc,10, 25, " 학 번 : *****-****** ", 23);
ReleaseDC(hWnd, hdc);
return 0;
}
if( check == "1002" )
{
HDC hdc;
hdc=GetDC(hWnd);
TextOut(hdc, 180, 25, " 이 름 : XXXXXXXXX ", 20);
ReleaseDC(hWnd, hdc);
return 0;
}
break;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
다. CChildWindow.h
#include
#include
#define BUTTON1 1001
#define BUTTON2 1002
class CChildWindow
{
protected:
// 생성된 윈도우 핸들.
public:
int Create(HINSTANCE hInstance, HWND hParentWnd);
LRESULT WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
HWND hWnd;
};
위의 소스를 개인의 개성을 듬북담아... 또 다른 변형을 이룩하시기 바랍니다.
4. 출력 결과 (이미지)
가. 실행1 (처음 실행 시 화면)
나. 실행2 (학번 버튼 클릭 시 화면)
다. 실행3 (이름 버튼 클릭 시 화면)
개발
메인 윈도우를 생성 (기본 API 모듈 사용) 하고 차일드 윈도우를 생성 (클래스로 멤버를 따로 구성하였습니다.)
메인 윈도우가 생성하고 메시지 루프가 돌기전에 차일드 윈도우를 생성하고 차일드 윈도우의 헨들을 가지고 있는다.
버튼이 눌려지는 시점에서 차일드 윈도우의 헨들과 어떤 버튼이 클릭되었는지의 메시지를 차일드 윈도우의 메시지
루프에 던져 해당되는 이벤트를 발생시킨다.
하나의 .CPP 파일에 하나의 클래스를 만들고 위의 소스를 하나로 통합하여 만들 수 있습니다. 참고하시고
좋은 결과 얻기를 진심으로 바라겠습니다.
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
int wmId, wmEvent;
switch(iMessage)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch( wmId )
{
case BUTTON1 : // 학번 뿌려주기..
SendMessage(ChildWindow.hWnd ,iMessage,1,(LPARAM)NULL);
break;
case BUTTON2 : // 이름 뿌려주기..
SendMessage(ChildWindow.hWnd ,iMessage,2,(LPARAM)NULL);
break;
}
break;
case WM_PAINT:
HDC hdc;
hdc=GetDC(hWnd);
TextOut(hdc,100,30,"서울 제 1 지역대학 ",20);
ReleaseDC(hWnd, hdc);
break;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
나. CChildWindow.cpp
#include "CChildWindow.h"
static LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int CChildWindow::Create(HINSTANCE hInstance, HWND hParentWnd)
{
char *ClassName = "ChildWindow";
WNDCLASS WndClass;
WndClass.cbClsExtra = WndClass.cbWndExtra = 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;
WndClass.lpszClassName = ClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, ClassName,ClassName,WS_OVERLAPPEDWINDOW, 100, 100, 400, 100,
hParentWnd,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,SW_SHOW);
return true;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
int wmId, wmEvent;
char szHello[64] = "서울 제 1 지역대학";
char *check;
switch(iMessage)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch(wmId)
{
case 1 :
check = "1001";
break;
case 2 :
check = "1002";
break;
}
case WM_PAINT:
if( check == "1001" )
{
HDC hdc;
hdc=GetDC(hWnd);
TextOut(hdc,10, 25, " 학 번 : *****-****** ", 23);
ReleaseDC(hWnd, hdc);
return 0;
}
if( check == "1002" )
{
HDC hdc;
hdc=GetDC(hWnd);
TextOut(hdc, 180, 25, " 이 름 : XXXXXXXXX ", 20);
ReleaseDC(hWnd, hdc);
return 0;
}
break;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
다. CChildWindow.h
#include
#include
#define BUTTON1 1001
#define BUTTON2 1002
class CChildWindow
{
protected:
// 생성된 윈도우 핸들.
public:
int Create(HINSTANCE hInstance, HWND hParentWnd);
LRESULT WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
HWND hWnd;
};
위의 소스를 개인의 개성을 듬북담아... 또 다른 변형을 이룩하시기 바랍니다.
4. 출력 결과 (이미지)
가. 실행1 (처음 실행 시 화면)
나. 실행2 (학번 버튼 클릭 시 화면)
다. 실행3 (이름 버튼 클릭 시 화면)
개발
메인 윈도우를 생성 (기본 API 모듈 사용) 하고 차일드 윈도우를 생성 (클래스로 멤버를 따로 구성하였습니다.)
메인 윈도우가 생성하고 메시지 루프가 돌기전에 차일드 윈도우를 생성하고 차일드 윈도우의 헨들을 가지고 있는다.
버튼이 눌려지는 시점에서 차일드 윈도우의 헨들과 어떤 버튼이 클릭되었는지의 메시지를 차일드 윈도우의 메시지
루프에 던져 해당되는 이벤트를 발생시킨다.
하나의 .CPP 파일에 하나의 클래스를 만들고 위의 소스를 하나로 통합하여 만들 수 있습니다. 참고하시고
좋은 결과 얻기를 진심으로 바라겠습니다.
소개글