단추, 체크 상자, 텍스트 상자 등도 다 실제 '창'이더라 기본적으로 제목 표시줄이 없을 뿐...
그래서 스타일을 바꿔주면 제목 표시줄이 있는 버튼도 만들 수 있고 메인 프로그램 창 안에 작은 창(MDI랑은 다른 용도로...)도 만들 수 있어
HINSTANCE hInstance;
LPCSTR className;
INT icon, background;
{
WNDCLASSEX wc = { 0 };
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc;
wc.hInstance = hInstance;
wc.lpszClassName = className;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (background + 1);
wc.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(icon));
wc.hIconSm = wc.hIcon;
return Regis terClassEx(&wc);
}
WINAPI WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)
HINSTANCE hInstance, hPrevInstance;
LPSTR lpCmdLine;
{
MSG msg;
HWND hWnd, hButtonClose;
SetupWindowClass(hInstance, TEXT("GecWindowClass"), IDI_GEC, COLOR_BTNFACE);
hWnd = CreateWindowEx(0, TEXT("GecWindowClass"), TEXT("큰 창"), WS_BORDER | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL);
SetupWindowClass(hInstance, TEXT("SmallWindowClass"), IDI_GEC, COLOR_GRADIENTINACTIVECAPTION);
CreateWindowEx(0, TEXT("SmallWindowClass"), TEXT("꼬마창 1"), WS_BORDER | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_VISIBLE | WS_CHILD, 20, 20, 320, 240, hWnd, NULL, hInstance, NULL);
CreateWindowEx(0, TEXT("SmallWindowClass"), TEXT("꼬마창 2"), WS_BORDER | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_VISIBLE | WS_CHILD, 400, 40, 320, 240, hWnd, NULL, hInstance, NULL);
CreateWindowEx(0, TEXT("SmallWindowClass"), TEXT("꼬마창 3"), WS_BORDER | WS_CAPTION | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_OVERLAPPED | WS_THICKFRAME | WS_SYSMENU | WS_VISIBLE | WS_CHILD, 280, 300, 320, 240, hWnd, NULL, hInstance, NULL);
hButtonClose = CreateWindowEx(0, TEXT("BUTTON"), TEXT("단추"), WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | WS_OVERLAPPEDWINDOW, 650, 500, 80, 24, hWnd, (HMENU) ID_MESSAGER, hInstance, NULL);
SendMessage(hButtonClose, WM_SETFONT, (WPARAM) GetDefaultFont(), TRUE);
while(GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
왜그렇게설계한거징? 별도의 handle이 있는 window라는건강?
ㅇㅇ 거의 대부분 컨트롤에 핸들이 있어 심지어는 (그럴 사람은 없겠지만) 따로 메인 창 없이 버튼만 딸랑 바탕화면에 표시할 수도 있어 ㅋㅋㅋ
아니면 프로그램 창에 붙어 있는 버튼을 SetParent 함수 써서 다른 창으로 옮겨버릴 수도 있고
무슨언어하면이런거베울수잇엉
그냥 네이티브 C언어야 닷넷 없이 윈도우 api 직접 써서
윈API 오랫만에 보네 - dc App
WNDPROC말하는거?
ㄴㄴ 창 안에 있는 컨트롤 또는 창의 GWL_STYLE 값 관련된 거야
합성패턴. 근데 윈도우만 저런거 아니고 gui관련 위젯 객체들은 어지간하면 저거랑 비슷한 방식이고 저렇게 갈 수밖에 없음
책임연쇄패턴도 인풋 핸들링때문에 같이 따라붙음.
Window 그잡채 ㄷㄷㄷ
splash 로고 저거로 그리잖아
이거 일렉트론으로도 조작가능한지요
nw.js나 일렉트론(크로뮴 기반)은 자체적인 디자인으로 단추를 그리고 xulrunner는 아마 uxtheme.dll 통해서 현재 테마의 버튼 비트맵만 따와서 그릴껄 아마도 확실하진 않은데
인터넷 익스플로러 기본 태그도 윈도우로 구현된거 있었다고함
ㄷㄷ