mirror of https://github.com/bsnes-emu/bsnes.git
96 lines
3.1 KiB
C++
96 lines
3.1 KiB
C++
|
void Window::create(unsigned x, unsigned y, unsigned width, unsigned height, const string &text) {
|
||
|
widget->window = CreateWindowEx(
|
||
|
0, L"phoenix_window", utf16_t(text),
|
||
|
WS_POPUP | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
|
||
|
x, y, width, height,
|
||
|
0, 0, GetModuleHandle(0), 0
|
||
|
);
|
||
|
window->menu = CreateMenu();
|
||
|
window->status = CreateWindowEx(
|
||
|
0, STATUSCLASSNAME, L"",
|
||
|
WS_CHILD,
|
||
|
0, 0, 0, 0,
|
||
|
widget->window, 0, GetModuleHandle(0), 0
|
||
|
);
|
||
|
//StatusBar will be capable of receiving tab focus if it is not disabled
|
||
|
SetWindowLongPtr(window->status, GWL_STYLE, GetWindowLong(window->status, GWL_STYLE) | WS_DISABLED);
|
||
|
resize(width, height);
|
||
|
SetWindowLongPtr(widget->window, GWLP_USERDATA, (LONG_PTR)this);
|
||
|
}
|
||
|
|
||
|
void Window::setDefaultFont(Font &font) {
|
||
|
window->defaultFont = font.font->font;
|
||
|
}
|
||
|
|
||
|
void Window::setFont(Font &font) {
|
||
|
SendMessage(window->status, WM_SETFONT, (WPARAM)font.font->font, 0);
|
||
|
}
|
||
|
|
||
|
Geometry Window::geometry() {
|
||
|
RECT position, size;
|
||
|
GetWindowRect(widget->window, &position);
|
||
|
GetClientRect(widget->window, &size);
|
||
|
if(GetWindowLongPtr(window->status, GWL_STYLE) & WS_VISIBLE) {
|
||
|
RECT status;
|
||
|
GetClientRect(window->status, &status);
|
||
|
size.bottom -= status.bottom - status.top;
|
||
|
}
|
||
|
return Geometry(position.left, position.top, size.right, size.bottom);
|
||
|
}
|
||
|
|
||
|
void Window::setGeometry(unsigned x, unsigned y, unsigned width, unsigned height) {
|
||
|
bool isVisible = visible();
|
||
|
if(isVisible) setVisible(false);
|
||
|
SetWindowPos(widget->window, NULL, x, y, width, height, SWP_NOZORDER | SWP_FRAMECHANGED);
|
||
|
resize(width, height);
|
||
|
if(isVisible) setVisible(true);
|
||
|
}
|
||
|
|
||
|
void Window::setBackgroundColor(uint8_t red, uint8_t green, uint8_t blue) {
|
||
|
if(window->brush) DeleteObject(window->brush);
|
||
|
window->brushColor = RGB(red, green, blue);
|
||
|
window->brush = CreateSolidBrush(window->brushColor);
|
||
|
}
|
||
|
|
||
|
void Window::setTitle(const string &text) {
|
||
|
SetWindowText(widget->window, utf16_t(text));
|
||
|
}
|
||
|
|
||
|
void Window::setStatusText(const string &text) {
|
||
|
SendMessage(window->status, SB_SETTEXT, 0, (LPARAM)(wchar_t*)utf16_t(text));
|
||
|
}
|
||
|
|
||
|
void Window::setMenuVisible(bool visible) {
|
||
|
SetMenu(widget->window, visible ? window->menu : 0);
|
||
|
resize(window->width, window->height);
|
||
|
}
|
||
|
|
||
|
void Window::setStatusVisible(bool visible) {
|
||
|
ShowWindow(window->status, visible ? SW_SHOWNORMAL : SW_HIDE);
|
||
|
resize(window->width, window->height);
|
||
|
}
|
||
|
|
||
|
Window::Window() {
|
||
|
window = new Window::Data;
|
||
|
window->defaultFont = 0;
|
||
|
window->brush = 0;
|
||
|
}
|
||
|
|
||
|
void Window::resize(unsigned width, unsigned height) {
|
||
|
window->width = width;
|
||
|
window->height = height;
|
||
|
|
||
|
SetWindowPos(widget->window, NULL, 0, 0, width, height, SWP_NOZORDER | SWP_NOMOVE | SWP_FRAMECHANGED);
|
||
|
RECT rc;
|
||
|
GetClientRect(widget->window, &rc);
|
||
|
width += width - (rc.right - rc.left);
|
||
|
height += height - (rc.bottom - rc.top);
|
||
|
|
||
|
if(GetWindowLongPtr(window->status, GWL_STYLE) & WS_VISIBLE) {
|
||
|
GetClientRect(window->status, &rc);
|
||
|
height += rc.bottom - rc.top;
|
||
|
}
|
||
|
|
||
|
SetWindowPos(widget->window, NULL, 0, 0, width, height, SWP_NOZORDER | SWP_NOMOVE | SWP_FRAMECHANGED);
|
||
|
SetWindowPos(window->status, NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_FRAMECHANGED);
|
||
|
}
|