Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- Algorithm
- study book
- Dreamhack
- system hacking
- Got
- C++
- BFS
- DART
- fastapi를 사용한 파이썬 웹 개발
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- Computer Architecture
- MDP
- ML
- BOF
- bloc
- Widget
- Stream
- MATLAB
- Flutter
- 백준
- pytorch
- BAEKJOON
- Image Processing
- FastAPI
- rao
- 영상처리
- ARM
- Kaggle
- PCA
- llm을 활용 단어장 앱 개발일지
Archives
- Today
- Total
Bull
간단한 Win32 SDK 윈도우 프로그램 본문
소스코드
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wPraram, LPARAM IParam);
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpszCmdLine,
_In_ int nCmdShow
)
{
HWND hwnd; // 윈도우 핸들
MSG msg; // 메시지 구조체
WNDCLASSEX WndClass; // 윈도우 클래스 구조체
// 윈도우 클래스 구조체 WndClass에 값을 채워 등록
WndClass.cbSize = sizeof(WNDCLASSEX); //구조체 크기
WndClass.style = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS; // 클래스 스타일
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 = "EasyText"; // 윈도우 클래스 이름
WndClass.hIconSm = 0; // 기본적인 작은 아이콘
// 윈도우 클래스 등록
RegisterClassEx(&WndClass);
// 프레임 윈도우 생성
hwnd = CreateWindow(
"EasyText",
"Practice1a",
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 message, WPARAM wParam, LPARAM IParam) {
HDC hdc; // 디바이스 컨텍스트
RECT rect; // RECT 구조체
PAINTSTRUCT ps; // 페인트 구조체
LPCSTR szMsg1 = "I love Window Programming!"; // 윈도우에 출력될 문자열
LPCSTR szMsg2 = "키보드가 눌러졌습니다."; // 키보드를 눌렀을 때 출력될 문자열
LPCSTR szMsg3 = "키보드가 떼어졌습니다."; // 키보드를 떼었을 때 출력될 문자열
// 커널에 들어온 메시지를 switch 문을 이용하여 처리
switch (message) {
case WM_CREATE: // 윈도우 생성 메시지가 온 경우
break;
case WM_PAINT: // 화면에 출력 메시지가 온 경우
hdc = BeginPaint(hwnd, &ps);
TextOut(hdc, 10, 10, szMsg1, strlen(szMsg1)); // 윈도우에 문자열을 출력
EndPaint(hwnd, &ps);
break;
case WM_KEYDOWN: // 키보드의 키가 눌린 경우
hdc = GetDC(hwnd);
GetClientRect(hwnd, &rect);
DrawText(hdc, szMsg2, strlen(szMsg2), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
ReleaseDC(hwnd, hdc);
break;
case WM_KEYUP: // 키보드의 키가 떼어진 경우
hdc = GetDC(hwnd);
GetClientRect(hwnd, &rect);
DrawText(hdc, szMsg3, strlen(szMsg3), &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
ReleaseDC(hwnd, hdc);
break;
case WM_LBUTTONDBLCLK: // 왼쪽 마우스 더블 클릭한 경우
MessageBox(hwnd, "마우스 더블 클릭!", "마우스 메시지", MB_OK | MB_ICONASTERISK);
break;
case WM_DESTROY: // 프로그램 종료 메시지가 온 경우
PostQuitMessage(0);
break;
default: // 그 외 메시지
return DefWindowProc(hwnd, message, wParam, IParam);
}
return 0;
}
기본적인 SDK의 틀과 키보드가 떼어졌을 때, 눌려졌을 때, 더블클릭을 하였을 때 기능을 구현한 코드입니다.
키보드가 떼어졌을 때
키보드가 눌렸을 때
마우스를 더블 클릭 하였을 때
출처
[단계별로 쉽게 배우는 Visual C++ 2022 MFC 윈도우 프로그래밍, 정일홍 지음]의 「실습1-1」 코드
'Software Framework > MFC' 카테고리의 다른 글
[MFC] 텍스트 상자 정렬 방법 (0) | 2023.10.04 |
---|---|
[MFC] 텍스트 상자 야매 정렬 방법 (1) | 2023.10.04 |
[visual studio2022] 리소스 뷰 탭 위치 (0) | 2023.10.04 |
SetTimer() 함수 (0) | 2023.09.13 |