(이벤트도서) Programming Microsoft Windows CE .NET Third Edition |
|
|
찰스 페졸드?
winapi 정복
Programming Microsoft Windows with MFC (2/E)
winapi.co.kr. 처음부터.
찰스시몬? 헝가리안 표기법. -> 변수이름에다가 + 접두어
longlong int : 8바이트...
long int 4바이트
'A' =? 65. C에서 int형?
데이터형 | 의미 |
BYTE | unsigned char형 |
WORD | unsigned short형 |
DWORD | unsigned long형 |
LONG | long과 동일하다. |
LPSTR(long pointer STR) |
char *와 동일하다. |
BOOL | 정수형이며 TRUE, FALSE 중 한 값을 가진다 |
ex)
1)
typedef int BOOL;
#define TRUE 1
#define FALSE 0 => c에서 요런 형태
전처리 : 컴파일 시간 이전에 처리. 실행시간에 처리해야될것을 전처리시간에 처리하니깐.
오버헤드가 줄어듬. => 최적화 가능.
2)
typedef int BOOL;
const int TRUE = 1;
const int FALSE = 0; -> 자바에 const는 없지? C++에 있던것 C로 가져왔다.
: typechecking.이 가능. 타입이 엄격히 처리가능
3)
typedef enum { -> 0부터 1씩 count
FALSE, TRUE
} BOOL;
BOOL b;
b = TRUE;
1-3 비트 OR연산자
하나의 문자에대해 속성지정.
1)
typedef struct {
char ch;
BOOL underline;
BOOL italic;
BOOL blod;
BOOL shadow;
} CHAR;
CHAR c;
c.ch = 'A'; A라는 문자지정
c.underline = TRUE; 문자의 속성지정
c.italic = FALSE;
c.bold = TRUE;
c.shadow = FALSE;
=> 밑에꺼보다 비효율적. 속성마다 따로 만들어서..
2)
#define UL 1 // 맨 오른쪽이 1
#define ITALIC 2 // 오른쪽에서 두번째가 1
#define BOLD 4; // .....
#define SHADOW 8;
typedef struct {
char ch;
int a;
} CHAR;
CHAR c;
c.ch = 'A';
c.attr &= ~c.attr;
c.attr |= UL;
c.attr |= (ITALIC | BOLD);
c.attr &= ~ITALIC; // ITALIC 취소하는거..
~ NOT
& AND(MASK연산- 해당비트 뽑아낼때사용)
| OR(MASK연산, 치환할때)
^ XOR(비교할때-0나오면같고1나오면 다름. 패리티체크, CRC, 보안암호화)
SWAP(콜바이레퍼런스로 값바꿀때쓰는 함수)함수. 의 다른 표기.
*pa = *pa ^ *pb;
*pb= *pa ^ *pb;
*pa = *pa ^ *pb;
또는
*pa = *pa + *pb;
*pb= *pa - *pb;
*pb = *pa - *pb;
(가독성 떨어지고, 같은 주소값일때, 0이 나오는 오류..프로그램 정지한다. -_- )
중간에 저장안되가지고 지워졌다. -_-
씨불!!!!
===============================================================================
|
|
|
|
위 도서의 원서 | |
The C Programming Language : ANSI C Version (2nd Edition) I Prentice Hall I Brian W. Kernighan |
=====================================================================================
Run-Time Library Reference |
Performs a quick sort.
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *, const void *) );
Parameters
- base
- Start of target array.
- num
- Array size in elements.
- width
- Element size in bytes.
- compare
- Comparison function. The first parameter is a pointer to the key for the search and the second parameter is a pointer to the array element to be compared with the key.
함수포인터..
int add(int a, int b)
{
return a+b;
}
int substract(int a, intb)
{
return a-b;
}
int re;
int(*fp)(int, int); 하면 fp는 add나 substrack를 가리킬 수 있겠지.
fp = app;
re=(*fp)(5,6);
fp = substrack;
re = (*fp)(5,3);
Qsort같은경우.. 타입이 뭔지 모르기때문에..
함수 포인터가 필요하겠지..
포인터 쓰는경우.
=>
호출받아서 바꾸고 싶을때.
구조체 접근해서쓸때 오버헤드줄이기위해.
배열 넘겨줄때(시작주소값, 크기)
#include
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPRAM);
HINSTANCE
g_hInst;
LPSTR lpszClass = "First";
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE
hPrevInstance
,LPSTR lpszCmdParam,int
nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS
WndClass;
g_hInst=hInstance; 전역변수로 응용프로그램에대한 인스턴스핸들 저장.
윈도우 클래스에 셋팅 그냥 0으로 한다.
-_-
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
윈도우창의
백그라운드 색깔지정
WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
커서모양을 어떤모양으로
만들어줄까
WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
WndClass.hInstance=hInstance;
윈도우프로시져에대한
함수포인터
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=lpszClass;
메뉴는
지금 안쓴다.
WndClass.lpszMenuName=NULL;
수평 수직 스크롤바
만들기.
WndClass.style=CS_HREDRAW | CS_VREDRAW;
운영체제로 등록하기. (& : 일반적으로 구조체 변수 는 주소값으로 넘겨줌..
값다 넘겨주면
오버헤드가 크지. 그래서 포인터로
넘겨줌)
RegisterClass(&WndClass);
hWnd=CreateWindow(lpszClass,
"첫번째 예제입니다.",WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)0,hInstance,NULL);
(여기에 조건문을 쓸수 있다. )
ShowWindow(hWnd,nCmdShow);
// MessageBox(hWnd, "끝나기 전에 잠시 멈춤", 제목없음", MB_OK
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return
Message.wParam;
}
응용프로그램에서 호출하는 함수: 콜백함수
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM
lParam)
{
switch(iMessage) {
case
WM_DESTROY:
PostQuitMessage(0);
return
0;
}
디폴트윈도우프로시저 : 정의 안한건 알아서 .
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
int nums[10] = { ...};
int size = sizeof(nums)/sizeof(nums[0]);
void f(int nums[])
{
it size = sizeof(nums) /sizeof(nums[0]); -> 1이 나옴. 사실. int nums[] 는 int *nums 다..
} 변수다..
void f(int *nums)
{
it size = sizeof(nums) /sizeof(nums[0]); 이거하고 같다.
}
단지 배열을 전달한다는걸 알려주려고 위에것처럼 표기함...
그래서 보통 배열을 함수로 넘겨주려면 시작주소와 함께 넘겨준다.
아니면 아예 전역공간에다가 배열을 선언해놓든지.
e-mail : for1003@itisn.net -> 강사님 이메일.