728x90
반응형
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
static HWND c1, c2, c3, c4;
static BOOL ELLIPSE = FALSE;
switch (iMessage)
{
case WM_CREATE:
c1 = CreateWindow(TEXT ("button" ), TEXT("Draw Ellipse?" ), WS_CHILD | WS_VISIBLE | BS_CHECKBOX, 20, 20, 160, 25, hWnd , (HMENU )0, g_hInst, NULL);
c2 = CreateWindow(TEXT ("button" ), TEXT("Good bye Message?" ), WS_CHILD | WS_VISIBLE | BS_AUTOCHECKBOX, 20, 50, 160, 25, hWnd , (HMENU )1, g_hInst, NULL);
c3 = CreateWindow(TEXT ("button" ), TEXT("3State?" ), WS_CHILD | WS_VISIBLE | BS_3STATE , 20, 80, 160, 25, hWnd, (HMENU )2, g_hInst, NULL);
c4 = CreateWindow(TEXT ("button" ), TEXT("Auto 3State?" ), WS_CHILD | WS_VISIBLE | BS_AUTO3STATE, 20, 110, 160, 25, hWnd , (HMENU )3, g_hInst, NULL);
return 0;
case WM_DESTROY:
if ( SendMessage(c2, BM_GETCHECK , 0, 0) == BST_CHECKED)
{
MessageBox(hWnd , TEXT ("Good bye" ), TEXT("Check" ), MB_OK );
}
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps);
if (ELLIPSE == TRUE)
{
Ellipse(hdc, 200, 100, 400, 200);
}
else
{
Rectangle(hdc, 200, 100, 400, 200);
}
EndPaint( hWnd, &ps);
return 0;
case WM_COMMAND:
switch ( LOWORD( wParam))
{
case 0:
if ( SendMessage(c1, BM_GETCHECK , 0, 0) == BST_UNCHECKED)
{
SendMessage(c1, BM_SETCHECK , BST_CHECKED, 0);
ELLIPSE = TRUE;
}
else
{
SendMessage(c1, BM_SETCHECK , BST_UNCHECKED, 0);
ELLIPSE = FALSE;
}
InvalidateRect( hWnd, NULL, TRUE);
break;
case 2:
if ( SendMessage(c3, BM_GETCHECK , 0, 0) == BST_UNCHECKED)
{
SendMessage(c3, BM_SETCHECK , BST_CHECKED, 0);
}
else if ( SendMessage(c3, BM_GETCHECK, 0, 0) == BST_INDETERMINATE )
{
SendMessage(c3, BM_SETCHECK , BST_UNCHECKED, 0);
}
else
{
SendMessage(c3, BM_SETCHECK , BST_INDETERMINATE, 0);
}
break;
default:
break;
}
return 0;
}
return(DefWindowProc( hWnd, iMessage, wParam, lParam));
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
HBRUSH MyBrush, OldBrush;
switch (iMessage)
{
case WM_CREATE:
CreateWindow(TEXT ("button" ), TEXT ("Graph" ), WS_CHILD | WS_VISIBLE | BS_GROUPBOX
, 5, 5, 120, 110, hWnd, ( HMENU)0, g_hInst, NULL);
CreateWindow(TEXT ("button" ), TEXT ("Color" ), WS_CHILD | WS_VISIBLE | BS_GROUPBOX
, 145, 5, 120, 110, hWnd, ( HMENU)1, g_hInst, NULL);
r1 = CreateWindow(TEXT ("button" ), TEXT("Rectangle" ), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP
, 10, 20, 100, 30, hWnd, ( HMENU) ID_R1, g_hInst, NULL);
r2 = CreateWindow(TEXT ("button" ), TEXT("Ellipse" ), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 10, 50, 100, 30, hWnd, ( HMENU) ID_R2, g_hInst, NULL);
r3 = CreateWindow(TEXT ("button" ), TEXT ("Line" ), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 10, 80, 100, 30, hWnd, ( HMENU) ID_R3, g_hInst, NULL);
r4 = CreateWindow(TEXT ("button" ), TEXT ("Black" ), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON | WS_GROUP
, 150, 20, 100, 30, hWnd, ( HMENU) ID_R4, g_hInst, NULL);
r5 = CreateWindow(TEXT ("button" ), TEXT ("Red" ), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 150, 50, 100, 30, hWnd, ( HMENU) ID_R5, g_hInst, NULL);
r6 = CreateWindow(TEXT ("button" ), TEXT ("Blue" ), WS_CHILD | WS_VISIBLE | BS_AUTORADIOBUTTON
, 150, 80, 100, 30, hWnd, ( HMENU) ID_R6, g_hInst, NULL);
CheckRadioButton( hWnd, ID_R1, ID_R3, ID_R1);
CheckRadioButton( hWnd, ID_R4, ID_R6, ID_R4);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps);
switch (COLOR)
{
case 0:
MyBrush = CreateSolidBrush( RGB(0, 0, 0));
break;
case 1:
MyBrush = CreateSolidBrush( RGB(255, 0, 0));
break;
case 2:
MyBrush = CreateSolidBrush( RGB(0, 0, 255));
break;
default:
break;
}
OldBrush = ( HBRUSH)SelectObject(hdc, MyBrush);
switch (GRAPH)
{
case 0:
Rectangle(hdc, 10, 200, 200, 300);
break;
case 1:
Ellipse(hdc, 10, 200, 200, 300);
break;
case 2:
MoveToEx(hdc, 10, 200, NULL);
LineTo(hdc, 200, 300);
break;
default:
break;
}
SelectObject(hdc, OldBrush);
DeleteObject(MyBrush);
EndPaint( hWnd, &ps);
return 0;
case WM_COMMAND:
if ( HIWORD( wParam) == BN_CLICKED)
{
switch ( LOWORD( wParam))
{
case ID_R1:
GRAPH = 0;
break;
case ID_R2:
GRAPH = 1;
break;
case ID_R3:
GRAPH = 2;
break;
case ID_R4:
COLOR = 0;
break;
case ID_R5:
COLOR = 1;
break;
case ID_R6:
COLOR = 2;
break;
default:
break;
}
InvalidateRect( hWnd, NULL, TRUE);
}
return 0;
}
return(DefWindowProc( hWnd, iMessage, wParam, lParam));
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
HDC hdc;
PAINTSTRUCT ps;
WCHAR str[] = TEXT( "왼쪽 클릭:에디트 이동, 오른쪽 클릭:보임/숨김");
switch (iMessage)
{
case WM_CREATE:
hEdit = CreateWindow(TEXT ("edit" ), NULL , WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL
,10, 10, 200, 25, hWnd, ( HMENU) ID_EDIT, g_hInst, NULL);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc = BeginPaint( hWnd, &ps);
TextOut(hdc, 200, 100, str, lstrlen(str));
EndPaint( hWnd, &ps);
return 0;
case WM_LBUTTONDOWN :
nTop += 10;
MoveWindow(hEdit, 10, nTop, 200, 25, TRUE);
return 0;
case WM_RBUTTONDOWN:
if (bShow)
{
bShow = FALSE;
ShowWindow(hEdit, SW_HIDE);
}
else
{
bShow = TRUE;
ShowWindow(hEdit, SW_SHOW);
}
return 0;
}
return(DefWindowProc( hWnd, iMessage, wParam, lParam));
}
■ ARM assembly
■ 함수호출규약
ARM에는 Accumulator가 따로없지만
이 레지스터들이 Accumulator 라고 볼 수 있다.
함수호출규약 - 인텔은 함수호출이 끝났을때 eax를 제외한 레지스터들의 값은
안변한다는 전제가 깔려있다.
C를 배우면 함수호출규악을 몰라도 되고 C에만 집중할 수 있다.
컴파일러가 알아서 칩 종류에 맞춰서 어셈블리 하기때문에
리턴값이 eax에 들어가는데 구조체는 4바이트를 넘어서 훨씬큰데 어떻게 들어가냐?
구조체리턴하는것도 만들어서 확인해보면 된다.
struct smart k1;
k2;
k1 = k2;
struct smart
{
int a[30];
}
숙제 인텔에서는 구조체를 어떻게 대입하고 리턴하는가.
될수잇으면 구조체는 값대입을하지말고 포인터로 해야한다.
우리는 편하게 쓰는코드인데
어셈블리는 불편한 코드이다.
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151127_안향진_ARM어셈블리_2 (7) | 2015.11.29 |
---|---|
20151129 / ARM 어셈블리_2- 남수진 (7) | 2015.11.29 |
20151127 윤재희 #2. ARM/ Thumb PCS - 레지스터 사용법 ~ 컴파일에 대한 단상 (6) | 2015.11.29 |
2015.11.27_개인업무일지_[ASM #2]_이량경_함수호출 규약 (5) | 2015.11.29 |
20151128 엄민웅 - arm 임베디드레시피 이론 수업 (교제 127~161) (7) | 2015.11.28 |
20151127 - 홍준모 ARM~>ASM 2일 차 - 126p~ (7) | 2015.11.27 |
20151127-김재홍-ARM_Assembly_2일차 (6) | 2015.11.27 |
20151127 - 권오민 - ARM ASSEMBLY 2일차 (4) | 2015.11.27 |