디시인사이드 갤러리

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

갤러리 본문 영역

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

이힝(175.215) 2013.02.02 10:52:14
조회 146 추천 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/14 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
345292 한 겨울에 소나기 듣자.... ㅋㄱ(183.96) 13.02.07 24 0
345290 xx부대 살인사건 , tag[소설, 스크롤]4 [1] 소설맨(116.33) 13.02.07 110 0
345289 xx부대 살인사건 , tag[소설, 스크롤]3 소설맨(116.33) 13.02.07 66 0
345288 xx부대 살인사건 , tag[소설, 스크롤]2 소설맨(116.33) 13.02.07 98 0
345286 xx부대 살인사건 , tag[소설, 스크롤] [1] 소설맨(116.33) 13.02.07 271 0
345283 cplusplus.com 이거 C++이 만든사이트임? [4] 부스타(14.36) 13.02.07 119 0
345282 [질문] 난수 출력 문제 [7] MUFF갤로그로 이동합니다. 13.02.07 111 0
345280 jsp로 웹프로그래머가 꿈인데 리눅스책을샀다. 이유는? [5] ㅇㅇ(112.153) 13.02.07 191 0
345277 내일 출근 하는사람 잇음? [2] ㅁㅁ(175.223) 13.02.07 76 0
345273 귀신 사진2 에어로홍갤로그로 이동합니다. 13.02.07 65 0
345272 내일 오전근무만 하는 횽들 있음??? [1] 멍청닭(182.211) 13.02.07 58 0
345271 아직도 모집공고의 뜻을 모르는 뉴비들을 위한 가이드라인 [6] 멍청닭(182.211) 13.02.07 276 2
345270 한참mfc를 봤는데 도저히 못찾겠어서.. mfc잘하시는분들 도움의 손길점 고릴리아갤로그로 이동합니다. 13.02.07 60 0
345269 어휴...... 경제가 진짜 개판인가보다 [1] 멍청닭(182.211) 13.02.07 100 0
345268 채용 공고에 석식 지원, 야간교통비 지급 이거 어떻게 생각해야되냐? [6] classical(175.200) 13.02.07 180 0
345266 청마린 소희빠아님? 로레알갤로그로 이동합니다. 13.02.07 38 0
345265 세탁소에 컴퓨터세탁이라고써있는거 물세탁이냐 [5] 로레알갤로그로 이동합니다. 13.02.07 119 0
345264 리닉스 초짜 질문 좀 드립니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ [3] ㅇㅇ(121.162) 13.02.07 102 0
345263 C++ STL에 정규식 넣으면 참 좋을텐데.. [2] ㅇㅇ(58.102) 13.02.07 121 0
345261 리버싱이라는것의 정확한 뜻이뭐냐?? [4] 엽산.갤로그로 이동합니다. 13.02.07 159 0
345260 교육원같은데 나오면 취직됨? [1] (168.126) 13.02.07 90 0
345259 역시 프겔은 여자 청정 지역이군 G컵녀 말이 없네? [5] 멍청닭(182.211) 13.02.07 347 0
345258 통신병가면 뭔일하냐?? 컴터관련일하나??? [4] 엽산.갤로그로 이동합니다. 13.02.07 120 0
345257 프로그래밍카페에서 디씨말투로질문햇는데 욕먹엇다; [10] 엽산.갤로그로 이동합니다. 13.02.07 258 0
345256 알고리즘 공부할려고 하는데 이산수학에서 꼭 필요한부분 캐치좀... [5] 이산수학(211.104) 13.02.07 353 0
345255 장의력하믄 백왕이제~~ [2] 코불(211.172) 13.02.07 76 0
345252 야 프로그래밍 공부 넘 열심히 하다 이명현상 걸렸다 ㅡㅜ [2] 상상(175.123) 13.02.07 115 0
345251 야 SA는 어떠냐 ㅇㅇ(58.102) 13.02.07 75 0
345250 실존하는 소스관리 안하는 회사이야기 [5] 123(61.72) 13.02.07 233 0
345249 Direct3D device가 뭐야? ㅁㄴㄻㄹ갤로그로 이동합니다. 13.02.07 166 0
345248 m&s 분야 어떤가여? topandbottom갤로그로 이동합니다. 13.02.07 47 0
345246 inet_ntoa 로 strcmp 비교했을때 좀 문제가있는데.. [3] 늘모(175.208) 13.02.07 91 0
345245 소스 관리 도구 안쓰는 회사는 망해야 한다. [10] 물속의다이아갤로그로 이동합니다. 13.02.07 269 0
345244 필드 가보면 다소 황당한 경우들이 많은데 [4] ㅇㅇ(58.102) 13.02.07 160 0
345243 언어별 소수연산 벤치마킹 [4] 123(210.103) 13.02.07 206 0
345240 내가 윈도우 모바일(ce,wm)쪽 프로그래머인데 닷넷을 싫어하는 이유가. [12] ㅇㅇ(58.102) 13.02.07 228 0
345239 우와 오늘 춥다! 외계달팽갤로그로 이동합니다. 13.02.07 43 0
345238 UI는 WPF가 최고 최강 이죠^^. [26] 123(210.103) 13.02.07 341 0
345237 아쉽다. 청마린 떡밥을 못 물었네 ㅇㅇ(58.102) 13.02.07 46 0
345236 제가 머리가 나빠서 하드웨어 팝니다. [3] d861ch(211.207) 13.02.07 117 0
345235 비주얼 베이직6 학원댕기는데... [6] 연금술사(220.149) 13.02.07 261 0
345231 7급공무원, 아이리스에 댓글알바 요원 왜 안나오고 총쏘면서 개폼잡습니까? 에어로홍갤로그로 이동합니다. 13.02.07 80 0
345230 출근길 지하철에선 앉아가면 안되는듯 싶다 S-GUN갤로그로 이동합니다. 13.02.07 85 0
345229 현직자들 있어?? 고민상담좀... [4] sk(112.170) 13.02.07 154 0
345227 요즘 디씨 불경기냐 [1] 땡칠도사갤로그로 이동합니다. 13.02.07 84 0
345226 성님들 [3] ㄴㄴ(1.240) 13.02.07 66 0
345225 전문대생이 궁금해서 물어봐요 [15] ㅁㅅㅋ(183.106) 13.02.07 280 0
345223 리버싱 [7] 0000(203.226) 13.02.07 140 0
345222 형들 이것좀 봐줘바.. c++ [9] cout(61.34) 13.02.07 137 0
345221 화가들이 노닥거리는 곳에 와선 [1] sfuh(59.7) 13.02.07 55 0
뉴스 ‘런닝맨’ 15주년 시청률 1위…유재석 “‘무한도전’보다 길게 했다” 디시트렌드 07.14
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2