forked from duilib/duilib
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Duilib官方迁移到Gitbub,没有任何新增功能与修改,仅为方便需要迁出代码的人
Duilib暂不会有新特性增加,但已经准备一段时间修改代码目录管理结构,重构Demo 闲置半年多未更新一方面忙于生计,也源于提高内功 感谢Duilib原作者同意迁移SVN官方地址,便于社区维护 最后特别感谢【Duilib官方交流群3】活跃开发者们的帮助指导,为Duilib的重构提供了很多帮助,也为我个人成长提供指导
- Loading branch information
1 parent
2c97c05
commit 467cab8
Showing
516 changed files
with
81,218 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,263 @@ | ||
#include "stdafx.h" | ||
#include <exdisp.h> | ||
#include <comdef.h> | ||
#include "ControlEx.h" | ||
|
||
class C360SafeFrameWnd : public CWindowWnd, public INotifyUI | ||
{ | ||
public: | ||
C360SafeFrameWnd() { }; | ||
LPCTSTR GetWindowClassName() const { return _T("UIMainFrame"); }; | ||
UINT GetClassStyle() const { return CS_DBLCLKS; }; | ||
void OnFinalMessage(HWND /*hWnd*/) { delete this; }; | ||
|
||
void Init() { | ||
m_pCloseBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("closebtn"))); | ||
m_pMaxBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("maxbtn"))); | ||
m_pRestoreBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("restorebtn"))); | ||
m_pMinBtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("minbtn"))); | ||
} | ||
|
||
void OnPrepare() { | ||
} | ||
|
||
void Notify(TNotifyUI& msg) | ||
{ | ||
if( msg.sType == _T("windowinit") ) OnPrepare(); | ||
else if( msg.sType == _T("click") ) { | ||
if( msg.pSender == m_pCloseBtn ) { | ||
PostQuitMessage(0); | ||
return; | ||
} | ||
else if( msg.pSender == m_pMinBtn ) { | ||
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE, 0); return; } | ||
else if( msg.pSender == m_pMaxBtn ) { | ||
SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); return; } | ||
else if( msg.pSender == m_pRestoreBtn ) { | ||
SendMessage(WM_SYSCOMMAND, SC_RESTORE, 0); return; } | ||
} | ||
else if(msg.sType==_T("selectchanged")) | ||
{ | ||
CDuiString name = msg.pSender->GetName(); | ||
CTabLayoutUI* pControl = static_cast<CTabLayoutUI*>(m_pm.FindControl(_T("switch"))); | ||
if(name==_T("examine")) | ||
pControl->SelectItem(0); | ||
else if(name==_T("trojan")) | ||
pControl->SelectItem(1); | ||
else if(name==_T("plugins")) | ||
pControl->SelectItem(2); | ||
else if(name==_T("vulnerability")) | ||
pControl->SelectItem(3); | ||
else if(name==_T("rubbish")) | ||
pControl->SelectItem(4); | ||
else if(name==_T("cleanup")) | ||
pControl->SelectItem(5); | ||
else if(name==_T("fix")) | ||
pControl->SelectItem(6); | ||
else if(name==_T("tool")) | ||
pControl->SelectItem(7); | ||
} | ||
} | ||
|
||
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
LONG styleValue = ::GetWindowLong(*this, GWL_STYLE); | ||
styleValue &= ~WS_CAPTION; | ||
::SetWindowLong(*this, GWL_STYLE, styleValue | WS_CLIPSIBLINGS | WS_CLIPCHILDREN); | ||
|
||
m_pm.Init(m_hWnd); | ||
CDialogBuilder builder; | ||
CDialogBuilderCallbackEx cb; | ||
CControlUI* pRoot = builder.Create(_T("skin.xml"), (UINT)0, &cb, &m_pm); | ||
ASSERT(pRoot && "Failed to parse XML"); | ||
m_pm.AttachDialog(pRoot); | ||
m_pm.AddNotifier(this); | ||
|
||
Init(); | ||
return 0; | ||
} | ||
|
||
LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
bHandled = FALSE; | ||
return 0; | ||
} | ||
|
||
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
::PostQuitMessage(0L); | ||
|
||
bHandled = FALSE; | ||
return 0; | ||
} | ||
|
||
LRESULT OnNcActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
if( ::IsIconic(*this) ) bHandled = FALSE; | ||
return (wParam == 0) ? TRUE : FALSE; | ||
} | ||
|
||
LRESULT OnNcCalcSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
return 0; | ||
} | ||
|
||
LRESULT OnNcPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
return 0; | ||
} | ||
|
||
LRESULT OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
POINT pt; pt.x = GET_X_LPARAM(lParam); pt.y = GET_Y_LPARAM(lParam); | ||
::ScreenToClient(*this, &pt); | ||
|
||
RECT rcClient; | ||
::GetClientRect(*this, &rcClient); | ||
|
||
// if( !::IsZoomed(*this) ) { | ||
// RECT rcSizeBox = m_pm.GetSizeBox(); | ||
// if( pt.y < rcClient.top + rcSizeBox.top ) { | ||
// if( pt.x < rcClient.left + rcSizeBox.left ) return HTTOPLEFT; | ||
// if( pt.x > rcClient.right - rcSizeBox.right ) return HTTOPRIGHT; | ||
// return HTTOP; | ||
// } | ||
// else if( pt.y > rcClient.bottom - rcSizeBox.bottom ) { | ||
// if( pt.x < rcClient.left + rcSizeBox.left ) return HTBOTTOMLEFT; | ||
// if( pt.x > rcClient.right - rcSizeBox.right ) return HTBOTTOMRIGHT; | ||
// return HTBOTTOM; | ||
// } | ||
// if( pt.x < rcClient.left + rcSizeBox.left ) return HTLEFT; | ||
// if( pt.x > rcClient.right - rcSizeBox.right ) return HTRIGHT; | ||
// } | ||
|
||
RECT rcCaption = m_pm.GetCaptionRect(); | ||
if( pt.x >= rcClient.left + rcCaption.left && pt.x < rcClient.right - rcCaption.right \ | ||
&& pt.y >= rcCaption.top && pt.y < rcCaption.bottom ) { | ||
CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(pt)); | ||
if( pControl && _tcscmp(pControl->GetClass(), _T("ButtonUI")) != 0 && | ||
_tcscmp(pControl->GetClass(), _T("OptionUI")) != 0 && | ||
_tcscmp(pControl->GetClass(), _T("TextUI")) != 0 ) | ||
return HTCAPTION; | ||
} | ||
|
||
return HTCLIENT; | ||
} | ||
|
||
LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
SIZE szRoundCorner = m_pm.GetRoundCorner(); | ||
if( !::IsIconic(*this) && (szRoundCorner.cx != 0 || szRoundCorner.cy != 0) ) { | ||
CDuiRect rcWnd; | ||
::GetWindowRect(*this, &rcWnd); | ||
rcWnd.Offset(-rcWnd.left, -rcWnd.top); | ||
rcWnd.right++; rcWnd.bottom++; | ||
HRGN hRgn = ::CreateRoundRectRgn(rcWnd.left, rcWnd.top, rcWnd.right, rcWnd.bottom, szRoundCorner.cx, szRoundCorner.cy); | ||
::SetWindowRgn(*this, hRgn, TRUE); | ||
::DeleteObject(hRgn); | ||
} | ||
|
||
bHandled = FALSE; | ||
return 0; | ||
} | ||
|
||
LRESULT OnGetMinMaxInfo(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
MONITORINFO oMonitor = {}; | ||
oMonitor.cbSize = sizeof(oMonitor); | ||
::GetMonitorInfo(::MonitorFromWindow(*this, MONITOR_DEFAULTTOPRIMARY), &oMonitor); | ||
CDuiRect rcWork = oMonitor.rcWork; | ||
rcWork.Offset(-oMonitor.rcMonitor.left, -oMonitor.rcMonitor.top); | ||
|
||
LPMINMAXINFO lpMMI = (LPMINMAXINFO) lParam; | ||
lpMMI->ptMaxPosition.x = rcWork.left; | ||
lpMMI->ptMaxPosition.y = rcWork.top; | ||
lpMMI->ptMaxSize.x = rcWork.right; | ||
lpMMI->ptMaxSize.y = rcWork.bottom; | ||
|
||
bHandled = FALSE; | ||
return 0; | ||
} | ||
|
||
LRESULT OnSysCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) | ||
{ | ||
// 有时会在收到WM_NCDESTROY后收到wParam为SC_CLOSE的WM_SYSCOMMAND | ||
if( wParam == SC_CLOSE ) { | ||
::PostQuitMessage(0L); | ||
bHandled = TRUE; | ||
return 0; | ||
} | ||
BOOL bZoomed = ::IsZoomed(*this); | ||
LRESULT lRes = CWindowWnd::HandleMessage(uMsg, wParam, lParam); | ||
if( ::IsZoomed(*this) != bZoomed ) { | ||
if( !bZoomed ) { | ||
CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("maxbtn"))); | ||
if( pControl ) pControl->SetVisible(false); | ||
pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("restorebtn"))); | ||
if( pControl ) pControl->SetVisible(true); | ||
} | ||
else { | ||
CControlUI* pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("maxbtn"))); | ||
if( pControl ) pControl->SetVisible(true); | ||
pControl = static_cast<CControlUI*>(m_pm.FindControl(_T("restorebtn"))); | ||
if( pControl ) pControl->SetVisible(false); | ||
} | ||
} | ||
return lRes; | ||
} | ||
|
||
LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) | ||
{ | ||
LRESULT lRes = 0; | ||
BOOL bHandled = TRUE; | ||
switch( uMsg ) { | ||
case WM_CREATE: lRes = OnCreate(uMsg, wParam, lParam, bHandled); break; | ||
case WM_CLOSE: lRes = OnClose(uMsg, wParam, lParam, bHandled); break; | ||
case WM_DESTROY: lRes = OnDestroy(uMsg, wParam, lParam, bHandled); break; | ||
case WM_NCACTIVATE: lRes = OnNcActivate(uMsg, wParam, lParam, bHandled); break; | ||
case WM_NCCALCSIZE: lRes = OnNcCalcSize(uMsg, wParam, lParam, bHandled); break; | ||
case WM_NCPAINT: lRes = OnNcPaint(uMsg, wParam, lParam, bHandled); break; | ||
case WM_NCHITTEST: lRes = OnNcHitTest(uMsg, wParam, lParam, bHandled); break; | ||
case WM_SIZE: lRes = OnSize(uMsg, wParam, lParam, bHandled); break; | ||
case WM_GETMINMAXINFO: lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break; | ||
case WM_SYSCOMMAND: lRes = OnSysCommand(uMsg, wParam, lParam, bHandled); break; | ||
default: | ||
bHandled = FALSE; | ||
} | ||
if( bHandled ) return lRes; | ||
if( m_pm.MessageHandler(uMsg, wParam, lParam, lRes) ) return lRes; | ||
return CWindowWnd::HandleMessage(uMsg, wParam, lParam); | ||
} | ||
|
||
public: | ||
CPaintManagerUI m_pm; | ||
|
||
private: | ||
CButtonUI* m_pCloseBtn; | ||
CButtonUI* m_pMaxBtn; | ||
CButtonUI* m_pRestoreBtn; | ||
CButtonUI* m_pMinBtn; | ||
//... | ||
}; | ||
|
||
|
||
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow) | ||
{ | ||
CPaintManagerUI::SetInstance(hInstance); | ||
CPaintManagerUI::SetResourcePath(CPaintManagerUI::GetInstancePath() + _T("skin")); | ||
CPaintManagerUI::SetResourceZip(_T("360SafeRes.zip")); | ||
|
||
HRESULT Hr = ::CoInitialize(NULL); | ||
if( FAILED(Hr) ) return 0; | ||
|
||
C360SafeFrameWnd* pFrame = new C360SafeFrameWnd(); | ||
if( pFrame == NULL ) return 0; | ||
pFrame->Create(NULL, _T("360安全卫士"), UI_WNDSTYLE_FRAME, 0L, 0, 0, 800, 572); | ||
pFrame->CenterWindow(); | ||
::ShowWindow(*pFrame, SW_SHOW); | ||
|
||
CPaintManagerUI::MessageLoop(); | ||
|
||
::CoUninitialize(); | ||
return 0; | ||
} |
Oops, something went wrong.