🧼C, C++/WinAPI, UX(UI)
WINAPI C++ #2
개발환경 >> DevCpp
언어 >> C++11 WinAPI
운영체제 >> Windows10
안녕하세요~
이번에는 WINAPI! 지난 글에 이어서 만들어보겠습니다!
이번에는 윈도 창에, 버튼, 글씨, 인풋 필드를 만들어보겠습니다!!
또, 그 외 여러 가지 함수들을 알아보겠습니다..
그럼 바로 시작하겠습니다!!
<< 지난 글 >>
<< CreateWindow >>
CreateWindow함수는 말 그대로 윈도를 만드는 겁니다!
사용방법은 이렇습니다!
CreateWindow(윈도우종류,윈도우이름,윈도우옵션,x좌표,y좌표,가로길이,세로길이,HWND,WPARAM,0,0);
예시) CreateWindow("button","버튼",WS_VISIBLE | WS_CHILD, 0,0,100,150,hwnd,(HMENU)1,0,0);
그러면 바로 코드를 알아보겠습니다..!!
<< Exam >>
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp){
switch(msg){
case WM_CREATE:
CreateWindow("button","버튼",WS_VISIBLE | WS_CHILD, 0,0,100,100,hwnd,0,0,0);
//버튼
CreateWindow("static","텍스트",WS_VISIBLE | WS_CHILD, 0,100,100,100,hwnd,0,0,0);
//텍스트
CreateWindow("edit","인풋필드",WS_VISIBLE | WS_CHILD, 0,120,800,100,hwnd,0,0,0);
//인풋필드
break;
case WM_DESTROY:
break;
case WM_COMMAND:
break;
default:
return DefWindowProcW(hwnd,msg,wp,lp);
}
}
int WINAPI WinMain(HINSTANCE hIn,HINSTANCE hPrev,LPSTR lp,int cmd){
WNDCLASSW w = {0};
w.hbrBackground = (HBRUSH)COLOR_WINDOW;
w.hCursor = LoadCursor(hIn,IDC_ARROW);
w.hInstance = hIn;
w.lpfnWndProc = WndProc;
w.lpszClassName = L"DP";
if(!RegisterClassW(&w)) return -1;
CreateWindow("DP","DP의 하루~",WS_VISIBLE | WS_OVERLAPPEDWINDOW,100,100,800,680,0,0,0,0);
MSG msg={0};
while(GetMessage(&msg,0,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
그러면은 이것을 응용해서
제목과 메시지 내용을 입력해서 메시지 박스가 뜨도록 만들어보겠습니다!
<< Output >>
#include <windows.h>
HWND htitle,hmsg;
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp){
switch(msg){
case WM_CREATE:
CreateWindow("static","제목:",WS_VISIBLE | WS_CHILD, 0,0,100,100,hwnd,0,0,0);
htitle = CreateWindow("edit","제목을 입력하세요...",WS_VISIBLE | WS_CHILD, 0,20,800,100,hwnd,0,0,0);
CreateWindow("static","내용:",WS_VISIBLE | WS_CHILD, 0,120,100,100,hwnd,0,0,0);
hmsg = CreateWindow("edit","내용을 입력하세요..",WS_VISIBLE | WS_CHILD, 0,140,800,100,hwnd,0,0,0);
CreateWindow("button","확인",WS_VISIBLE | WS_CHILD, 0,240,100,100,hwnd,(HMENU)1,0,0); //(HMENU)1 => WM_COMMAND
break;
case WM_DESTROY:
break;
case WM_COMMAND:
switch(wp){
case 1:
char title[512]={0},msg[512]={0};
GetWindowText(htitle,title,512); //특정 윈도우의 텍스트를 불러오는 함수 GetWindowText(창정보,문자열,받아올크기)
GetWindowText(hmsg,msg,512);
SetWindowText(hwnd,title); //특정 윈도우의 텍스트를 설정하는 함수 SetWindowText(창정보,문자열)
MessageBox(hwnd,msg,title,MB_OK);
break;
}
break;
default:
return DefWindowProcW(hwnd,msg,wp,lp);
}
}
int WINAPI WinMain(HINSTANCE hIn,HINSTANCE hPrev,LPSTR lp,int cmd){
WNDCLASSW w = {0};
w.hbrBackground = (HBRUSH)COLOR_WINDOW;
w.hCursor = LoadCursor(hIn,IDC_ARROW);
w.hInstance = hIn;
w.lpfnWndProc = WndProc;
w.lpszClassName = L"DP";
if(!RegisterClassW(&w)) return -1;
CreateWindow("DP","DP의 하루~",WS_VISIBLE | WS_OVERLAPPEDWINDOW,100,100,800,680,0,0,0,0);
MSG msg={0};
while(GetMessage(&msg,0,0,0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
여기서 제목과 내용을 입력하면은????
오예!!!!!
그러면은 오늘 강좌는 여기서 맞히도록 하겠습니다
다음 강좌는 WINAPI에서 멀티스레드를 사용하는 방법과 그것을 이용해서 소켓과 결합한
실시간 채팅 서버를 만들어보겠습니다
감사합니다!!!
'🧼C, C++ > WinAPI, UX(UI)' 카테고리의 다른 글
png파일 출력하기 WINAPI C++ (0) | 2021.04.13 |
---|---|
파일 자가복제 C++ #2 (0) | 2020.11.23 |
WINAPI C++ #1 (0) | 2020.11.04 |
무한HP 핵 만들기 Win32API (0) | 2020.10.18 |
프로세스 관리자권한으로 실행 Win32API (0) | 2020.10.15 |
댓글