🧼C, C++/WinAPI, UX(UI)

WINAPI C++ #2

Mawile 2020. 11. 7.
728x90

 

개발환경 >> DevCpp

언어 >> C++11 WinAPI

운영체제 >> Windows10

 

 


 

 

안녕하세요~

이번에는 WINAPI! 지난 글에 이어서 만들어보겠습니다!

이번에는 윈도 창에, 버튼, 글씨, 인풋 필드를 만들어보겠습니다!!

또, 그 외 여러 가지 함수들을 알아보겠습니다..

 

그럼 바로 시작하겠습니다!!

 

 


<< 지난 글 >>

 

WINAPI C++ #1

개발환경 >> DevCpp 언어 >> C++11 WinAPI 운영체제 >> Windows10 안녕하세요~ 오랜만입니다~~ 시험 끝나고 첫 글이네요 오늘 할 강좌는 WinAPI 기초입니다. WinAPI강좌를 하는 이유는 궁극적으로 내년 봄방학

mawile.tistory.com

 


<< 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에서 멀티스레드를 사용하는 방법과 그것을 이용해서 소켓과 결합한

실시간 채팅 서버를 만들어보겠습니다

 

 

 

감사합니다!!!

728x90

'🧼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

댓글