태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


일반적으로 rand만 사용하면


말만 랜덤이고 실제는 그 실행 내에서 정해진 랜덤수가 튀어나오게 되는데


이걸 방지하는게 srand 입니다.


이 코드에서는 그냥 메인에 두었지만..


MFC 코딩에서는 초기화 부분에 SRAND를 두면 됩니다.


본 코드는


0부터 99까지의 숫자 를  10개 받아


서로 비교하여 가장 큰 숫자가 몇번째 배열에 있는지를 출력합니다.



===================================================================






===============================================================



저작자 표시 비영리
신고
Posted by 졸가메






프로그램 다운


MCP.exe




프로그램 소스 공개 


분할 압축이라 다운은 전부 받으셔야 합니다.



TEST.zip.001


TEST.zip.002


TEST.zip.003


TEST.zip.004


TEST.zip.005


TEST.zip.006


TEST.zip.007


TEST.zip.008


TEST.zip.009









간단한 프로그램입니다.


공부할겸해서 자작.


마우스 클릭 연습을 위해 만들었습니다. 으으. 이게뭔 ㅋㅋ

저작자 표시 비영리
신고
Posted by 졸가메

BEGIN_MESSAGE_MAP

공부/MFC 2012.06.21 10:10

BEGIN_MESSAGE_MAP와 END_MESSAGE_MAP




Begins the definition of your message map.

 
BEGIN_MESSAGE_MAP(theClass, baseClass )

Parameters

theClass

Specifies the name of the class whose message map this is.

baseClass

Specifies the name of the base class of theClass.

Remarks

In the implementation (.cpp) file that defines the member functions for your class, start the message map with the BEGIN_MESSAGE_MAP macro, then add macro entries for each of your message-handler functions, and complete the message map with the END_MESSAGE_MAP macro.

Example
 
// Example for BEGIN_MESSAGE_MAP
BEGIN_MESSAGE_MAP( CMyWindow, CFrameWnd )
    ON_WM_PAINT()
    ON_COMMAND( IDM_ABOUT, OnAbout )
END_MESSAGE_MAP( )
 
설명하자면 메시지를 처리하는 함수 테이블을 정의 하는 매크로로
BEGIN_MESSAGE_MAP로 시작하여 END_MESSAGE_MAP로 끝나도록 정의하고
메시지가 전달되면 호출할 메시지 핸들러 함수 테이블을 정의하는 역할을 합니다.
 
전체적으로 구성을 설명하면
.h에
 
class CMyDlg : public CDialog
{
   ...
protected:
 // 생성된 메시지 맵 함수
 afx_msg void OnPaint();
 DECLARE_MESSAGE_MAP()
};
 
다음과 같이 선언되면 DECLARE_MESSAGE_MAP 매크로로 인해
 
#define DECLARE_MESSAGE_MAP() \
protected: \
 static const AFX_MSGMAP* PASCAL GetThisMessageMap(); \
 virtual const AFX_MSGMAP* GetMessageMap() const; \
 
클래스에는 GetThisMessageMap이라는 정적 멤버함수와 GetMessageMap() 멤버함수가 선언됩니다.
 
 
.cpp에는
BEGIN_MESSAGE_MAP과 END_MESSAGE_MAP은 각각 다음과 같이 정의되어 있는데
 
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
 PTM_WARNING_DISABLE \
 const AFX_MSGMAP* theClass::GetMessageMap() const \
  { return GetThisMessageMap(); } \
 const AFX_MSGMAP* PASCAL theClass::GetThisMessageMap() \
 { \
  typedef theClass ThisClass;         \
  typedef baseClass TheBaseClass;        \
  static const AFX_MSGMAP_ENTRY _messageEntries[] =  \
  {
 
#define END_MESSAGE_MAP() \
  {0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
 }; \
  static const AFX_MSGMAP messageMap = \
  { &TheBaseClass::GetThisMessageMap, &_messageEntries[0] }; \
  return &messageMap; \
 }          \
 PTM_WARNING_RESTORE
 
 
BEGIN_MESSAGE_MAP은 GetMessageMap의 구현과
GetThisMessageMap의 함수를 시작하여
END_MESSAGE_MAP까지 AFX_MSGMAP_ENTRY라는 구조체를 이용하여
메시지 ID와 핸들러 함수의 관계를 나타내는 테이블을 구성합니다.
 
윈도우의 메시지가 발생할경우 메시지핸들러는 GetThisMessageMap을 통해
메시지 ID를 검사하여 핸들러 함수를 찾아 호출해줍니다.
 
#define ON_WM_PAINT() \
 { WM_PAINT, 0, 0, 0, AfxSig_vv, \
  (AFX_PMSG)(AFX_PMSGW) \
  (static_cast< void (AFX_MSG_CALL CWnd::*)(void) > ( &ThisClass :: OnPaint)) },
 
예를 들어 WM_PAINT라는 메시지가 윈도우에 전달되면 OnPaint를 호출해줍니다.



-- 출처 : 네이버 지식인 검색 --  링크

저작자 표시 비영리
신고
Posted by 졸가메
반복문을 통해 전체를 불러올 때에도

그 사이즈가 유동적 이기때문에

매번 최대 크기 를 구해서 반복문의 횟수로 정해주어야 한다.



for문을 돌릴 때 대부분의 for문들은

for( i등의 횟수에 관한 int값 ;  i < 총 돌릴 반복 횟수 ; i++ )


이런식으로 짜게 되지만

Carray 로 짠 구조체 변수 를 반복작업에 사용할 경우

동적인 사이즈 이므로 매번 그 최대값이 무엇인지 값을 구해주어야 한다.

이때 그 값을 구하는 함수는

GetSize() 이다


 ex : int maxsize = pUserName->m_UserName.GetSize();

이렇게 짜 주고 for문에다가 maxsize를 넣어주면 에러 없이 잘 작동하게 된다.


 
저작자 표시 비영리
신고
Posted by 졸가메
왜 발생하는가 -> 

extern struct_wpt* m_ptWptAll;

이런식으로 정해두고나서 쓰질 정의된 것이 없기때문에

참조를 하지 못하여 에러가 뜨는 것.


구글링을 해서 검색을 하면 무슨 라이브러리를 추가해야한다는둥 하는데

그냥 코딩을 잘못 한 것인 경우일 확률이 더 높다.

왜 저게 잘못되었냐.. 면 

struct_wpt* m_ptWptAll;

라는 문장을 코딩하지 않아서 이다.



위에

 extern struct_wpt* m_ptWptAll; 
라고 코딩한 내용은 선언이지 정의가 아니다.

다시 말해서 위의 extern 문은 프로그램안에 이런 변수가 있다고 알려주는 역할 밖에는 하지 않는다.
 

변수의 영역을 잡아주지도 않았는데 어떻게 참조할 수가 있겠는가?

그런고로  

.cpp 파일중 하나에서 
struct_wpt* m_ptWptAll;  

라는 문을 첨가해야 비로소 컴파일러는 해당 변수의 영역을 생성하는 코드를 만들게 된다.
 
저작자 표시 비영리
신고
Posted by 졸가메


티스토리 툴바