달력

112018  이전 다음

  •  
  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  

WM_USER 메시지

C++ 2011.02.16 16:21
출처 : http://blog.naver.com/intencelove?Redirect=Log&logNo=20122584833
윈도우 기반 프로그래밍에서 가장 기본적인 개념이 메시지 처리이며, 윈도우 프로그램에서는 사용자에게 엄청난 크기의 메시지 영역을 제공한다.

사용자 자신의 메시지
#define _MESSAGE1 (WM_USER+1)

WM_MESSAGE를 자주 사용하는 경우 UserMessage.h를 만들어 사용한다.

메시지 보내기
PostMessage(_MESSAGE);  //메시지 큐에 넣기
SendMessage(_MESSAGE);  //ㅐㄴ들러(함수)를 마칠때까지 기다림
위 함수는 CWnd 클래스의 멤버함수이며, 위 함수는 자신의 윈도우에서만 처리가 된다.
브로드 캐스팅을 하는 방법은 WinAPI를 이용하여 처리하며
::PostMessage(HWND _BROADCAST, _MESSAGE, Parameter1, Parameter2);
::SendMessage(HWND _BROADCAST, _MESSAGE, Parameter1, Parameter2);
자신의 윈도우 뿐 아니라 다른 모든 윈도우에 메시지가 전달된다.

메시지 맵핑
BEGIN_MESSAGE_MAP(CM?ywindowClass, CMyParentWindowClass)
//{{AFX_MSG_MAP(CMyWindowClass)
On_MESSAGE(_MESSAGE,OnMyMessageHandler)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
OnMyMessageHnadler는 사용자 정의 메시지가 도착 할때 수행되는 함수의 이름이다.

함수 정의
LRESULT CMyWindowClass::OnMyMessageHandler(WPARAM wParam,LPARAM lParam){}

함수 선언
afx_msg LRESULT OnMyMessageHandler(WPARAM wParam, LPARAM lParam);

afx_msg(Message Handler Function) : 윈도우로부터 어플리케이션에 메시지가 저달될 때 해당 메시지를 처리하는 멤버 함수, 함수이름엔 WM_대신 On, 함수 선언시 afx_msg를 붙인다.

Posted by sukay

CSocket 은 내부적으로 윈도를 하나 생성 하여 이벤트를 처리하는것으로 알고 있습니다. 이를 위해선 MFC 에서 사용하는 여러가지 글로벌 변수들이 초기화 되어야 하는데 이게 제대로 안되서 문제가 생기는 것 같네요.. 먼저 프로그램 시작시에 AfxWinInit() 함수를 호출한다.


if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))

    cerr << "MFC failed to initialize!" << endl; 
    return 1;
}

 
Posted by sukay

#pragma once

C++ 2011.02.16 13:38
하나의 헤더파일이 여러군데 include 되어야하는 경우 출돌을 피하기 위하여
include 되는 헤더파일의 최상단에 명시한다.

Posted by sukay