728x90
반응형
#include "L1_Ethernet.h"
void L1_Ethernet(const void* vpData)
{
const struct ether_header* stpEth = vpData;
printf("%02X : %02X : %02X : %02X : %02X : %02X -> "
"%02X : %02X : %02X : %02X : %02X : %02X \n",
stpEth->ether_shost[0],
stpEth->ether_shost[1],
stpEth->ether_shost[2],
stpEth->ether_shost[3],
stpEth->ether_shost[4],
stpEth->ether_shost[5],
stpEth->ether_dhost[0],
stpEth->ether_dhost[1],
stpEth->ether_dhost[2],
stpEth->ether_dhost[3],
stpEth->ether_dhost[4],
stpEth->ether_dhost[5]);
printf("%04X\n", ntohs(stpEth->ether_type) );
// ntohs함수는 네트워크 to 호스트 short 의 약자로 빅인디언에서 리틀인디언으로 바꾸는데에 사용할수 있다.
// ntohs함수는 네트워크 to 호스트 short 의 약자로 빅인디언에서 리틀인디언으로 바꾸는데에 사용할수 있다.
실행결과 ) 패킷을 보내는곳의 MAC주소에서 받는곳의 MAC주소를 -> 가리키고 있는것을 표현.
stpEth 구조체 배열안에 head의 정보가 정확하게 들어있는것을 알수있다.
/* ID type 이 무엇인지 표현하기 위해 switch문을 써서 해석할수있다. */
switch(ntohs(stpEth->ether_type))
{
case ETHERTYPE_PUP:
printf("Xerox PUP\n");
break;
case ETHERTYPE_IP:
printf("IP\n");
break;
case ETHERTYPE_ARP:
printf("Address resolution\n");
break;
case ETHERTYPE_REVARP:
printf("Reverse ARP\n");
break;
default :
printf("Unknow\n");
break;
}
vpData = stpEth+1;
vpData = stpEth+1;
return vpData;
}
이런식으로 이쁘게 만들면 좋겠다^^
}
* 계층 2의 IP 헤더를 알아보자
IPv4 를 사용해서 버전이 4 라는것을 알수 있다.
#include "L2_IP.h"
const void* L2_IP(const void* vpData)
{
const struct ip* stpIP = vpData;
printf("IP version : %d\n",stpIP->ip_v);
printf("header length : %d byte\n",stpIP->ip_hl *4);
vpData = (unsigned char*)vpData + (stpIP->ip_hl *4);
return vpData;
}
구조체안에 정확하게 버전과 길이가 들어있는것을 알수있다.
그리고 return 값은
구조체안에 정확하게 버전과 길이가 들어있는것을 알수있다.
그리고 return 값은
* WINAPI DlgCheck
<main.cpp>
<main.cpp>
#include <windows.h>
#
include "dlg.h"
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("dlgcheck");
typedef struct MESSAGEMAP
{
UINT iMessage;
LRESULT (*lpfnMsgProc)(HWND, WPARAM, LPARAM);
} MESSAGEMAP;
// 대화상자 메세지 구조체
typedef struct DLGMESSAGEMAP
{
UINT iMessage;
BOOL (*lpfnMsgProc)(HWND, WPARAM, LPARAM);
} DLGMESSAGEMAP;
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while(GetMessage(&Message, NULL, 0, 0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
// add
int i;
static MESSAGEMAP MessageMaps[] =
{
{WM_CREATE, OnCreate},
{WM_COMMAND, OnCommand},
{WM_LBUTTONDOWN, OnLButtonDown},
{WM_MOUSEMOVE, OnMouseMove},
{WM_LBUTTONUP, OnLButtonUp},
{WM_DESTROY, OnDestroy},
{WM_LBUTTONDBLCLK, OnLbuttonClk},
{WM_RBUTTONDOWN,OnRButtonDown},
{WM_PAINT, OnWmPaint},
{WM_HSCROLL, OnHScroll}
};
for(i = 0 ; sizeof(MessageMaps) / sizeof(MessageMaps[0]) > i ; ++i)
{
if(iMessage == MessageMaps[i].iMessage)
{
return (*MessageMaps[i].lpfnMsgProc)(hWnd, wParam, lParam);
}
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
// (대화상자 프로시저 ,대화상자 핸들을 받는다 )
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT iMessage, WPARAM wParam, LPARAM lParam)
{
int i;
static DLGMESSAGEMAP DMessageMaps[] =
{
{WM_INITDIALOG, OnInitDialog},
{WM_COMMAND, OnDlgCommand},
};
for(i = 0 ; sizeof(DMessageMaps) / sizeof(DMessageMaps[0]) > i ; ++i)
{
if(iMessage == DMessageMaps[i].iMessage)
{
return (*DMessageMaps[i].lpfnMsgProc)(hDlg, wParam, lParam);
}
}
return FALSE; // 대화상자에서 처리하는 메세지외에 들어오는 값은 FALSE 로처리
}
<dlg.cpp>
#include "dlg.h"
HWND hWndMain;
PAINTSTRUCT ps;
HDC hdc;
TCHAR str[128];
BOOL bMale;
enum tag_Major{MANAGE,KOREAN,ENGLISH,LAW}Major;
TCHAR *arMajor[] = {TEXT("경영학과"),TEXT("국문학과"),TEXT("영문학과"),TEXT("법학과")};
/********** 스크롤 윈도우 생성 밑 스크롤 최소 최대 크기 및 스크롤 박스 위치 초기화 **********/
LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
bMale=TRUE;
Major=KOREAN;
return 0;
}
LRESULT OnWmPaint(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
hdc=BeginPaint(hWnd, &ps);
wsprintf(str,TEXT("성별 = %s"),bMale ? TEXT("남자"):TEXT("여자"));
TextOut(hdc,10,10,str,lstrlen(str));
wsprintf(str,TEXT("전공 = %s"),arMajor[Major]);
TextOut(hdc,10,30,str,lstrlen(str));
EndPaint(hWnd, &ps);
return 0;
}
LRESULT OnLButtonDown(HWND hWnd, WPARAM wParam, LPARAM lParam)
{
if (DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),
hWnd,AboutDlgProc)==1)
InvalidateRect(hWnd, NULL, TRUE);
return 0;
}
BOOL OnInitDialog(HWND hDlg,WPARAM wParam,LPARAM lParam)
{
CheckDlgButton(hDlg,IDC_MALE,bMale ? BST_CHECKED:BST_UNCHECKED);
CheckRadioButton(hDlg,IDC_MAJOR1,IDC_MAJOR4,IDC_MAJOR1+Major);
return TRUE;
}
BOOL OnDlgCommand(HWND hDlg,WPARAM wParam,LPARAM lParam)
{
switch (wParam)
{
case IDOK:
bMale=(IsDlgButtonChecked(hDlg,IDC_MALE)==BST_CHECKED);
if (IsDlgButtonChecked(hDlg,IDC_MAJOR1)==BST_CHECKED) Major=MANAGE;
if (IsDlgButtonChecked(hDlg,IDC_MAJOR2)==BST_CHECKED) Major=KOREAN;
if (IsDlgButtonChecked(hDlg,IDC_MAJOR3)==BST_CHECKED) Major=ENGLISH;
if (IsDlgButtonChecked(hDlg,IDC_MAJOR4)==BST_CHECKED) Major=LAW;
EndDialog(hDlg,IDOK);
return TRUE;
case IDCANCEL:
EndDialog(hDlg,IDCANCEL);
return TRUE;
}
return FALSE;
}
bMale 변수의 상태를 IDC_MALE 체크박스에 표시하고 Major변수의 값을 IDC_MAJOR1~IDC_MAJOR4 사이의 라디오 버튼에 표시하면 될것이다. WM_INITDIALOG에서 CheckDlgButton으로 bMale변수값에 따라 IDC_MALE체크 박스의 상태를 체크 또는 비체크로 설정했다. 라디오 버튼은 CheckRadioButton함수로 변경하는데 첫번째 라디오 버튼인 IDC_MAJOR1에 Major를 더한 버튼을 체크하면 된다.
728x90
'코스웨어 > 11년 내장형하드웨어' 카테고리의 다른 글
[내장형]심재원_2011.10.07일일보고서 (9) | 2011.10.07 |
---|---|
[내장형]이수란_2011.10.06 (10) | 2011.10.06 |
[내장형]김동화_2011년10월5일 일일보고서 (12) | 2011.10.05 |
[내장형]최남식_2011년10월4일 일일보고서 (19) | 2011.10.04 |
[내장형]김수만_110928 (16) | 2011.09.29 |
[내장형]이상만_110927 (14) | 2011.09.28 |
잠깐 내려 놓는 시간.. (7) | 2011.09.27 |
[내장형]윤병도_20110926일일보고서 (18) | 2011.09.26 |