2024-02-07 20:59:24 +08:00
|
|
|
#ifndef LUNA_BASE_WINDOW_H
|
|
|
|
#define LUNA_BASE_WINDOW_H
|
|
|
|
class control;
|
2024-07-21 19:28:47 +08:00
|
|
|
class basewindow
|
|
|
|
{
|
2024-02-07 20:59:24 +08:00
|
|
|
public:
|
|
|
|
HWND winId;
|
2024-07-21 19:28:47 +08:00
|
|
|
virtual void setgeo(int, int, int, int);
|
|
|
|
virtual void on_size(int w, int h);
|
2024-02-07 20:59:24 +08:00
|
|
|
RECT getgeo();
|
|
|
|
std::wstring text();
|
2024-07-21 19:28:47 +08:00
|
|
|
void settext(const std::wstring &);
|
|
|
|
operator HWND() { return winId; }
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
2024-07-21 19:28:47 +08:00
|
|
|
|
|
|
|
struct Font
|
|
|
|
{
|
|
|
|
std::wstring fontfamily;
|
|
|
|
float fontsize;
|
|
|
|
bool bold;
|
|
|
|
bool italic;
|
|
|
|
float calc_height() const
|
|
|
|
{
|
|
|
|
return MulDiv(fontsize, GetDeviceCaps(GetDC(NULL), LOGPIXELSY), 72);
|
|
|
|
}
|
|
|
|
HFONT hfont() const
|
|
|
|
{
|
|
|
|
return CreateFontIndirect(&logfont());
|
|
|
|
}
|
|
|
|
LOGFONT logfont() const
|
|
|
|
{
|
|
|
|
LOGFONT lf;
|
|
|
|
ZeroMemory(&lf, sizeof(LOGFONT));
|
|
|
|
wcscpy_s(lf.lfFaceName, fontfamily.c_str());
|
|
|
|
if (bold)
|
|
|
|
lf.lfWeight = FW_BOLD;
|
|
|
|
lf.lfItalic = italic;
|
|
|
|
lf.lfHeight = calc_height();
|
|
|
|
return lf;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
class mainwindow : public basewindow
|
|
|
|
{
|
|
|
|
HFONT hfont = 0;
|
|
|
|
|
2024-02-07 20:59:24 +08:00
|
|
|
public:
|
2024-07-21 19:28:47 +08:00
|
|
|
void setfont(const Font &);
|
2024-04-25 15:44:28 +08:00
|
|
|
void visfont();
|
2024-07-21 19:28:47 +08:00
|
|
|
std::vector<control *> controls;
|
|
|
|
std::vector<mainwindow *> childrens;
|
|
|
|
mainwindow *parent;
|
2024-02-07 20:59:24 +08:00
|
|
|
HWND lastcontexthwnd;
|
2024-07-21 19:28:47 +08:00
|
|
|
control *layout;
|
2024-02-07 20:59:24 +08:00
|
|
|
virtual void on_show();
|
|
|
|
virtual void on_close();
|
2024-07-21 19:28:47 +08:00
|
|
|
void on_size(int w, int h);
|
|
|
|
mainwindow(mainwindow *_parent = 0);
|
2024-02-07 20:59:24 +08:00
|
|
|
LRESULT wndproc(UINT message, WPARAM wParam, LPARAM lParam);
|
|
|
|
static void run();
|
|
|
|
void show();
|
|
|
|
void close();
|
2024-07-21 19:28:47 +08:00
|
|
|
void setcentral(int, int);
|
|
|
|
std::pair<int, int> calculateXY(int w, int h);
|
|
|
|
void setlayout(control *);
|
2024-02-07 20:59:24 +08:00
|
|
|
};
|
2024-07-21 19:28:47 +08:00
|
|
|
HICON GetExeIcon(const std::wstring &filePath);
|
2024-02-07 20:59:24 +08:00
|
|
|
#endif
|