C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75244] Re:WndProc에 대해서(아래질문 관련)
빌더(TWx) [builder] 389 읽음    2019-01-15 10:47
궁금이... 님이 쓰신 글 :
: 안녕하세요 도움 많이 받고 있는 사람입니다.
: 개발 환경은 2009 c++에서 하고 있구요
: 폼에 border를 bsNone으로 하고 패널을 맨위에 위치시키기 위해 아래 글과 같이 질문 올렸더니
: 감사하게도 빌더님이 아래 소스와 같이 WndProc을 사용하면 된다고 하여 적용하였더니 잘되더군요
: 문제는 메뉴에서 서브폼을 불러 컨트롤 할려고 했더니 모든 이벤트를 메인 WndProc에서 먹는것 같더라고요
: 아예 동작을 안합니다.
: 그리고 서브폼에서도 WndProc 함수가 필요해서 선언하고 
: default:
:         TForm::WndProc(M);
: 이쪽에 브레이크를 걸고 실행시키면 서브폼에서도 메시지가 넘어옵니다.
: 근데 서브폼이 아예 동작을 안하네요 왜일까요?(마우스이벤트, 버튼등 모든게)
: 간절히 답변 부탁드립니다.
: 글머 수고하세요
:
:
:
:
:
: void __fastcall TForm1::WndProc(TMessage &M)
: {
:     static RECT rect = {0};

:     switch (M.Msg)
:     {
:     case WM_CREATE:
:         AdjustWindowRectEx(&rect, GetWindowLongPtr(Handle, GWL_STYLE) & ~WS_CAPTION, FALSE, NULL);
:         rect.left *= -1;
:         rect.top *= -1;
:         return;

:     case WM_NCACTIVATE:
:         return;

:     case WM_NCCALCSIZE:
:         if (M.LParam)
:         {
:             NCCALCSIZE_PARAMS* sz = (NCCALCSIZE_PARAMS*)M.LParam;
:             // sz->rgrc[0].top += 3; 상단 보더를 완전히 없애려면 코멘트 처리
:             sz->rgrc[0].left += rect.left;
:             sz->rgrc[0].right -= rect.right;
:             sz->rgrc[0].bottom -= rect.bottom;
:             return;
:         }
:         break;

:     default:
:         TForm::WndProc(M);
:     }
: }
:



답변:


서브 폼이 있어요?
메세지가 라우팅 되도록 하려면...


void __fastcall TForm1::WndProc(TMessage &M)
{
	static RECT rect = {0};

	switch (M.Msg)
	{
	case WM_CREATE:
		AdjustWindowRectEx(&rect, GetWindowLongPtr(Handle, GWL_STYLE) & ~WS_CAPTION, FALSE, NULL);
		rect.left *= -1;
		rect.top *= -1;
		M.Result = 1;
		break;

	case WM_NCACTIVATE:
		M.Result = 1;
		break;

	case WM_NCCALCSIZE:
		if (M.LParam)
		{
			NCCALCSIZE_PARAMS* sz = (NCCALCSIZE_PARAMS*)M.LParam;
//			sz->rgrc[0].top += 3;
			sz->rgrc[0].left += rect.left;
			sz->rgrc[0].right -= rect.right;
			sz->rgrc[0].bottom -= rect.bottom;
			M.Result = 1;
		}
		break;

	default:
		TForm::WndProc(M);
	}
}


+ -

관련 글 리스트
75243 WndProc에 대해서(아래질문 관련) 궁금이... 324 2019/01/15
75244     Re:WndProc에 대해서(아래질문 관련) 빌더(TWx) 389 2019/01/15
75245         Re:Re:WndProc에 대해서(아래질문 관련) 궁금이... 329 2019/01/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.