디시인사이드 갤러리

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

갤러리 본문 영역

매일매일 WIN32API 자식윈도우메시지처리 질문하기

이힝(175.215) 2013.02.02 10:52:14
조회 149 추천 0 댓글 4




#include <windows.h>
#include "..resource.h"
LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK ChildWndProc(HWND hDlg, UINT iMsg,
WPARAM wParam, LPARAM lParam);
HINSTANCE hInst;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS WndClass;
hInst = hInstance;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = FrameWndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = MAKEINTRESOURCE(IDR_MENU7_6);
WndClass.lpszClassName = "Window Class Name";
RegisterClass(&WndClass);
WndClass.lpfnWndProc = ChildWndProc;
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = "Child Window Class Name";
RegisterClass(&WndClass) ;
hwnd = CreateWindow("Window Class Name",
"Main Window Title",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}

HWND ChildHwnd[2];
LRESULT CALLBACK FrameWndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{
static BOOL split;
static HCURSOR hCursor;
static int boundary = -1;
RECT rectView;

switch (iMsg)
{
case WM_CREATE:
split = FALSE;
return 0;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case ID_SPLIT_2_1:
if (split == TRUE) break;
split = TRUE;
GetClientRect(hwnd, &rectView);
ChildHwnd[0] = CreateWindowEx(
WS_EX_CLIENTEDGE,
"Child Window Class Name",
NULL,
WS_CHILD | WS_VISIBLE,
0,
0,
rectView.right,
rectView.bottom/2-1,
hwnd,
NULL,
hInst,
NULL
);
ChildHwnd[1] = CreateWindowEx(
WS_EX_CLIENTEDGE,
"Child Window Class Name",
NULL,
WS_CHILD | WS_VISIBLE,
0,
rectView.bottom/2+1,
rectView.right,
rectView.bottom/2-1,
hwnd,
NULL,
hInst,
NULL
);
boundary = rectView.bottom/2;
hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_SIZENS));
return 0;
case ID_EXIT :
PostQuitMessage(0);
return 0 ;
}
return 0;
case WM_MOUSEMOVE:
if (HIWORD(lParam)>=boundary-2 && HIWORD(lParam)<=boundary+2) SetCursor(hCursor);
if (wParam == MK_LBUTTON && split == TRUE)
{
GetClientRect(hwnd, &rectView);
if (rectView.top+5 < HIWORD(lParam) && HIWORD(lParam) < rectView.bottom-5)
boundary = HIWORD(lParam);
MoveWindow(ChildHwnd[0], 0, 0, rectView.right, boundary - 1, TRUE);
MoveWindow(ChildHwnd[1], 0, boundary+1, rectView.right, rectView.bottom - boundary + 1, TRUE);
}
return 0;
case WM_LBUTTONDOWN:
if (split == TRUE)
{
SetCursor(hCursor);
SetCapture(hwnd);
}
return 0;
case WM_LBUTTONUP:
if (split == TRUE) ReleaseCapture();
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, iMsg, wParam, lParam);
}



LRESULT CALLBACK ChildWndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
static int x[2] = {20, 20}, y[2]={20, 20}, flag[2];
int select;

switch (iMsg)
{
case WM_CREATE:
break;
case WM_TIMER:
x[wParam] = x[wParam] + 20;
hdc = GetDC(hwnd);
Ellipse(hdc, x[wParam] - 20, y[wParam] - 20,
x[wParam] + 20, y[wParam] + 20);
ReleaseDC(hwnd, hdc);
break;
case WM_LBUTTONDOWN:
if (hwnd == ChildHwnd[0])
select = 0;
else
select = 1;
flag[select] = 1 - flag[select];
if (flag[select])
SetTimer(hwnd, select, 100, NULL);
else
KillTimer(hwnd, select);
break;
case WM_DESTROY:
return 0;
}
return DefMDIChildProc(hwnd, iMsg, wParam, lParam);
}
자식윈도우 2개 중하나를 클릭하면 그 윈도내에서 원이 오른쪽으로 이동하는 예제인데요
WM_LBUTTONDOWN 되면 윈도가 위에것인지 아랫것인지 어케아나요? 이해가 안되네요..

이벤트가 발생하면 ChildWndProc에 hwnd에 자식윈도 핸들값이 전달되어서 메시지가 처리되는거 맞나요?
그럼 이벤트가 어디서 발생한지 어케알어시팔..
또 모든 자식 윈도우는 ChildWndProc에서 처리되나요? ChildWndProc1 ChildWndProc2 이렇게 여러개는 어케함

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 모태 솔로도 구제해 줄 것 같은 연애 고수 스타는? 운영자 25/07/21 - -
345006 백왕 29살 연봉 세전 4천 174에 90키로 모태솔로 [4] ㅇㅇ(175.223) 13.02.05 246 0
345003 이제야 좀 프겔 스럽구나. [3] 물속의다이아갤로그로 이동합니다. 13.02.05 85 0
345002 그만하세요 여긴 프로그래밍갤러리입니다. PO스크롤WER갤로그로 이동합니다. 13.02.05 61 0
345001 디는 다시 다시 봄.니.다. [3] 물속의다이아갤로그로 이동합니다. 13.02.05 80 0
345000 우리도 지금 사람 구하는데... 물속의다이아갤로그로 이동합니다. 13.02.05 64 0
344999 디는 다시 봄.니.다. [4] 물속의다이아갤로그로 이동합니다. 13.02.05 97 0
344998 중딩1 먹이ㄴㄴ 어그로ㄴㄴ [1] c(175.208) 13.02.05 80 0
344996 디는 봄.니.다. [1] 물속의다이아갤로그로 이동합니다. 13.02.05 68 0
344995 난 디가 다시 온 줄 알았는데... 물속의다이아갤로그로 이동합니다. 13.02.05 60 0
344994 프갤 열등감 종자들아 열등감 좀 그만 표출해라 내가 다 얼굴이 화끈거린다 [13] (59.9) 13.02.05 185 0
344993 내 주변에서 사업한다는 종자들한테 가장 많이 듣는 얘기 [2] 물속의다이아갤로그로 이동합니다. 13.02.05 100 0
344992 프갤 가만히 보면 열등감,피해의식 진짜 엄청남.... [3] (59.9) 13.02.05 102 0
344991 내가 아이디어는 개쩌는데.jpg [2] appllee갤로그로 이동합니다. 13.02.05 141 0
344989 사업을 운영하는 사장의 태도 [14] 물속의다이아갤로그로 이동합니다. 13.02.05 193 0
344988 배열함수? 라는것도 있냐 [4] 낄낄(223.32) 13.02.05 76 0
344987 어떤 분야던 만만하게 보지 마라. [18] 물속의다이아갤로그로 이동합니다. 13.02.05 252 0
344986 cpu 점유율 문제... [5] ㅁㄴㅇ(58.229) 13.02.05 78 0
344985 개발자 구하고 싶은데 월급은 얼마나 줘야합니까? [20] (110.70) 13.02.05 341 0
344983 C언어 다음에 뭐배우심?? [1] 형들(121.164) 13.02.05 91 0
344982 별 이상한 곳들 많은듯.. [1] topandbottom갤로그로 이동합니다. 13.02.05 92 0
344981 키보드워리어들은 key 나오는 뮤직비디오를 봅니다 [2] 에어로홍갤로그로 이동합니다. 13.02.05 101 0
344980 국내연예인 게시판에 ,12 쓰면 에러나면서 입력 안된다 [1] 에어로홍갤로그로 이동합니다. 13.02.05 52 0
344978 근데 디씨는 웹개발자 안뽑나 [6] 땡칠도사갤로그로 이동합니다. 13.02.05 199 0
344976 눈부시게 아름답다 에어로홍갤로그로 이동합니다. 13.02.05 69 0
344975 자라 루비•‿•갤로그로 이동합니다. 13.02.05 52 0
344974 s/w개발병 어케가나요?? [6] 아이존갤로그로 이동합니다. 13.02.05 196 0
344973 파이썬 외부 프로그램 실행 ㅠㅠ개초보(183.102) 13.02.05 76 0
344972 인터넷 게시물 스크랩 로봇 만들 때 저장 html, db 어떤 걸로? 에어로홍갤로그로 이동합니다. 13.02.05 61 0
344971 오토핫키쓰는 형들? 털자털기갤로그로 이동합니다. 13.02.05 45 0
344970 뭔일있었나... [3] ㅋㄱ(183.96) 13.02.05 85 0
344969 이번 설 특선 영화입니다 [3] 에어로홍갤로그로 이동합니다. 13.02.05 78 0
344968 c언어 if(a<b<c) 이것좀 알려주세요 [9] ㅇㅇㅇ(211.189) 13.02.05 133 0
344967 air for android 로 앱만드는거 [1] (@´з`@)갤로그로 이동합니다. 13.02.05 69 0
344963 1000만개 배열에서 1만개 배열 제거 [2] ㅠㅠ개초보(183.102) 13.02.05 60 0
344961 맨날 창업떡밥 나올때마다 생각한 스타트업에 대한 단상 [6] de(183.103) 13.02.05 329 1
344960 해커님들은 온라인 게임 하실 때 다른 아이디로 로그인해서 하시나요? [2] 에어로홍갤로그로 이동합니다. 13.02.05 93 0
344959 우리는 온라인 상에서는 누구도 믿으면 안됩니다 [5] 에어로홍갤로그로 이동합니다. 13.02.05 166 0
344958 sqlite에 특문 뭐뭐 못넣냐능 ㄹㅇㄴㅁ(175.205) 13.02.05 35 0
344957 파이썬 2.7에서 1000만개 집합 연산하려는데 [5] ㅠㅠ개초보(183.102) 13.02.05 114 0
344956 안녕하세요에 축구하면 팀웍 좋아지는 줄 아는 사장나오네 [6] dot(118.219) 13.02.05 105 0
344955 저런놈들은 스타트업을 너무 쉽게 생각하는듯 de(183.103) 13.02.04 51 0
344954 asp 오늘 첨 보고 깜짝놀램 [1] 늘모(58.143) 13.02.04 92 0
344953 리그오브레전드 처음 깔면 디폴트 아바타로 엉클샘 나오나요? 에어로홍갤로그로 이동합니다. 13.02.04 65 0
344952 입력버퍼 전단계는 뭐라고 합니까? [4] 네로시엔갤로그로 이동합니다. 13.02.04 81 0
344951 디씨에 취업할거샘 [4] (14.36) 13.02.04 139 0
344949 싸울 마음이 안생기게 하는 짤은.jpg ?(59.15) 13.02.04 115 0
344946 창업하자는 찌끄래기들 패턴 리스트 [7] de(183.103) 13.02.04 238 0
344945 질문하러 왔더니 프겔이 왜 난장판이야 [1] ㄹㅇㄴㅁ(175.205) 13.02.04 76 0
344943 봐봐 이새끼 불리한 글만 지우는거 ㅇㅇ [7] ㅁㅇㄹㄻㄴㅇ(114.200) 13.02.04 107 0
344939 청마린님 차라리 사법시험 보셈 길가던놈갤로그로 이동합니다. 13.02.04 42 0
뉴스 ‘방판뮤직 : 어디든 가요’, 김현정 성량에 스피커 터졌다! 명불허전 원조 디바 가창력 ‘그녀와의 이별’ 디시트렌드 07.19
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2