#pragma once
#include "xcontrol/xdwtable.hpp"
#include "xcontrol/xdwgrid.hpp"
#include "wobject/xwin.hpp"
#include "wobject/xstring.hpp"
#include "wobject/xaserverarg.hpp"
#include "wobject/xaserver.hpp"
#include "xcontrol/xcombobox.hpp"
#include "xcontrol/xlayersheet.hpp"
#include "vbusiness/vframe/frame.vframe.vbusiness.hpp"
using xml = KXMLDOMDocument;
class __declspec(dllexport) vindexform: public xwin
{
public:
xstring m_Assignment;
HWND m_hMenu;
xlayersheet mainsheet;
xcombobox cbx_menu; //页签数组
xcombobox cbx_panelName; //页签顺序数组
xcombobox cbx_panelNo; //页签数组
xcombobox cbx_tab; //页签顺序数组
HWND m_npHwnd; //菜单树窗口句柄
HWND m_nHwnd; //菜单树窗口句柄
int m_cursheet; //当前页签
int menuShow;
HWND m_npHwnd2; //openwindow
HWND m_startwin;
public:
vindexform(void* implPtr,HWND hWnd):xwin(implPtr,hWnd){}
public:
static vindexform * CreateInstance(void* implPtr,void* hWnd)
{
return new vindexform(implPtr,(HWND)hWnd);
}
public:
xstring getHomeConfig(xstring att)
{
xml x ;
x.load(L"cache\\config.xml");
//alert(x.GetXml());
if ((xstring)x.xml() == L"") return L"";
KXMLDOMElement e = x.documentElement();
if (e.selectSingleNode(L"home"))
{
KXMLDOMElement e1 = e.selectSingleNode(L"home");
if (e1.selectSingleNode(L"@" + att))
return e1.selectSingleNode(L"@" + att).text();
}
return L"";
}
int setHomeConfig(xstring att, xstring value)
{
xml x ;
x.load(L"cache\\config.xml");
if ((xstring)x.xml() == L"")
{
//alert(L"");
x.loadXML(L"");
}
else
{
KXMLDOMElement e = x.documentElement();
if (e)
{
if (e.selectSingleNode(L"home"))
{
KXMLDOMElement e1 = e.selectSingleNode(L"home");
e1.setAttribute(att, value);
}
else
{
KXMLDOMElement e2 = x.createElement(L"home");
e2.setAttribute(att, value);
e.appendChild(e2);
}
}
//alert(e.xml);
}
//alert(x.GetXml());
xutil::SaveToFile(L"cache\\config.xml", x.xml(), L"", L"", (LPTSTR)L"");
return 1;
}
int OnDWClick(TEvent* evt, int p)
{
alert(L"clicked");
return 1;
}
int OnMenu(HWND hMenu)
{
if (!hMenu)
{
HWND hw = m_hMenu;
bool bwin = hw ? IsWindow(hw):false;
if (!bwin)
{
xaserverarg* arg = new xaserverarg();
HWND hWnd = GetHWND();
arg->SetParam(L"hwnd", (LPARAM)hWnd);
arg->SetParam(L"cbx_menu", (LPARAM)cbx_menu.getNativePointer());
arg->SetParam(L"cbx_tab", (LPARAM)cbx_tab.getNativePointer());
arg->SetParam(L"cbx_panelNo", (LPARAM)cbx_panelNo.getNativePointer());
arg->SetParam(L"cbx_panelName", (LPARAM)cbx_panelName.getNativePointer());
xwin* pwin = OpenWindow(L"dev:xpage[vindexmenu.vx]", (LPARAM)arg);
m_hMenu = pwin->GetHWND();
hw = m_hMenu;
//return 1;
}
HWND HWND_TOPMOST = (HWND)-1;
HWND HWND_NOTOPMOST = (HWND)-2;
int SWP_NOSIZE = 0x0001;
int SWP_NOMOVE = 0x0002;
int SWP_SHOWWINDOW = 0x0040;
SetWindowPos(hw, HWND_TOPMOST, -1000, -1000, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
}
else
{
m_hMenu = hMenu;
}
xrect xr;
xcontrol xc = GetControl(L"xmMenu");
GetWindowRect(xc.GetHWND(), xr);
int l = xr.left;
int b = xr.bottom;
xrect r;
xc = GetControl(L"split");
GetWindowRect(xc.GetHWND(), r);
int t2 = r.top;
int b2 = r.bottom;
MoveWindow(m_hMenu, l - 7, b, 220, b2 - t2, true);
return 1;
}
int OnMenu1(xstring hMenu)
{
if (!hMenu)
{
HWND hw = m_hMenu;
bool f = IsWindow(hw);
if (hw == 0 && f <= 0)
{
xaserverarg* arg = new xaserverarg();
HWND hWnd = GetHWND();
arg->SetParam(L"hwnd", (LPARAM)hWnd);
arg->SetParam(L"cbx_menu", (LPARAM)cbx_menu.getNativePointer());
arg->SetParam(L"cbx_tab", (LPARAM)cbx_tab.getNativePointer());
arg->SetParam(L"panelNo", (LPARAM)cbx_panelNo.getNativePointer());
arg->SetParam(L"panelName", (LPARAM)cbx_panelName.getNativePointer());
xwin* pwin=OpenWindow(L"dev:xpage[vindexmenu.vx]", (LPARAM)arg);
m_hMenu = pwin->GetHWND();
hw = m_hMenu;
//return 1;
}
HWND HWND_TOPMOST = (HWND) - 1;
HWND HWND_NOTOPMOST =(HWND)-2;
int SWP_NOSIZE = 0x0001;
int SWP_NOMOVE = 0x0002;
int SWP_SHOWWINDOW = 0x0040;
SetWindowPos(hw, HWND_TOPMOST, -1000, -1000, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
}
else
{
m_hMenu = (HWND)hMenu.toInt64();
}
xrect xr;
xcontrol xc = GetControl(L"xmMenu");
GetWindowRect(xc.GetHWND(), xr);
int l = xr.left;
int b = xr.bottom;
xrect r;
xc = GetControl(L"split");
GetWindowRect(xc.GetHWND(), r);
int t2 = r.top;
int b2 = r.bottom;
MoveWindow(m_hMenu, l - 7, b, 220, b2 - t2, true);
return 1;
}
int OnMenuAgent(xstring f)
{
//int LayerFlow_None = 0x00000001;
//int LayerFlow_UnLayer = 0x00000100;
//int LayerFlow_NS = 0x00000004;
//int LayerFlow_Control = 0x00000010;
int GWL_STYLE = -16;
int WS_POPUP = 0x80000000;
int WS_CHILD = 0x40000000;
int WS_MAXIMIZE = 0x00010000;
int SW_MAXIMIZE = 3;
HWND HWND_TOPMOST = (HWND) - 1;
HWND HWND_NOTOPMOST = (HWND) - 2;
int SWP_NOSIZE = 0x0001;
int SWP_NOMOVE = 0x0002;
int SWP_SHOWWINDOW = 0x0040;
SetWindowPos(m_nHwnd, HWND_TOPMOST, -1000, -1000, 0, 0, SWP_NOSIZE | SWP_SHOWWINDOW);
int style = GetWindowLong(m_nHwnd, GWL_STYLE);
xnode anode = GetAgentNode(L"menuAgent");
xnode bnode = GetAgentNode(L"xmMenu");
int isshow = menuShow;
if (isshow == -1)
{
anode.SetLayerFlow(LayerFlow_NS | LayerFlow_Control);
bnode.SetLayerFlow(LayerFlow_None | LayerFlow_UnLayer);
style = style - WS_POPUP;
style = style + WS_CHILD;
SetWindowLong(m_nHwnd, GWL_STYLE, style);
m_npHwnd = GetParent(m_nHwnd);
xcontrol xc = GetControl(L"menuAgent");
SetParent(m_nHwnd, xc.GetHWND());
ShowWindow(m_nHwnd, SW_MAXIMIZE);
///AttachEvent(L"WM_SIZE",OnMenuSizeChanged);
//AttachEvent(L"WM_PAINT",OnMenuSizeChanged);
//AttachEvent(L"WM_WINDOWPOSCHANGED",OnMenuSizeChanged);
}
else
{
bnode.SetLayerFlow(LayerFlow_NS | LayerFlow_Control);
anode.SetLayerFlow(LayerFlow_None | LayerFlow_UnLayer);
style = style + WS_POPUP;
style = style - WS_CHILD;
SetWindowLong(m_nHwnd, GWL_STYLE, style);
SetParent(m_nHwnd, m_npHwnd);
OnMenu(NULL);
}
menuShow = -1 - isshow;
cbx_menu.SetCurSel(menuShow);
if (f != L"")
setHomeConfig(L"menuposition", xstring(menuShow));
return 1;
}
int ResetMenu()
{
::DestroyWindow(m_hMenu);
m_hMenu = 0;
return 1;
//if(m_nHwnd) xwin::CloseWindow(m_nHwnd);
m_nHwnd = 0;
OnMenu(NULL);
OnMenuAgent(L"");
#if 0
menuShow = -1;
xstring f = getHomeConfig(L"menuposition");
if (f == L"0")
{
OnMenu(NULL);
OnMenuAgent(L"");
}
xaserverarg arg;
HWND h = GetHWND();
//arg.AddArg(L"hwnd", xstring(h));
arg.SetParam(L"hwnd", h);
OpenWindow(L"dev:xpage[vindexforold.vx]", arg);
#endif
return 1;
}
int ReSetInfo()
{
cbx_menu.ResetContent();
cbx_tab.ResetContent();
cbx_panelNo.ResetContent();
cbx_panelName.ResetContent();
int hItem = mainsheet.GetSheetCount();
while (hItem > 1)
{
//mainsheet.DeleteSheet(hItem - 1);
SendMessage(GetHWND(), 0x401, (WPARAM)L"xmSheetClose", 0);
hItem = mainsheet.GetSheetCount();
}
xml x;
xaserverarg arg;
arg.AddArg(L"Assignment", m_Assignment);
//alert(arg.GetString());
if (xaserver::ExecXQuery(GetServerUrl(), L"[GetSysInfo.xq]", arg.GetString(), x) != 1)
{
//trace(x.GetXml());
return -1;
}
if ((xstring)x.xml() == L"") return -1;
KXMLDOMElement e = x.documentElement();
if (/*m_Assignment == L"" &&*/ e.selectSingleNode(L"AssignmentID"))
{
xstring sInfoEx = e.selectSingleNode(L"AssignmentID").text();
m_Assignment = sInfoEx;
}
if (m_Assignment == L"")
alert(L"获取用户数据失败,请重新登录!");
else
xaserver::SetUID((LPWSTR)m_Assignment.c_str(true));
xcombobox::AddItem(cbx_menu.GetHWND(), L"开始");
xcombobox::AddItem(cbx_tab.GetHWND(), L"-1");
//OpenWindow(L"dev:xpage[vstart.vx]");
xcontrol xc = GetControl(L"statusbar0");
xc.SetText(L"正在初始化系统,请稍候....");
HCURSOR hCursor = xutil::SetCursorWait();
if (e.selectSingleNode(L"name"))
{
xstring sInfo = e.selectSingleNode(L"name").text();
xc.SetText(sInfo + L" 系统版本:" + xaserver::GetVersion());
}
ResetMenu();
xutil::RestoreCursor(hCursor);
return 1;
}
int OnChangeLogin()
{
xml x;
xaserverarg arg ;
arg.AddArg(L"userno", xaserver::GetUserNo());
if (xaserver::ExecXQuery(GetServerUrl(), L"[GetSysAssignment.xq]", arg.GetString(), x) != 1)
{
trace(x.xml());
return -1;
}
if ((xstring)x.xml() == L"") return -1;
KXMLDOMElement e = x.documentElement();
KXMLDOMNodeList li = e.selectNodes(L"item");
int i;
int s = li.length();
xstring sInfo = m_Assignment;
if (s > 0)
{
HMENU m = CreatePopupMenu();
int MF_STRING = 0x00000000;
int MF_DISABLED = 0x00000002;
int TPM_RIGHTBUTTON = 0x0002;
int TPM_RETURNCMD = 0x0100;
int MF_CHECKED = 0x8;
for (i = 0; i < s; i++)
{
KXMLDOMElement xitem = li.item(i);
xstring id = xitem.selectSingleNode(L"AssignmentID").text();
xstring name = xitem.selectSingleNode(L"PositionName").text();
if (sInfo == id)
AppendMenu(m, MF_STRING | MF_CHECKED, i + 1, name);
else
AppendMenu(m, MF_STRING, i + 1, name);
}
RECT xr;
xpoint pt;
GetCursorPos(pt);
int res = TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), &xr);
if (res == 0) return 0;
KXMLDOMElement ele = li.item(res - 1);
xstring sInfoEx = ele.selectSingleNode(L"AssignmentID").text();
if (m_Assignment == sInfoEx) return 0;
m_Assignment = sInfoEx;
ReSetInfo();
/*if(m_nHwnd)
{
win32::CloseWindow(m_nHwnd);
}*/
}
return 1;
}
int OnAllCaption()
{
HMENU m = CreatePopupMenu();
int MF_STRING = 0x00000000;
int MF_DISABLED = 0x00000002;
int TPM_RIGHTBUTTON = 0x0002;
int TPM_RETURNCMD = 0x0100;
int MF_CHECKED = 0x8;
int k = mainsheet.GetSheetIndex();
//int cs = xcombobox::GetCount(cbx_menu.GetId());
int cs = mainsheet.GetSheetCount();
int i;
for (i = 0; i < cs; i++) {
//xstring str = xcombobox::GetLBText(cbx_menu.GetId(), i);
xstring str = mainsheet.GetSheetText(i);
if (i == k)
AppendMenu(m, MF_STRING | MF_CHECKED, i + 1, str);
else
AppendMenu(m, MF_STRING, i + 1, str);
}
RECT xr;
xpoint pt;
GetCursorPos(pt);
int res = TrackPopupMenu(m, TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, GetHWND(), &xr);
if (res == 0) return 0;
int nSheet = mainsheet.GetSheetIndex();
if (nSheet == (res - 1)) return 0;
mainsheet.SelectSheet(res - 1);
return 0;
}
int OnChangeSheet(xstring sheet)
{
if (sheet == L"") return 0;
int nIndex = sheet.toInt();
int curIndex = mainsheet.GetSheetIndex();
if (nIndex == curIndex)
return 0;
mainsheet.SelectSheet(nIndex);
return 1;
}
int OnMenuSizeChanged(TEvent* evt, int p)
{
/*xrect xr33;
xcontrol xc = GetControl(L"menuAgent");
xwin::GetWindowRect(xc.GetId(), xr33);
int l = xr33.left;
int b = xr33.right;
int xx = b - l;*/
//alert(xx.toString());
int isshow = menuShow;
if (isshow == 0)
{
int SW_MAXIMIZE = 3;
xcontrol xc = GetControl(L"menuAgent");
SetParent(m_nHwnd, xc.GetHWND());
ShowWindow(m_nHwnd, SW_MAXIMIZE);
}
return 1;
}
#if 0
int OnOpen(xstring pa)
{
//xwin::SendMessage(m_npHwnd2, 0x401, pa, 0);
//return 1;
/*if(xaserver::GetUserNo() == L"admin")
{
OpenWindow(L"dev:xpage[vstart.vx]");
return 1;
}*/
xaserverarg arg ;
xstring isnew = arg.GetArgString(L"_isNewModule");
xstring vx = arg.GetArgString(L"_ModuelPage");
if (isnew == L"Y")
{
if (vx.find(L".vx", 0) > 0 || vx.find(L".xpage", 0) > 0)
OpenWindow(L"dev:xpage[" + vx + L"]", arg);
else
openUrl(vx, p);
return 1;
}
//OpenWindow(L"dev:xpage[vindexforold.vx]", p);
return 1;
}
int OnOpenForOld(xstring pa)
{
m_npHwnd2 = pa.toInt();
int GWL_STYLE = -16;
int WS_POPUP = 0x80000000;
int WS_CHILD = 0x40000000;
int SW_MAXIMIZE = 3;
int style = GetWindowLong(m_npHwnd2, GWL_STYLE);
style = style - WS_POPUP;
style = style + WS_CHILD;
SetWindowLong(m_npHwnd2, GWL_STYLE, style);
xcontrol xc = GetControl(L"openforold");
SetParent(m_npHwnd2, xc.GetHWND());
ShowWindow(m_npHwnd2, SW_MAXIMIZE);
return 1;
}
#endif
int OnHelp()
{
OpenWindow(L"dev:xpage[trade.help3.vx]");
return 1;
}
int OnCmdDispatch(xstring comdid)
{
if (comdid == L"xmMenu") OnMenu(0);
//else if (comdid.find(L"menuid:", 0) >= 0)
// return OnMenu((HWND)comdid.mid(comdid.find(L":", 0) + 1, comdid.length()).toInt());
if (comdid ==L"xmAssignment") OnChangeLogin();
else if (comdid == L"xmAllCaption") OnAllCaption();
else if (comdid == L"xmMenu") OnMenu(0);
else if (comdid == L"xmHelp") return OnHelp();
//else if (comdid.find(L"menuid:", 0) >= 0) OnMenu(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
else if (comdid.find(L"menuAgent:", 0) >= 0) OnMenuAgent(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
else if (comdid.find(L"changesheet:", 0) >= 0) OnChangeSheet(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
//else if (comdid.find(L"openforoldid:", 0) >= 0) OnOpenForOld(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
//else if (comdid.find(L"open:", 0) >= 0) OnOpen(comdid.mid(comdid.find(L":", 0) + 1, comdid.length()));
else if (comdid == L"xmRefreshTask")
{
SendMessage(m_startwin, 0x401, (WPARAM)comdid.c_str(), 0);
return 1;
}
return 0;
}
int OnXCommand(TEvent* evt,int p)
{
return OnCmdDispatch(evt->xcommand.pStrID);
}
int OnAttachListon()
{
AttachEvent(L"WM_XCOMMAND",(FEvent)&vindexform::OnXCommand,this);
//AttachEvent(L"mdilayer", L"LYSN_SELECTEDSHEET", (FEvent)&vindexform::OnSheetChanged);
////AttachEvent(L"mdilayer", L"LYSN_CLOSESHEET",OnCloseSheet);
return 1;
}
int OnSheetChanged(TEvent* evt, int p)
{
LYSNMHDR& nmtv = *(LYSNMHDR*)evt->notify.pnmh;
int sheet = nmtv.nSheet;
int s = mainsheet.GetSheetCount();
//trace(s);
int cs = xcombobox::GetCount(cbx_menu.GetHWND());
int cursheet = m_cursheet;
if (s > cs) {
xcombobox::AddItem(cbx_menu.GetHWND(), L"自由窗口");
xcombobox::AddItem(cbx_tab.GetHWND(), xstring(cursheet));
}
if (s < cs) {
xcombobox::DeleteItem(cbx_menu.GetHWND(), cursheet);
int i = 0;
xstring value = xcombobox::GetLBText(cbx_tab.GetHWND(), cursheet);
for (i = 0; i < cs; i++)
{
xstring tabId = xcombobox::GetLBText(cbx_tab.GetHWND(), i);
if (tabId == xstring(cursheet))
{
xcombobox::DeleteItem(cbx_tab.GetHWND(), i);
xcombobox::InsertString(cbx_tab.GetHWND(), i, value);
}
}
xcombobox::DeleteItem(cbx_tab.GetHWND(), cursheet);
if (sheet != value.toInt())
mainsheet.SelectSheet(value.toInt());
}
if (cursheet != mainsheet.GetSheetIndex())
{
HWND hPicture = FindWindowEx(0, 0, L"XFrameWndClass", L"__ProductPicture");
if (hPicture)
{
int WM_CLOSE = 0x0010;
PostMessage(hPicture, WM_CLOSE, 0, 0);
}
}
m_cursheet = mainsheet.GetSheetIndex();
return 1;
}
int OnCloseSheet(TEvent* evt, int p)
{
LYSNMHDR& nmtv = *(LYSNMHDR*)evt->notify.pnmh;
int sheet = nmtv.nSheet;
//alert(L"xxxx");
return 1;
}
int SetUserID()
{
Hxsoft::XFrame::KXMLDOMDocument x;
xaserverarg arg;
arg.AddArg(L"Assignment", m_Assignment);
if(xaserver::ExecXQuery(GetServerUrl(),L"[GetSysInfo.xq]",arg.GetString(),x)!=1)
{
trace(x.xml());
return -1;
}
if((xstring)x.xml() == L"") return -1;
Hxsoft::XFrame::KXMLDOMElement e = x.documentElement();
if((xstring)m_Assignment == L"" && e.selectSingleNode(L"AssignmentID"))
{
xstring sInfoEx = e.selectSingleNode(L"AssignmentID").text();
m_Assignment = sInfoEx;
}
if((xstring)m_Assignment == L"")
alert(L"获取用户数据失败,请重新登录!");
else
xaserver::SetUID((LPWSTR)m_Assignment.c_str(true));
return 1;
}
int OnInitial()
{
xstring userno = xaserver::GetUserNo();
if (userno == L"admin" /*|| userno==L"00206" || userno==L"00206" || userno==L"00201" ||userno==L"00101" */)
{
xnode anode = GetAgentNode(L"dev");
int LayerFlow_WE_ = 0x00000002;
int LayerFlow_Control_ = 0x00000010;
anode.SetLayerFlow(LayerFlow_WE | LayerFlow_Control);
}
m_Assignment = L"";
return 1;
}
int Initial()
{
SetUserID();
xstring userno = xaserver::GetUserNo();
if (userno == L"admin")
{
xnode anode = GetAgentNode(L"dev");
int LayerFlow_WE_ = 0x00000002;
int LayerFlow_Control_ = 0x00000010;
anode.SetLayerFlow(LayerFlow_WE_ | LayerFlow_Control_);
}
m_Assignment = L"";
return 1;
}
int onload()
{
m_hMenu = 0;
m_Assignment = L"";
mainsheet = GetControl(L"mdilayer");
cbx_menu = GetControl(L"memuId");
cbx_tab = GetControl(L"tabNo");
cbx_panelNo = GetControl(L"panelNo");
cbx_panelName = GetControl(L"panelName");
Initial();
OnAttachListon();
return 1;
}
int onloaded()
{
ReSetInfo();
//OpenWindow("dev:xpage[start.vframe.vbusiness.vx]");
//xwin* lw_face = OpenWindow(L"dev:xpage[start.vframe.vbusiness.vx]");
xwin* lw_face = OpenWindow(L"dev:xpage[Business5.vx]");
if(lw_face)m_startwin = lw_face->GetHWND();
cbx_panelName.SetCurSel( -1);
ResetMenu();
return 1;
}
};