본문 바로가기
API Programming

윈도우 클래스 & 윈도우 객체

by cod1ng 2024. 3. 6.

윈도우 클래스 정보

윈도우 클래스의 종류

시스템 전역 클래스(System global class)

운영체제가 부팅될 때 등록되며 주로 컨트롤을 만들 때 사용된다.

Button, edit, scrollbar, listbox, 등이 그 예이며, 따라서 버튼 윈도우를 만들고 싶다 면 등록된 “button”이라는 클래스명으로 참조해서 생성하면 된다 초기 컨트롤 윈도우 클래스 이다.

 

응용 프로그램 전역 클래스(Application global class)

주로 DLL에 의해 등록되며 다른 프로그램에서 사용 될 수 있다.

추가 컨트롤 윈도우 클래스 이다.

 

응용 프로그램 로컬 클래스(Application local class)

응용 프로그램 자신이 메인 윈도우나 차일드 또는 커스텀 컨트롤을 만들기 위해 프 로그램 상단에 등록하는 클래스이며 해당 프로그램이 종료되면 윈도우 클래스도 같 이 파괴된다.

코드에 등록된 곳에서만 사용할 수 있다.

 

윈도우 객체(Window Object)

윈도우 객체는 운영체제가 하나의 윈도우를 관리하기 위해 생성하는 데이터 구조체이다.

CreateWindow() 함수로 윈도우를 만들 때 생성되며 설정했던 윈도우의 속성들을 실행 중에 조사하거나 변경하고자 할 때는 다음 두 함수를 사용한다.

 

// 32bit 전용 함수 : 기존 사용된 함수
LONG GetWindowLong(HWND hWnd, int nIndex);
DWORD SetWindowLong(HWND hWnd, int nIndex, LONG dwNewLong);
// 64bit 전용 지원 함수 : 대체된 함수
LONG_PTR GetWindowLongPtr(HWND hWnd, int nIndex);
LONG_PTR SetWindowLongPtr(HWND hWnd, int nIndex, LONG_PTR dwNewLong)

위 코드를 그림으로 표현한 것이다.

 

CreateWindow() 함수는 윈도우 오브젝트를 생성하고 ShowWindow() 함수는 생성된 윈 도우 오브젝트 정보를 바탕으로 화면에 윈도우를 출력해준다.

 

GetWindowLongPtr() 함수는 저장된 윈도우 오브젝트에서 원하는 정보를 얻을 수 있고, S etWindowLongPtr() 함수는 저장된 윈도우 오브젝트 정보를 수정할 수 있다.

BOOL fun_ModifyStylpe(HWND hwnd, LONG_PTR Add, LONG_PTR Remove, BOOL bRedraw)
{
BOOL bFlag = FALSE;
LONG_PTR style = GetWindowLongPtr(hwnd, GWL_STYLE);
style |= Add;
style &= ~Remove;
bFlag = (BOOL)SetWindowLongPtr(hwnd, GWL_STYLE, style);
if( bFlag && bRedraw )
SetWindowPos(hwnd, 0, 0, 0, 0, 0, 
SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME); 
return bFlag;
}
int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR lpCmdLine, int nS
howCmd)
{
MyRegisterClass(hInst);
HWND hwnd = InitInstance (hInst, nShowCmd);
if (hwnd == 0) {
return FALSE;
}
// 실시간 윈도우 객체 정보 수정
HWND hWnd = FindWindow(0, _TEXT("계산기"));
fun_ModifyStylpe(hWnd,WS_THICKFRAME, WS_SYSMENU, TRUE);
MessageBox(0, TEXT(""), TEXT(""), MB_OK);
return 0;
}

'API Programming' 카테고리의 다른 글

[API] skeleton 코드  (0) 2024.03.06
[API] 메시지 ~ 윈도우 프로시저(Window Procedure) 란?  (0) 2024.03.06
윈도우 핸들 - 코드  (0) 2024.03.06
윈도우 핸들(Window Handle)  (0) 2024.03.06
Window 윈도우 생성 과정  (1) 2024.03.05