mirror of
https://github.com/HIllya51/LunaHook.git
synced 2024-10-22 23:18:16 +08:00
refactor gui
1 1 1 1 1
This commit is contained in:
parent
68f178e451
commit
6f3bc497ab
@ -1,4 +1,4 @@
|
|||||||
add_executable(LunaHost WIN32 confighelper.cpp controls.cpp main.cpp processlistwindow.cpp LunaHost.cpp window.cpp luna.rc pluginmanager.cpp Plugin/pluginexample.cpp app.manifest)
|
add_executable(LunaHost confighelper.cpp controls.cpp main.cpp processlistwindow.cpp LunaHost.cpp window.cpp luna.rc pluginmanager.cpp Plugin/pluginexample.cpp app.manifest)
|
||||||
target_precompile_headers(LunaHost REUSE_FROM pch)
|
target_precompile_headers(LunaHost REUSE_FROM pch)
|
||||||
set_target_properties(LunaHost PROPERTIES OUTPUT_NAME "LunaHost${bitappendix}")
|
set_target_properties(LunaHost PROPERTIES OUTPUT_NAME "LunaHost${bitappendix}")
|
||||||
target_link_libraries(LunaHost comctl32 pch host ${YY_Thunks_for_WinXP})
|
target_link_libraries(LunaHost comctl32 pch host ${YY_Thunks_for_WinXP})
|
||||||
|
@ -33,21 +33,7 @@ void LunaHost::on_close(){
|
|||||||
if(attachedprocess.size())
|
if(attachedprocess.size())
|
||||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
}
|
}
|
||||||
void LunaHost::on_size(int w,int h){
|
|
||||||
int height = h-110;
|
|
||||||
w-=20;
|
|
||||||
auto _w=w-20;
|
|
||||||
|
|
||||||
g_selectprocessbutton->setgeo(10,10,_w/4,30);
|
|
||||||
btndetachall->setgeo(10+10+_w/4,10,_w/4,30);
|
|
||||||
btnshowsettionwindow->setgeo(10+20+_w*2/4,10,_w/4,30);
|
|
||||||
btnplugin->setgeo(10+30+_w*3/4,10,_w/4,30);
|
|
||||||
g_hListBox_listtext->setgeo(10, 90, w , height/2);
|
|
||||||
g_showtexts->setgeo(10, 100+height/2, w , height/2);
|
|
||||||
g_hEdit_userhook->setgeo(10,50,_w*3/4+20,30);
|
|
||||||
//g_hButton_insert->setgeo(10+20+_w*2/4,50,_w/4,30);
|
|
||||||
g_hButton_insert->setgeo(10+30+_w*3/4,50,_w/4,30);
|
|
||||||
}
|
|
||||||
void LunaHost::savesettings()
|
void LunaHost::savesettings()
|
||||||
{
|
{
|
||||||
configs->set("ToClipboard",check_toclipboard);
|
configs->set("ToClipboard",check_toclipboard);
|
||||||
@ -123,12 +109,12 @@ LunaHost::LunaHost(){
|
|||||||
|
|
||||||
setfont(25);
|
setfont(25);
|
||||||
settext(WndLunaHostGui);
|
settext(WndLunaHostGui);
|
||||||
btnshowsettionwindow=new button(this, BtnShowSettingWindow,100,100,100,100);
|
btnshowsettionwindow=new button(this, BtnShowSettingWindow);
|
||||||
g_selectprocessbutton =new button(this,BtnSelectProcess,830, 10, 200, 40) ;
|
g_selectprocessbutton =new button(this,BtnSelectProcess) ;
|
||||||
|
|
||||||
// btnsavehook=new button(this,BtnSaveHook,10,10,10,10);
|
// btnsavehook=new button(this,BtnSaveHook,10,10,10,10);
|
||||||
// btnsavehook->onclick=std::bind(&LunaHost::btnsavehookscallback,this);
|
// btnsavehook->onclick=std::bind(&LunaHost::btnsavehookscallback,this);
|
||||||
btndetachall=new button(this,BtnDetach,10,10,10,10);
|
btndetachall=new button(this,BtnDetach);
|
||||||
btndetachall->onclick=[&](){
|
btndetachall->onclick=[&](){
|
||||||
for(auto pid:attachedprocess){
|
for(auto pid:attachedprocess){
|
||||||
Host::DetachProcess(pid);
|
Host::DetachProcess(pid);
|
||||||
@ -136,15 +122,15 @@ LunaHost::LunaHost(){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
g_hEdit_userhook = new textedit(this,L"",10, 60, 600, 40,ES_AUTOHSCROLL);
|
g_hEdit_userhook = new lineedit(this);
|
||||||
btnplugin=new button(this,BtnPlugin,830,60,200,40);
|
btnplugin=new button(this,BtnPlugin);
|
||||||
|
|
||||||
plugins=new Pluginmanager(this);
|
plugins=new Pluginmanager(this);
|
||||||
btnplugin->onclick=[&](){
|
btnplugin->onclick=[&](){
|
||||||
if(pluginwindow==0) pluginwindow=new Pluginwindow(this,plugins);
|
if(pluginwindow==0) pluginwindow=new Pluginwindow(this,plugins);
|
||||||
pluginwindow->show();
|
pluginwindow->show();
|
||||||
};
|
};
|
||||||
g_hButton_insert = new button(this,BtnInsertUserHook,610, 60, 200, 40) ;
|
g_hButton_insert = new button(this,BtnInsertUserHook) ;
|
||||||
btnshowsettionwindow->onclick=[&](){
|
btnshowsettionwindow->onclick=[&](){
|
||||||
if(settingwindow==0) settingwindow=new Settingwindow(this);
|
if(settingwindow==0) settingwindow=new Settingwindow(this);
|
||||||
settingwindow->show();
|
settingwindow->show();
|
||||||
@ -165,7 +151,7 @@ LunaHost::LunaHost(){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
g_hListBox_listtext = new listbox(this,10, 120, 200, 200);
|
g_hListBox_listtext = new listbox(this);
|
||||||
g_hListBox_listtext->oncurrentchange=[&](int idx){
|
g_hListBox_listtext->oncurrentchange=[&](int idx){
|
||||||
uint64_t handle = g_hListBox_listtext->getdata(idx);
|
uint64_t handle = g_hListBox_listtext->getdata(idx);
|
||||||
std::wstring get;
|
std::wstring get;
|
||||||
@ -243,7 +229,7 @@ LunaHost::LunaHost(){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
g_showtexts = new textedit(this,L"",10, 330, 200, 200,ES_MULTILINE |ES_AUTOVSCROLL| WS_VSCROLL);
|
g_showtexts = new multilineedit(this);
|
||||||
g_showtexts->setreadonly(true);
|
g_showtexts->setreadonly(true);
|
||||||
|
|
||||||
Host::Start(
|
Host::Start(
|
||||||
@ -256,6 +242,20 @@ LunaHost::LunaHost(){
|
|||||||
std::bind(&LunaHost::on_text_recv,this,std::placeholders::_1,std::placeholders::_2)
|
std::bind(&LunaHost::on_text_recv,this,std::placeholders::_1,std::placeholders::_2)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
mainlayout=new gridlayout();
|
||||||
|
mainlayout->addcontrol(g_selectprocessbutton,0,0);
|
||||||
|
mainlayout->addcontrol(btndetachall,0,1);
|
||||||
|
mainlayout->addcontrol(btnshowsettionwindow,0,2);
|
||||||
|
mainlayout->addcontrol(btnplugin,0,3);
|
||||||
|
mainlayout->addcontrol(g_hEdit_userhook,1,0,1,3);
|
||||||
|
mainlayout->addcontrol(g_hButton_insert,1,3);
|
||||||
|
|
||||||
|
mainlayout->addcontrol(g_hListBox_listtext,2,0,1,4);
|
||||||
|
mainlayout->addcontrol(g_showtexts,3,0,1,4);
|
||||||
|
|
||||||
|
mainlayout->setfixedheigth(0,30);
|
||||||
|
mainlayout->setfixedheigth(1,30);
|
||||||
|
setlayout(mainlayout);
|
||||||
setcentral(1200,800);
|
setcentral(1200,800);
|
||||||
}
|
}
|
||||||
void LunaHost::on_text_recv_checkissaved(TextThread& thread)
|
void LunaHost::on_text_recv_checkissaved(TextThread& thread)
|
||||||
@ -332,14 +332,14 @@ void LunaHost::on_thread_delete(TextThread& thread){
|
|||||||
Settingwindow::Settingwindow(LunaHost* host):mainwindow(host){
|
Settingwindow::Settingwindow(LunaHost* host):mainwindow(host){
|
||||||
int height=30;int curry=10;int space=10;
|
int height=30;int curry=10;int space=10;
|
||||||
int labelwidth=300;int spinwidth=200;
|
int labelwidth=300;int spinwidth=200;
|
||||||
g_timeout = new spinbox(this,std::to_wstring(TextThread::flushDelay),space+labelwidth, curry, spinwidth, height) ;
|
g_timeout = new spinbox(this,std::to_wstring(TextThread::flushDelay)) ;
|
||||||
new label(this,LblFlushDelay,10, curry, labelwidth, height);curry+=height+space;
|
|
||||||
|
|
||||||
g_codepage = new spinbox(this,std::to_wstring(Host::defaultCodepage),space+labelwidth, curry, spinwidth, height) ;
|
|
||||||
new label(this,LblCodePage,10, curry, labelwidth, height);curry+=height+space;
|
|
||||||
|
|
||||||
spinmaxbuffsize = new spinbox(this,std::to_wstring(TextThread::maxBufferSize),space+labelwidth, curry, spinwidth, height) ;
|
g_codepage = new spinbox(this,std::to_wstring(Host::defaultCodepage)) ;
|
||||||
new label(this,LblMaxBuff,10, curry, labelwidth, height);curry+=height+space;
|
|
||||||
|
|
||||||
|
spinmaxbuffsize = new spinbox(this,std::to_wstring(TextThread::maxBufferSize)) ;
|
||||||
|
;curry+=height+space;
|
||||||
|
|
||||||
spinmaxbuffsize->onvaluechange=[=](int v){
|
spinmaxbuffsize->onvaluechange=[=](int v){
|
||||||
TextThread::maxBufferSize=v;
|
TextThread::maxBufferSize=v;
|
||||||
@ -347,40 +347,40 @@ Settingwindow::Settingwindow(LunaHost* host):mainwindow(host){
|
|||||||
spinmaxbuffsize->setminmax(0,0x7fffffff);
|
spinmaxbuffsize->setminmax(0,0x7fffffff);
|
||||||
|
|
||||||
|
|
||||||
spinmaxhistsize = new spinbox(this,std::to_wstring(TextThread::maxHistorySize),space+labelwidth, curry, spinwidth, height) ;
|
spinmaxhistsize = new spinbox(this,std::to_wstring(TextThread::maxHistorySize)) ;
|
||||||
new label(this,LblMaxHist,10, curry, labelwidth, height);curry+=height+space;
|
;curry+=height+space;
|
||||||
|
|
||||||
spinmaxhistsize->onvaluechange=[=](int v){
|
spinmaxhistsize->onvaluechange=[=](int v){
|
||||||
TextThread::maxHistorySize=v;
|
TextThread::maxHistorySize=v;
|
||||||
};
|
};
|
||||||
spinmaxhistsize->setminmax(0,0x7fffffff);
|
spinmaxhistsize->setminmax(0,0x7fffffff);
|
||||||
|
|
||||||
ckbfilterrepeat=new checkbox(this,LblFilterRepeat,10, curry, labelwidth, height);curry+=height+space;
|
ckbfilterrepeat=new checkbox(this,LblFilterRepeat);
|
||||||
ckbfilterrepeat->onclick=[=](){
|
ckbfilterrepeat->onclick=[=](){
|
||||||
TextThread::filterRepetition=ckbfilterrepeat->ischecked();
|
TextThread::filterRepetition=ckbfilterrepeat->ischecked();
|
||||||
};
|
};
|
||||||
ckbfilterrepeat->setcheck(TextThread::filterRepetition);
|
ckbfilterrepeat->setcheck(TextThread::filterRepetition);
|
||||||
|
|
||||||
g_check_clipboard =new checkbox(this,BtnToClipboard,10, curry, labelwidth, height) ;curry+=height+space;
|
g_check_clipboard =new checkbox(this,BtnToClipboard);
|
||||||
g_check_clipboard->onclick=[=](){
|
g_check_clipboard->onclick=[=](){
|
||||||
host->check_toclipboard=g_check_clipboard->ischecked();
|
host->check_toclipboard=g_check_clipboard->ischecked();
|
||||||
};
|
};
|
||||||
g_check_clipboard->setcheck(host->check_toclipboard);
|
g_check_clipboard->setcheck(host->check_toclipboard);
|
||||||
|
|
||||||
autoattach =new checkbox(this,LblAutoAttach,10, curry, labelwidth, height) ;curry+=height+space;
|
autoattach =new checkbox(this,LblAutoAttach);
|
||||||
autoattach->onclick=[=](){
|
autoattach->onclick=[=](){
|
||||||
host->autoattach=autoattach->ischecked();
|
host->autoattach=autoattach->ischecked();
|
||||||
};
|
};
|
||||||
autoattach->setcheck(host->autoattach);
|
autoattach->setcheck(host->autoattach);
|
||||||
|
|
||||||
autoattach_so =new checkbox(this,LblAutoAttach_savedonly,10, curry, labelwidth, height) ;curry+=height+space;
|
autoattach_so =new checkbox(this,LblAutoAttach_savedonly);
|
||||||
autoattach_so->onclick=[=](){
|
autoattach_so->onclick=[=](){
|
||||||
host->autoattach_savedonly=autoattach_so->ischecked();
|
host->autoattach_savedonly=autoattach_so->ischecked();
|
||||||
};
|
};
|
||||||
autoattach_so->setcheck(host->autoattach_savedonly);
|
autoattach_so->setcheck(host->autoattach_savedonly);
|
||||||
|
|
||||||
|
|
||||||
readonlycheck=new checkbox(this,BtnReadOnly,10,curry,labelwidth,height);curry+=height+space;
|
readonlycheck=new checkbox(this,BtnReadOnly);
|
||||||
readonlycheck->onclick=[=](){
|
readonlycheck->onclick=[=](){
|
||||||
host->g_showtexts->setreadonly(readonlycheck->ischecked());
|
host->g_showtexts->setreadonly(readonlycheck->ischecked());
|
||||||
};
|
};
|
||||||
@ -396,6 +396,27 @@ Settingwindow::Settingwindow(LunaHost* host):mainwindow(host){
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
g_codepage->setminmax(0,CP_UTF8);
|
g_codepage->setminmax(0,CP_UTF8);
|
||||||
|
|
||||||
|
mainlayout=new gridlayout();
|
||||||
|
mainlayout->addcontrol(new label(this,LblFlushDelay),0,0);
|
||||||
|
mainlayout->addcontrol(g_timeout,0,1);
|
||||||
|
|
||||||
|
mainlayout->addcontrol(new label(this,LblCodePage),1,0);
|
||||||
|
mainlayout->addcontrol(g_codepage,1,1);
|
||||||
|
|
||||||
|
mainlayout->addcontrol(new label(this,LblMaxBuff),2,0);
|
||||||
|
mainlayout->addcontrol(spinmaxbuffsize,2,1);
|
||||||
|
|
||||||
|
mainlayout->addcontrol(new label(this,LblMaxHist),3,0);
|
||||||
|
mainlayout->addcontrol(spinmaxhistsize,3,1);
|
||||||
|
|
||||||
|
mainlayout->addcontrol(ckbfilterrepeat,4,0,1,2);
|
||||||
|
mainlayout->addcontrol(g_check_clipboard,5,0,1,2);
|
||||||
|
mainlayout->addcontrol(autoattach,6,0,1,2);
|
||||||
|
mainlayout->addcontrol(autoattach_so,7,0,1,2);
|
||||||
|
mainlayout->addcontrol(readonlycheck,8,0,1,2);
|
||||||
|
|
||||||
|
setlayout(mainlayout);
|
||||||
setcentral(600,500);
|
setcentral(600,500);
|
||||||
settext(WndSetting);
|
settext(WndSetting);
|
||||||
}
|
}
|
||||||
@ -404,14 +425,14 @@ void Pluginwindow::on_size(int w,int h){
|
|||||||
}
|
}
|
||||||
Pluginwindow::Pluginwindow(mainwindow*p,Pluginmanager* pl):mainwindow(p){
|
Pluginwindow::Pluginwindow(mainwindow*p,Pluginmanager* pl):mainwindow(p){
|
||||||
pluginmanager=pl;
|
pluginmanager=pl;
|
||||||
new label(this,LblPluginNotify, 10,10,500,30);
|
(new label(this,LblPluginNotify))->setgeo(10,10,500,30);
|
||||||
new label(this,LblPluginRemove, 10,40,500,30);
|
(new label(this,LblPluginRemove))->setgeo( 10,40,500,30);
|
||||||
static auto listadd=[&](const std::wstring& s){
|
static auto listadd=[&](const std::wstring& s){
|
||||||
auto idx=listplugins->additem(std::filesystem::path(s).stem());
|
auto idx=listplugins->additem(std::filesystem::path(s).stem());
|
||||||
auto _s=new wchar_t[s.size()+1];wcscpy(_s,s.c_str());
|
auto _s=new wchar_t[s.size()+1];wcscpy(_s,s.c_str());
|
||||||
listplugins->setdata(idx,(LONG_PTR)_s);
|
listplugins->setdata(idx,(LONG_PTR)_s);
|
||||||
};
|
};
|
||||||
listplugins = new listbox(this,10, 10,360,340);
|
listplugins = new listbox(this);
|
||||||
#define IDM_ADD_PLUGIN 1004
|
#define IDM_ADD_PLUGIN 1004
|
||||||
#define IDM_REMOVE_PLUGIN 1006
|
#define IDM_REMOVE_PLUGIN 1006
|
||||||
#define IDM_RANK_UP 1007
|
#define IDM_RANK_UP 1007
|
||||||
|
@ -21,12 +21,14 @@ class Settingwindow:public mainwindow{
|
|||||||
checkbox* autoattach_so;
|
checkbox* autoattach_so;
|
||||||
spinbox* spinmaxbuffsize;
|
spinbox* spinmaxbuffsize;
|
||||||
spinbox* spinmaxhistsize;
|
spinbox* spinmaxhistsize;
|
||||||
|
gridlayout* mainlayout;
|
||||||
public:
|
public:
|
||||||
Settingwindow(LunaHost*);
|
Settingwindow(LunaHost*);
|
||||||
};
|
};
|
||||||
|
|
||||||
class processlistwindow:public mainwindow{
|
class processlistwindow:public mainwindow{
|
||||||
textedit* g_hEdit;
|
gridlayout* mainlayout;
|
||||||
|
lineedit* g_hEdit;
|
||||||
button* g_hButton;
|
button* g_hButton;
|
||||||
listview* g_hListBox;
|
listview* g_hListBox;
|
||||||
button* g_refreshbutton;
|
button* g_refreshbutton;
|
||||||
@ -34,7 +36,6 @@ class processlistwindow:public mainwindow{
|
|||||||
void PopulateProcessList(listview*,std::unordered_map<std::wstring,std::vector<int>>&);
|
void PopulateProcessList(listview*,std::unordered_map<std::wstring,std::vector<int>>&);
|
||||||
public:
|
public:
|
||||||
processlistwindow(mainwindow* parent=0);
|
processlistwindow(mainwindow* parent=0);
|
||||||
void on_size(int w,int h);
|
|
||||||
void on_show();
|
void on_show();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -43,11 +44,12 @@ class LunaHost:public mainwindow{
|
|||||||
std::map<int64_t,std::vector<std::wstring>>savetext;
|
std::map<int64_t,std::vector<std::wstring>>savetext;
|
||||||
std::set<int>attachedprocess;
|
std::set<int>attachedprocess;
|
||||||
std::mutex settextmutex;
|
std::mutex settextmutex;
|
||||||
textedit* g_hEdit_userhook;
|
lineedit* g_hEdit_userhook;
|
||||||
|
gridlayout* mainlayout;
|
||||||
button* g_hButton_insert;
|
button* g_hButton_insert;
|
||||||
button* btnplugin;
|
button* btnplugin;
|
||||||
listbox* g_hListBox_listtext;
|
listbox* g_hListBox_listtext;
|
||||||
textedit* g_showtexts;
|
multilineedit* g_showtexts;
|
||||||
button* g_selectprocessbutton;
|
button* g_selectprocessbutton;
|
||||||
button* btndetachall;
|
button* btndetachall;
|
||||||
button* btnshowsettionwindow;
|
button* btnshowsettionwindow;
|
||||||
@ -71,7 +73,6 @@ public:
|
|||||||
std::unordered_map<std::string,nlohmann::json>savedhookcontext;
|
std::unordered_map<std::string,nlohmann::json>savedhookcontext;
|
||||||
std::set<int>userdetachedpids;
|
std::set<int>userdetachedpids;
|
||||||
std::set<int64_t>onceautoselectthread;
|
std::set<int64_t>onceautoselectthread;
|
||||||
void on_size(int w,int h);
|
|
||||||
void on_close();
|
void on_close();
|
||||||
LunaHost();
|
LunaHost();
|
||||||
friend class Settingwindow;
|
friend class Settingwindow;
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
#include"controls.h"
|
#include"controls.h"
|
||||||
#include"window.h"
|
#include"window.h"
|
||||||
|
|
||||||
control::control(mainwindow*_parent){
|
control::control(mainwindow*_parent){
|
||||||
|
if(_parent==0)return;
|
||||||
parent=_parent;
|
parent=_parent;
|
||||||
parent->controls.push_back(this);
|
parent->controls.push_back(this);
|
||||||
|
|
||||||
}
|
}
|
||||||
void control::dispatch(WPARAM){}
|
void control::dispatch(WPARAM){}
|
||||||
void control::dispatch_2(WPARAM wParam, LPARAM lParam){};
|
void control::dispatch_2(WPARAM wParam, LPARAM lParam){};
|
||||||
button::button(mainwindow* parent,const std::wstring& text,int x,int y,int w,int h,DWORD style):control(parent){
|
button::button(mainwindow* parent):control(parent){}
|
||||||
winId=CreateWindowEx(0, L"BUTTON", text.c_str(), WS_CHILD | WS_VISIBLE |style ,
|
button::button(mainwindow* parent,const std::wstring& text):control(parent)
|
||||||
x, y, w, h, parent->winId , NULL, NULL, NULL);
|
{
|
||||||
|
winId=CreateWindowEx(0, L"BUTTON", text.c_str(), WS_CHILD | WS_VISIBLE ,
|
||||||
|
0,0,0,0, parent->winId , NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
void button::dispatch(WPARAM wparam){
|
void button::dispatch(WPARAM wparam){
|
||||||
if(wparam==BN_CLICKED){
|
if(wparam==BN_CLICKED){
|
||||||
@ -21,14 +22,17 @@ bool checkbox::ischecked(){
|
|||||||
int state = SendMessage(winId, BM_GETCHECK, 0, 0);
|
int state = SendMessage(winId, BM_GETCHECK, 0, 0);
|
||||||
return (state == BST_CHECKED);
|
return (state == BST_CHECKED);
|
||||||
}
|
}
|
||||||
checkbox::checkbox(mainwindow* parent,const std::wstring& text,int x,int y,int w,int h):button(parent,text,x,y,w,h,BS_AUTOCHECKBOX|BS_RIGHTBUTTON ){
|
checkbox::checkbox(mainwindow* parent,const std::wstring& text):button(parent)
|
||||||
|
{
|
||||||
|
winId=CreateWindowEx(0, L"BUTTON", text.c_str(), WS_CHILD | WS_VISIBLE |BS_AUTOCHECKBOX|BS_RIGHTBUTTON,
|
||||||
|
0,0,0,0, parent->winId , NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
void checkbox::setcheck(bool b){
|
void checkbox::setcheck(bool b){
|
||||||
SendMessage(winId, BM_SETCHECK, (WPARAM)BST_CHECKED*b, 0);
|
SendMessage(winId, BM_SETCHECK, (WPARAM)BST_CHECKED*b, 0);
|
||||||
}
|
}
|
||||||
spinbox::spinbox(mainwindow* parent,const std::wstring& text,int x,int y,int w,int h,DWORD stype):control(parent){
|
spinbox::spinbox(mainwindow* parent,const std::wstring& text):control(parent){
|
||||||
winId=CreateWindowEx(0, L"EDIT", text.c_str(), WS_CHILD | WS_VISIBLE | WS_BORDER|ES_NUMBER ,
|
winId=CreateWindowEx(0, L"EDIT", text.c_str(), WS_CHILD | WS_VISIBLE | WS_BORDER|ES_NUMBER ,
|
||||||
x, y, w, h, parent->winId, NULL, NULL, NULL);
|
0,0,0,0, parent->winId, NULL, NULL, NULL);
|
||||||
|
|
||||||
hUpDown = CreateWindowEx(0, UPDOWN_CLASS, NULL,
|
hUpDown = CreateWindowEx(0, UPDOWN_CLASS, NULL,
|
||||||
WS_CHILD | WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS ,
|
WS_CHILD | WS_VISIBLE | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS ,
|
||||||
@ -37,6 +41,11 @@ spinbox::spinbox(mainwindow* parent,const std::wstring& text,int x,int y,int w,i
|
|||||||
SendMessage(hUpDown, UDM_SETBUDDY, (WPARAM)winId, 0);
|
SendMessage(hUpDown, UDM_SETBUDDY, (WPARAM)winId, 0);
|
||||||
std::tie(minv,maxv)= getminmax();
|
std::tie(minv,maxv)= getminmax();
|
||||||
}
|
}
|
||||||
|
void spinbox::setgeo(int x,int y,int w,int h)
|
||||||
|
{
|
||||||
|
MoveWindow(winId,x,y,w,h,TRUE);
|
||||||
|
SendMessage(hUpDown, UDM_SETBUDDY, (WPARAM)winId, 0);
|
||||||
|
}
|
||||||
void spinbox::setcurr(int cur){
|
void spinbox::setcurr(int cur){
|
||||||
SendMessage(hUpDown, UDM_SETPOS32, 0, cur);
|
SendMessage(hUpDown, UDM_SETPOS32, 0, cur);
|
||||||
}
|
}
|
||||||
@ -72,38 +81,43 @@ void spinbox::setminmax(int min,int max){
|
|||||||
SendMessage(hUpDown, UDM_SETRANGE32,min, max);
|
SendMessage(hUpDown, UDM_SETRANGE32,min, max);
|
||||||
std::tie(minv,maxv)= getminmax();
|
std::tie(minv,maxv)= getminmax();
|
||||||
}
|
}
|
||||||
textedit::textedit(mainwindow* parent,const std::wstring& text,int x,int y,int w,int h,DWORD stype):control(parent){
|
multilineedit::multilineedit(mainwindow* parent):texteditbase(parent){
|
||||||
winId=CreateWindowEx(0, L"EDIT", text.c_str(), WS_CHILD | WS_VISIBLE | WS_BORDER|stype ,
|
winId=CreateWindowEx(0, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER| ES_MULTILINE |ES_AUTOVSCROLL| WS_VSCROLL ,
|
||||||
x, y, w, h, parent->winId, NULL, NULL, NULL);
|
0,0,0,0, parent->winId, NULL, NULL, NULL);
|
||||||
SendMessage(winId, EM_SETLIMITTEXT, 0, 0);
|
SendMessage(winId, EM_SETLIMITTEXT, 0, 0);
|
||||||
}
|
}
|
||||||
void textedit::setreadonly(bool ro){
|
lineedit::lineedit(mainwindow* parent):texteditbase(parent){
|
||||||
|
winId=CreateWindowEx(0, L"EDIT", L"", WS_CHILD | WS_VISIBLE | WS_BORDER| ES_AUTOHSCROLL ,
|
||||||
|
0,0,0,0, parent->winId, NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
texteditbase::texteditbase(mainwindow* parent):control(parent){}
|
||||||
|
void texteditbase::setreadonly(bool ro){
|
||||||
SendMessage(winId, EM_SETREADONLY, ro, 0);
|
SendMessage(winId, EM_SETREADONLY, ro, 0);
|
||||||
}
|
}
|
||||||
void textedit::scrolltoend(){
|
void texteditbase::scrolltoend(){
|
||||||
int textLength = GetWindowTextLength(winId);
|
int textLength = GetWindowTextLength(winId);
|
||||||
SendMessage(winId, EM_SETSEL, (WPARAM)textLength, (LPARAM)textLength);
|
SendMessage(winId, EM_SETSEL, (WPARAM)textLength, (LPARAM)textLength);
|
||||||
SendMessage(winId, EM_SCROLLCARET, 0, 0);
|
SendMessage(winId, EM_SCROLLCARET, 0, 0);
|
||||||
}
|
}
|
||||||
void textedit::appendtext(const std::wstring& text){
|
void texteditbase::appendtext(const std::wstring& text){
|
||||||
auto _=std::wstring(L"\r\n")+text;
|
auto _=std::wstring(L"\r\n")+text;
|
||||||
SendMessage(winId, EM_REPLACESEL, 0, (LPARAM)_.c_str());
|
SendMessage(winId, EM_REPLACESEL, 0, (LPARAM)_.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void textedit::dispatch(WPARAM wparam){
|
void texteditbase::dispatch(WPARAM wparam){
|
||||||
if(HIWORD(wparam)==EN_CHANGE){
|
if(HIWORD(wparam)==EN_CHANGE){
|
||||||
ontextchange(text());
|
ontextchange(text());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
label::label(mainwindow* parent,const std::wstring& text,int x,int y,int w,int h):control(parent){
|
label::label(mainwindow* parent,const std::wstring& text):control(parent){
|
||||||
winId=CreateWindowEx(0, L"STATIC", text.c_str(), WS_CHILD | WS_VISIBLE,
|
winId=CreateWindowEx(0, L"STATIC", text.c_str(), WS_CHILD | WS_VISIBLE,
|
||||||
x, y, w, h, parent->winId , NULL, NULL, NULL);
|
0,0,0,0, parent->winId , NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
listbox::listbox(mainwindow* parent,int x,int y,int w,int h):control(parent){
|
listbox::listbox(mainwindow* parent):control(parent){
|
||||||
|
|
||||||
winId=CreateWindowEx(WS_EX_CLIENTEDGE, L"LISTBOX", L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_NOTIFY|LBS_NOINTEGRALHEIGHT,
|
winId=CreateWindowEx(WS_EX_CLIENTEDGE, L"LISTBOX", L"", WS_CHILD | WS_VISIBLE | WS_VSCROLL | LBS_NOTIFY|LBS_NOINTEGRALHEIGHT,
|
||||||
x, y, w, h, parent->winId , NULL, NULL, NULL);
|
0,0,0,0, parent->winId , NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
void listbox::dispatch(WPARAM wparam){
|
void listbox::dispatch(WPARAM wparam){
|
||||||
if(HIWORD(wparam) == LBN_SELCHANGE){
|
if(HIWORD(wparam) == LBN_SELCHANGE){
|
||||||
@ -148,8 +162,8 @@ int listbox::insertitem(int i,const std::wstring& t){
|
|||||||
return SendMessage(winId, LB_INSERTSTRING, i, (LPARAM)t.c_str());
|
return SendMessage(winId, LB_INSERTSTRING, i, (LPARAM)t.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
listview::listview(mainwindow* parent,int x,int y,int w,int h):control(parent){
|
listview::listview(mainwindow* parent):control(parent){
|
||||||
winId=CreateWindowEx(0, WC_LISTVIEW, NULL, WS_VISIBLE |WS_VSCROLL| WS_CHILD | LVS_REPORT |LVS_SINGLESEL|LVS_NOCOLUMNHEADER , x, y, w, h, parent->winId, NULL,NULL, NULL);
|
winId=CreateWindowEx(0, WC_LISTVIEW, NULL, WS_VISIBLE |WS_VSCROLL| WS_CHILD | LVS_REPORT |LVS_SINGLESEL|LVS_NOCOLUMNHEADER , 0,0,0,0, parent->winId, NULL,NULL, NULL);
|
||||||
ListView_SetExtendedListViewStyle(winId, LVS_EX_FULLROWSELECT); // Set extended styles
|
ListView_SetExtendedListViewStyle(winId, LVS_EX_FULLROWSELECT); // Set extended styles
|
||||||
setfont(22);
|
setfont(22);
|
||||||
hImageList = ImageList_Create(22,22, //GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
|
hImageList = ImageList_Create(22,22, //GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON),
|
||||||
@ -214,8 +228,85 @@ void listview::setheader(const std::vector<std::wstring>& headers){
|
|||||||
}
|
}
|
||||||
headernum=headers.size();
|
headernum=headers.size();
|
||||||
}
|
}
|
||||||
|
void listview::on_size(int,int){
|
||||||
|
autosize();
|
||||||
|
}
|
||||||
void listview::autosize(){
|
void listview::autosize(){
|
||||||
for(int i=0;i<headernum;i++){
|
for(int i=0;i<headernum;i++){
|
||||||
ListView_SetColumnWidth(winId, i, LVSCW_AUTOSIZE_USEHEADER);
|
ListView_SetColumnWidth(winId, i, LVSCW_AUTOSIZE_USEHEADER);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
void gridlayout::setgeo(int x,int y,int w,int h){
|
||||||
|
|
||||||
|
auto dynarow=maxrow;
|
||||||
|
auto dynacol=maxcol;
|
||||||
|
for(auto fw:fixedwidth){
|
||||||
|
dynacol-=1;
|
||||||
|
w-=fw.second+margin;
|
||||||
|
}
|
||||||
|
for(auto fh:fixedheight){
|
||||||
|
dynarow-=1;
|
||||||
|
h-=fh.second+margin;
|
||||||
|
}
|
||||||
|
auto wpercol=(w-margin*(dynacol+1))/dynacol;
|
||||||
|
auto hperrow=(h-margin*(dynarow+1))/dynarow;
|
||||||
|
|
||||||
|
for(auto ctr:savecontrol){
|
||||||
|
|
||||||
|
int _x=0,_y=0,_w=0,_h=0;
|
||||||
|
for(int c=0;c<ctr.col+ctr.colrange;c++)
|
||||||
|
{
|
||||||
|
if(fixedwidth.find(c)!=fixedwidth.end())
|
||||||
|
if(c<ctr.col)
|
||||||
|
_x+=fixedwidth[c];
|
||||||
|
else
|
||||||
|
_w+=fixedwidth[c];
|
||||||
|
else
|
||||||
|
if(c<ctr.col)
|
||||||
|
_x+=wpercol;
|
||||||
|
else
|
||||||
|
_w+=wpercol;
|
||||||
|
|
||||||
|
}
|
||||||
|
_x+=(ctr.col+1)*margin;
|
||||||
|
_w+=(ctr.colrange-1)*margin;
|
||||||
|
for(int r=0;r<ctr.row+ctr.rowrange;r++)
|
||||||
|
{
|
||||||
|
if(fixedheight.find(r)!=fixedheight.end())
|
||||||
|
if(r<ctr.row)
|
||||||
|
_y+=fixedheight[r];
|
||||||
|
else
|
||||||
|
_h+=fixedheight[r];
|
||||||
|
else
|
||||||
|
if(r<ctr.row)
|
||||||
|
_y+=hperrow;
|
||||||
|
else
|
||||||
|
_h+=hperrow;
|
||||||
|
}
|
||||||
|
_y+=(ctr.row+1)*margin;
|
||||||
|
_h+=(ctr.rowrange-1)*margin;
|
||||||
|
|
||||||
|
ctr.ctr->setgeo(_x,_y,_w,_h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void gridlayout::setfixedwidth(int col,int width){
|
||||||
|
fixedwidth.insert({col,width});
|
||||||
|
}
|
||||||
|
void gridlayout::setfixedheigth(int row,int height){
|
||||||
|
fixedheight.insert({row,height});
|
||||||
|
}
|
||||||
|
void gridlayout::addcontrol(control* _c,int row,int col,int rowrange,int colrange){
|
||||||
|
maxrow=max(maxrow,row+rowrange);
|
||||||
|
maxcol=max(maxcol,col+colrange);
|
||||||
|
savecontrol.push_back(
|
||||||
|
{_c,row,col,rowrange,colrange}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
gridlayout::gridlayout(int row,int col):control(0){
|
||||||
|
maxrow=row;
|
||||||
|
maxcol=col;
|
||||||
|
margin=10;
|
||||||
|
}
|
||||||
|
void gridlayout::setmargin(int m){
|
||||||
|
margin=m;
|
||||||
}
|
}
|
@ -14,44 +14,54 @@ class control:public basewindow{
|
|||||||
|
|
||||||
class button:public control{
|
class button:public control{
|
||||||
public:
|
public:
|
||||||
button(mainwindow*,const std::wstring&,int,int,int,int,DWORD=BS_PUSHBUTTON);
|
button(mainwindow* parent);
|
||||||
|
button(mainwindow*,const std::wstring&);//,int,int,int,int,DWORD=BS_PUSHBUTTON);
|
||||||
void dispatch(WPARAM);
|
void dispatch(WPARAM);
|
||||||
std::function<void()> onclick=[](){};
|
std::function<void()> onclick=[](){};
|
||||||
};
|
};
|
||||||
class checkbox:public button{
|
class checkbox:public button{
|
||||||
public:
|
public:
|
||||||
checkbox(mainwindow*,const std::wstring&,int,int,int,int);
|
checkbox(mainwindow*,const std::wstring&);//,int,int,int,int);
|
||||||
bool ischecked();
|
bool ischecked();
|
||||||
void setcheck(bool);
|
void setcheck(bool);
|
||||||
};
|
};
|
||||||
class textedit:public control{
|
class texteditbase:public control{
|
||||||
public:
|
public:
|
||||||
textedit(mainwindow*,const std::wstring&,int,int,int,int,DWORD stype=0);
|
texteditbase(mainwindow*);
|
||||||
void dispatch(WPARAM);
|
void dispatch(WPARAM);
|
||||||
std::function<void(const std::wstring&)> ontextchange=[&](const std::wstring &text){};
|
std::function<void(const std::wstring&)> ontextchange=[&](const std::wstring &text){};
|
||||||
void appendtext(const std::wstring&);
|
void appendtext(const std::wstring&);
|
||||||
void scrolltoend();
|
void scrolltoend();
|
||||||
void setreadonly(bool);
|
void setreadonly(bool);
|
||||||
};
|
};
|
||||||
|
class multilineedit:public texteditbase{
|
||||||
|
public:
|
||||||
|
multilineedit(mainwindow*);
|
||||||
|
};
|
||||||
|
class lineedit:public texteditbase{
|
||||||
|
public:
|
||||||
|
lineedit(mainwindow*);
|
||||||
|
};
|
||||||
class spinbox:public control{
|
class spinbox:public control{
|
||||||
HWND hUpDown;
|
HWND hUpDown;
|
||||||
int minv,maxv;
|
int minv,maxv;
|
||||||
public:
|
public:
|
||||||
void dispatch(WPARAM);
|
void dispatch(WPARAM);
|
||||||
spinbox(mainwindow*,const std::wstring&,int,int,int,int,DWORD stype=0);
|
spinbox(mainwindow*,const std::wstring&);
|
||||||
void setminmax(int,int);
|
void setminmax(int,int);
|
||||||
std::pair<int,int>getminmax();
|
std::pair<int,int>getminmax();
|
||||||
void setcurr(int);
|
void setcurr(int);
|
||||||
std::function<void(int)> onvaluechange=[&](int){};
|
std::function<void(int)> onvaluechange=[&](int){};
|
||||||
|
void setgeo(int,int,int,int);
|
||||||
};
|
};
|
||||||
class label:public control{
|
class label:public control{
|
||||||
public:
|
public:
|
||||||
label(mainwindow*,const std::wstring&,int,int,int,int);
|
label(mainwindow*,const std::wstring&);
|
||||||
};
|
};
|
||||||
|
|
||||||
class listbox:public control{
|
class listbox:public control{
|
||||||
public:
|
public:
|
||||||
listbox(mainwindow*,int,int,int,int);
|
listbox(mainwindow*);
|
||||||
void dispatch(WPARAM);
|
void dispatch(WPARAM);
|
||||||
int currentidx();
|
int currentidx();
|
||||||
std::wstring text(int);
|
std::wstring text(int);
|
||||||
@ -69,7 +79,7 @@ class listview:public control{
|
|||||||
int headernum=1;
|
int headernum=1;
|
||||||
HIMAGELIST hImageList;
|
HIMAGELIST hImageList;
|
||||||
public:
|
public:
|
||||||
listview(mainwindow*,int,int,int,int);
|
listview(mainwindow*);
|
||||||
int insertitem(int,const std::wstring&,HICON hicon);
|
int insertitem(int,const std::wstring&,HICON hicon);
|
||||||
int insertcol(int,const std::wstring& );
|
int insertcol(int,const std::wstring& );
|
||||||
void clear();
|
void clear();
|
||||||
@ -80,5 +90,24 @@ public:
|
|||||||
void autosize();
|
void autosize();
|
||||||
int additem(const std::wstring&,HICON hicon);
|
int additem(const std::wstring&,HICON hicon);
|
||||||
void dispatch_2(WPARAM wParam, LPARAM lParam);
|
void dispatch_2(WPARAM wParam, LPARAM lParam);
|
||||||
|
void on_size(int,int);
|
||||||
|
};
|
||||||
|
|
||||||
|
class gridlayout:public control{
|
||||||
|
struct _c{
|
||||||
|
control* ctr;
|
||||||
|
int row,col,rowrange,colrange;
|
||||||
|
};
|
||||||
|
int margin;
|
||||||
|
int maxrow,maxcol;
|
||||||
|
std::vector<_c>savecontrol;
|
||||||
|
std::map<int,int>fixedwidth,fixedheight;
|
||||||
|
public:
|
||||||
|
void setgeo(int,int,int,int);
|
||||||
|
void setfixedwidth(int col,int width);
|
||||||
|
void setfixedheigth(int row,int height);
|
||||||
|
void addcontrol(control*,int row,int col,int rowrange=1,int colrange=1);
|
||||||
|
gridlayout(int row=0,int col=0);
|
||||||
|
void setmargin(int m=10);
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
@ -54,9 +54,9 @@ void processlistwindow::PopulateProcessList(listview* _listbox,std::unordered_ma
|
|||||||
}
|
}
|
||||||
|
|
||||||
processlistwindow::processlistwindow(mainwindow* p):mainwindow(p){
|
processlistwindow::processlistwindow(mainwindow* p):mainwindow(p){
|
||||||
g_hEdit = new textedit(this,L"",10, 10, 400, 30,ES_AUTOHSCROLL);
|
g_hEdit = new lineedit(this);
|
||||||
g_hButton=new button(this,BtnAttach,420, 10, 100, 30);
|
g_hButton=new button(this,BtnAttach);
|
||||||
g_refreshbutton =new button(this,BtnRefresh,530, 10, 100, 30);
|
g_refreshbutton =new button(this,BtnRefresh);
|
||||||
g_hButton->onclick=[&](){
|
g_hButton->onclick=[&](){
|
||||||
auto str=g_hEdit->text();
|
auto str=g_hEdit->text();
|
||||||
if(str.size()){
|
if(str.size()){
|
||||||
@ -76,7 +76,7 @@ processlistwindow::processlistwindow(mainwindow* p):mainwindow(p){
|
|||||||
g_exe_pid=getprocesslist();
|
g_exe_pid=getprocesslist();
|
||||||
PopulateProcessList(g_hListBox,g_exe_pid);
|
PopulateProcessList(g_hListBox,g_exe_pid);
|
||||||
};
|
};
|
||||||
g_hListBox = new listview(this,10, 60, 310, 200);
|
g_hListBox = new listview(this);
|
||||||
g_hListBox->setheader({L""});
|
g_hListBox->setheader({L""});
|
||||||
g_hListBox->oncurrentchange=[&](int idx){
|
g_hListBox->oncurrentchange=[&](int idx){
|
||||||
auto pids=g_exe_pid[g_hListBox->text(idx)];
|
auto pids=g_exe_pid[g_hListBox->text(idx)];
|
||||||
@ -91,19 +91,17 @@ processlistwindow::processlistwindow(mainwindow* p):mainwindow(p){
|
|||||||
g_hEdit->settext(_);
|
g_hEdit->settext(_);
|
||||||
};
|
};
|
||||||
settext(WndSelectProcess);
|
settext(WndSelectProcess);
|
||||||
|
mainlayout=new gridlayout();
|
||||||
|
mainlayout->addcontrol(g_hEdit,0,0,1,2);
|
||||||
|
mainlayout->addcontrol(g_hButton,0,2);
|
||||||
|
mainlayout->addcontrol(g_refreshbutton,0,3);
|
||||||
|
mainlayout->addcontrol(g_hListBox,1,0,1,4);
|
||||||
|
mainlayout->setfixedheigth(0,30);
|
||||||
|
setlayout(mainlayout);
|
||||||
setcentral(800,400);
|
setcentral(800,400);
|
||||||
}
|
}
|
||||||
void processlistwindow::on_show(){
|
void processlistwindow::on_show(){
|
||||||
g_hEdit->settext(L"");
|
g_hEdit->settext(L"");
|
||||||
g_exe_pid=getprocesslist();
|
g_exe_pid=getprocesslist();
|
||||||
PopulateProcessList(g_hListBox,g_exe_pid);
|
PopulateProcessList(g_hListBox,g_exe_pid);
|
||||||
}
|
|
||||||
void processlistwindow::on_size(int w,int h){
|
|
||||||
w=w-20;
|
|
||||||
auto _w=w-20;
|
|
||||||
g_hEdit->setgeo(10,10,_w/2,30);
|
|
||||||
g_hButton->setgeo(10+_w/2+10,10,_w/4,30);
|
|
||||||
g_refreshbutton->setgeo(10+_w/2+_w/4+20,10,_w/4,30);
|
|
||||||
g_hListBox->setgeo(10,50,w,h-60);
|
|
||||||
g_hListBox->autosize();
|
|
||||||
}
|
}
|
@ -30,6 +30,7 @@ void basewindow::settext(const std::wstring& text){
|
|||||||
|
|
||||||
void basewindow::setgeo(int x,int y,int w,int h){
|
void basewindow::setgeo(int x,int y,int w,int h){
|
||||||
MoveWindow(winId,x,y,w,h,TRUE);
|
MoveWindow(winId,x,y,w,h,TRUE);
|
||||||
|
on_size(w,h);
|
||||||
}
|
}
|
||||||
RECT basewindow::getgeo(){
|
RECT basewindow::getgeo(){
|
||||||
RECT rect;
|
RECT rect;
|
||||||
@ -140,7 +141,11 @@ void mainwindow::setcentral(int w,int h){
|
|||||||
auto [x,y]=calculateXY(w,h);
|
auto [x,y]=calculateXY(w,h);
|
||||||
setgeo(x,y,w,h);
|
setgeo(x,y,w,h);
|
||||||
}
|
}
|
||||||
|
void mainwindow::setlayout(control* _l){
|
||||||
|
layout=_l;
|
||||||
|
}
|
||||||
mainwindow::mainwindow(mainwindow* _parent){
|
mainwindow::mainwindow(mainwindow* _parent){
|
||||||
|
layout=0;
|
||||||
const wchar_t CLASS_NAME[] = L"LunaHostWindow";
|
const wchar_t CLASS_NAME[] = L"LunaHostWindow";
|
||||||
|
|
||||||
WNDCLASS wc = {};
|
WNDCLASS wc = {};
|
||||||
@ -183,4 +188,10 @@ void mainwindow::run(){
|
|||||||
|
|
||||||
void mainwindow::on_close(){}
|
void mainwindow::on_close(){}
|
||||||
void mainwindow::on_show(){}
|
void mainwindow::on_show(){}
|
||||||
void mainwindow::on_size(int w,int h){}
|
void mainwindow::on_size(int w,int h){
|
||||||
|
if(layout)
|
||||||
|
{
|
||||||
|
layout->setgeo(0,0,w,h);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void basewindow::on_size(int w,int h){}
|
||||||
|
@ -5,7 +5,8 @@ class basewindow{
|
|||||||
public:
|
public:
|
||||||
HFONT hfont=0;
|
HFONT hfont=0;
|
||||||
HWND winId;
|
HWND winId;
|
||||||
void setgeo(int,int,int,int);
|
virtual void setgeo(int,int,int,int);
|
||||||
|
virtual void on_size(int w,int h);
|
||||||
RECT getgeo();
|
RECT getgeo();
|
||||||
std::wstring text();
|
std::wstring text();
|
||||||
void settext(const std::wstring&);
|
void settext(const std::wstring&);
|
||||||
@ -17,9 +18,10 @@ public:
|
|||||||
std::vector<control*>controls;
|
std::vector<control*>controls;
|
||||||
mainwindow* parent;
|
mainwindow* parent;
|
||||||
HWND lastcontexthwnd;
|
HWND lastcontexthwnd;
|
||||||
|
control* layout;
|
||||||
virtual void on_show();
|
virtual void on_show();
|
||||||
virtual void on_close();
|
virtual void on_close();
|
||||||
virtual void on_size(int w,int h);
|
void on_size(int w,int h);
|
||||||
mainwindow(mainwindow* _parent=0);
|
mainwindow(mainwindow* _parent=0);
|
||||||
LRESULT wndproc(UINT message, WPARAM wParam, LPARAM lParam);
|
LRESULT wndproc(UINT message, WPARAM wParam, LPARAM lParam);
|
||||||
static void run();
|
static void run();
|
||||||
@ -27,6 +29,7 @@ public:
|
|||||||
void close();
|
void close();
|
||||||
void setcentral(int,int);
|
void setcentral(int,int);
|
||||||
std::pair<int,int>calculateXY(int w,int h);
|
std::pair<int,int>calculateXY(int w,int h);
|
||||||
|
void setlayout(control*);
|
||||||
};
|
};
|
||||||
HICON GetExeIcon(const std::wstring& filePath);
|
HICON GetExeIcon(const std::wstring& filePath);
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue
Block a user