lsprintf
유니코드 지원한다.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass = (LPSTR)TEXT("TextOut");
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)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = (LPCWSTR)lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, (LPCWSTR)lpszClass, WS_OVERLAPPEDWINDOW,
100, 100, 500, 500,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static int x;
static int y;
static WCHAR wcBuffer[100];
switch (iMessage)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
//SetTextAlign(hdc, TA_CENTER);
TextOut(hdc, x, y, wcBuffer, lstrlen(wcBuffer));
EndPaint(hWnd, &ps);
return 0;
case WM_MOUSEMOVE:
hdc = GetDC(hWnd);
MoveToEx(hdc, x, y, NULL);
x = LOWORD(lParam);
y = HIWORD(lParam);
wsprintf(wcBuffer, "x는 %d, y는 %d이다.", x, y); //s:메모리에 출력한다, ls:유니코드 지원함수이다.
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
실행 결과
마우스 포인터를 따라 움직인다.
4-2-나. 더블클릭
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass = (LPSTR)TEXT("TextOut");
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)GetStockObject(WHITE_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = (WNDPROC)WndProc;
WndClass.lpszClassName = (LPCWSTR)lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, (LPCWSTR)lpszClass, WS_OVERLAPPEDWINDOW,
100, 100, 500, 500,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, 0, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
static int x;
static int y;
static WCHAR wcBuffer[100];
switch (iMessage)
{
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
//SetTextAlign(hdc, TA_CENTER);
TextOut(hdc, x, y, wcBuffer, lstrlen(wcBuffer));
EndPaint(hWnd, &ps);
return 0;
case WM_MOUSEMOVE:
hdc = GetDC(hWnd);
MoveToEx(hdc, x, y, NULL);
x = LOWORD(lParam);
y = HIWORD(lParam);
wsprintf(wcBuffer, "x는 %d, y는 %d이다.", x, y); //s:메모리에 출력한다, ls:유니코드 지원함수이다.
InvalidateRect(hWnd, NULL, TRUE);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_LBUTTONDBLCLK:
InvalidateRect(hWnd, NULL, TRUE);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
case WM_CREATE:
hTimer=(HANDLE)SetTimer(hWnd,1,1000,NULL);
str="";
return 0;
case WM_TIMER:
time(&mytime);//현재 시간 알아냄
str=ctime(&mytime);//계산해서 글자로 알아냄
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);//2번째 인자 번호가 일치해야됨
PostQuitMessage(0);
return 0;
4-3-가.타이머
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="MyTimer";
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)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,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
#include
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
time_t mytime;
static HANDLE hTimer;
static char *str;
switch(iMessage) {
case WM_CREATE:
hTimer=(HANDLE)SetTimer(hWnd,1,1000,NULL);
str="";
return 0;
case WM_TIMER:
time(&mytime);
str=ctime(&mytime);
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,str,strlen(str)-1);
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
이걸로 하면 잘됨. 공유파일
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
SYSTEMTIME st;
static TCHAR sTime[128];
switch (iMessage)
{
case WM_CREATE:
SetTimer(hWnd,1,1000,NULL);
return 0;
case WM_TIMER:
GetLocalTime(&st);
wsprintf (sTime
,TEXT("지금 시간은 %d:%d:%d입니다")
,st.wHour
,st.wMinute
,st.wSecond);
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,sTime,lstrlen(sTime));
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
long FAR PASCAL WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
time_t mytime;
static HANDLE hTimer, hTimer2;
static char *str;
static RECT rt={100,100,400,120};
switch(iMessage) {
case WM_CREATE:
hTimer=(HANDLE)SetTimer(hWnd,1,1000,NULL);
hTimer2=(HANDLE)SetTimer(hWnd,2,5000,NULL);
str="";
SendMessage(hWnd, WM_TIMER, 1, 0);
return 0;
case WM_TIMER:
switch (wParam) {
case 1:
time(&mytime);
str=ctime(&mytime);
InvalidateRect(hWnd,&rt,TRUE);
break;
case 2:
MessageBeep(MB_OK);
break;
}
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,str,strlen(str)-1);
EndPaint(hWnd,&ps);
return 0;
case WM_DESTROY:
KillTimer(hWnd,1);
KillTimer(hWnd,2);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
4-4-나. 작업 영역
BOOL GetClientRect( HWND hWnd, LPRECT lpRect);
작업창의 크기를 알아내는 함수이다.
6.0이하 버전은 웹페이지와 비슷하다.
지금 visual studio는 조금 다르다.
5-2-가. 리소스 작성
메뉴이름은 알아서 정한다.
하위 메뉴는 40000번 부터 시작한다.
자동으로 번호가 부여된다. 무조건 일괄적으로 부여.
5-3 아이콘, 커서
#include <windows.h>
#include "resource.h"
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass = TEXT("Menu");
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)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 = MAKEINTRESOURCE(IDR_MENU1);
WndClass.style = CS_HREDRAW | CS_VREDRAW;
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, 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_COMMAND:
switch (LOWORD(wParam))
{
case ID_FILE_MENU1:
MessageBox(hWnd, TEXT("첫 번째 메뉴를 선택했습니다."), TEXT("Menu Demo"), MB_OK);
break;
case ID_FILE_MENU2:
MessageBox(hWnd, TEXT("두 번째 메뉴를 선택했습니다."), TEXT("Menu Demo"), MB_OK);
break;
case ID_FILE_EXIT:
PostQuitMessage(0);
break;
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
default:
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
}
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151116 강동조 개인업무일지API 3일차 (4) | 2015.11.16 |
---|---|
20151116 - 홍준모 Win32API - 3일차 (4) | 2015.11.16 |
20151116_박서연_일일업무일지_API(3) (6) | 2015.11.16 |
20151116 업무일지 -여지윤- (3) | 2015.11.16 |
2015-11-16 Win32 API 개인업무일지 - 천정호 (3) | 2015.11.16 |
20151116 API_3/ 남수진 (4) | 2015.11.16 |
20151116-김재홍-win32API_3일차 (2) | 2015.11.16 |
2015.11.16 -권오민- WinAPI-3일차 (3) | 2015.11.16 |