달력

12020  이전 다음

  •  
  •  
  •  
  • 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
  • 31
  •  

WM_USER 메시지

C++ 2011. 2. 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

댓글을 달아 주세요

  1. ApPLe!  댓글주소 수정/삭제 댓글쓰기 2011.02.20 00:01

    아 ....저 이거
    저 부대안에서 파일배포프로그램만들때 MFC로 할때
    참고했었던것같네용 ㅋ

    하지만ㅋ결국ㅋ...
    정적소켓에다 쓰레드 돌려서 쑈부봤다는 ... 슬픈 비화가 ...ㅋㅋ

  2. sukay  댓글주소 수정/삭제 댓글쓰기 2011.02.25 01:48 신고

    누가 댓글을 달아 주셨나 했다..ㅋㅋㅋㅋㅋ

#pragma once

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

Posted by sukay

댓글을 달아 주세요