일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ios7 beta
- ios9
- ios7 베타
- 컴퓨터
- computer
- 아이폰 IOS7
- 아이폰5
- ios7 beta4
- 티스토리 초대장
- ios7 beta3 버그
- iOS7
- WWDC
- iphone5
- iphone
- iOS7 beta2
- 아이폰
- 블로그
- ios7 gm
- 애플
- beta5
- ios
- ios8 beta
- 베타5
- TISTORY
- 티스토리
- ios 7 beta 5
- ios7 배포
- ios7 beta3
- ios8
- ios7 골드마스터
- Today
- Total
wookss blog
윈도우API 프로그래밍 [메모장만들기!] 본문
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpszCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS WndClass;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
WndClass.lpfnWndProc = WndProc;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hInstance = hInstance;
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
WndClass.lpszMenuName = NULL;
WndClass.lpszClassName = "Window Class Name";
RegisterClass(&WndClass);
hwnd = CreateWindow("Window Class Name",
"20084296 황인욱",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
///////////////////////////////////기본 윈메인/////////////////////////////////////
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,
WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static char str[10][99]; // 문자열을 저장할 공간
static int count, line; // 문자열(count)와 행(line)을 위한 공간
static SIZE size; // 문자의 폭과 높이의 정수 필드가 있는 SIZE구조체, 문자열의 폭과 높이 저장
int i;
switch(iMsg)
{
case WM_CREATE:
CreateCaret(hwnd, NULL, 3, 15); // 폭3픽셀, 높이15픽셀의 Caret 생성
ShowCaret(hwnd);
count = 0; // 변수 초기화
line = 0;
break;
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
for(i=0; i<line+1; i++)
{
GetTextExtentPoint(hdc, str[i], strlen(str[i]), &size); //(도화지, 크기를 측정할 문자열, 몇번째 문자까지 크기측정, 문자열의 폭)
TextOut(hdc, 0, i*20, str[i], strlen(str[i])); //도화지에 (0, i*20)좌표에 str에 저장된 문자열을 출력
SetCaretPos(size.cx, i*20); // 커서 자리 값
}
EndPaint(hwnd, &ps);
break;
case WM_CHAR:
if((wParam == VK_BACK)&&(count>0))
{
count--;
} // 백스페이스 사용시 count 감소
else if(wParam == VK_RETURN) // Enter키 사용시
{
if(line<9) //10행 까지만 입력 허용
{
count = 0; //엔터키 입력이 들어왔을때 str[line][0]으로 이동, count 초기화
line++; // line증가, 줄 내려감
}
}
else
{
if(count<98) // count에 글자를 나열하되 99자 이하로
{
str[line][count++] = wParam; // 해당 line에 count에 차곡차곡 보냄
}
}
str[line][count] = '\0'; // 마지막에 입력 문자가 저장된 곳, 즉\0값으로 입력
InvalidateRgn(hwnd, NULL, TRUE); // 윈도우 화면을 무효화, 화면의 내용을 삭제, WM_PAINT 함수 이벤트발생 (강제 발생)
break;
case WM_DESTROY:
HideCaret(hwnd);
DestroyCaret();
PostQuitMessage(0);
break;
}
return(DefWindowProc(hwnd, iMsg, wParam, lParam));
}
----요기까지 소스-----
아이고 머리아...
진짜 여태것 배운것중에 제일 머리 아픈것같게 느껴지는 API..
이번에는 코드로 메모장을 만들었다..(교수님께서 과제로 내주신 덕분에^^;;)
이제는 저번 코드처럼 보기 좋게 띄어쓰기와 글씨에 색을 넣지 못하겠다.
특히 API는 점점 코드가 길어지기 때문에, 더이상 불가능 하다
이코드는
최대 99자까지 쓸수 있고, 10줄까지만 쓸수 있다.
뭐 기능은 별게 없지만
이거 만드는데 너무 복잡하다 T^T
'Study > 컴퓨터공학' 카테고리의 다른 글
정보기술과 응용 - 컴퓨터와 하드웨어 (0) | 2013.10.24 |
---|---|
웹 프로그래밍 공부, 개발 프로그램 추천! Aptana (1) | 2013.10.13 |
네트워크 명령어 (0) | 2013.10.04 |
logisim프로그램(디지털 공학, 논리 회로) (0) | 2013.06.01 |
유닉스 vi편집기 사용관련 용어 (0) | 2013.05.15 |