⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tipwnd.cpp

📁 QQ2009组件管理源码
💻 CPP
字号:
#include "stdafx.h"
#include "setwnd.h"
#include "PluginMgr.h"
#include "bgwnd.h"
#include "basewnd.h"

#define TIMERID_AUTOCLOSE	312
#define TIMERID_AUTOCLOSEDELAY	313

#define TIMER_DELAY			4000

#define MAX_DELAYCOUNT		25
#define TIMER_FREQ			200

class CTipWnd : public CStandardPageWnd
{
public:
	LPCTSTR GetWindowClassName() const;
	void OnFinalMessage(HWND hWnd);
	LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
	
	// INotifyUI
	virtual void Notify(TNotifyUI& msg);
	
	virtual CControlUI* OnCreateCtrlTree();
};

static HWND hDlgSet=NULL;
static int nDelaycount=0;
INT_PTR ShowTipWnd(HWND hWndParent)
{
	_TRACE_FUNCTION_;
	if (hDlgSet && IsWindow(hDlgSet)) return 0;
	
	CPaintManagerUI::SetResourceInstance(g_hInstance);
	CTipWnd* pWindow = new CTipWnd;
	if( pWindow != NULL ) 
	{
		pWindow->Create(hWndParent, _T(""), UI_WNDSTYLE_DIALOG & (~(WS_VISIBLE | WS_BORDER | WS_SYSMENU | WS_CAPTION | WS_DLGFRAME)), WS_EX_WINDOWEDGE,CW_USEDEFAULT,CW_USEDEFAULT,600,480);
		hDlgSet=pWindow->GetHWND();
		RECT rcArea,rcDlg;
		SystemParametersInfo(SPI_GETWORKAREA, 0, &rcArea, 0);    
		::GetWindowRect(hDlgSet, &rcDlg);
		rcArea.left=rcArea.right-(rcDlg.right-rcDlg.left)-1;
		rcArea.top=rcArea.bottom-(rcDlg.bottom-rcDlg.top)-1;
		SetWindowPos(hDlgSet, NULL, rcArea.left, rcArea.top,0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOZORDER);
		pWindow->ShowWindow();
		SetWindowPos(hDlgSet, HWND_TOPMOST, 0,0,0, 0, SWP_NOSIZE | SWP_NOACTIVATE | SWP_NOMOVE);
	}
	return 0;
}

void CloseTipWnd()
{
	_TRACE_FUNCTION_;
	if (hDlgSet)
	{
		SendMessage(hDlgSet,WM_CLOSE,0,0);
		hDlgSet=NULL;
	}
}

void CTipWnd::OnFinalMessage(HWND hWnd) 
{
	CStandardPageWnd::OnFinalMessage(hWnd);
	hDlgSet=NULL;
	delete this; 
}

LPCTSTR CTipWnd::GetWindowClassName() const
{
	return _T("TipWnd");
};

LRESULT CTipWnd::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if (uMsg==WM_TIMER)
	{
		if (wParam==TIMERID_AUTOCLOSEDELAY)
		{
			KillTimer(m_hWnd,TIMERID_AUTOCLOSEDELAY);
			SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE) | WS_EX_LAYERED);
			nDelaycount=MAX_DELAYCOUNT;
			SetTimer(m_hWnd,TIMERID_AUTOCLOSE,TIMER_FREQ,NULL);
			return 0;
		}
		if (wParam==TIMERID_AUTOCLOSE)
		{
			POINT pt;
			RECT rcDlg;
			GetCursorPos(&pt);
			GetWindowRect(m_hWnd,&rcDlg);
			if (PtInRect(&rcDlg,pt))
			{
				SetLayeredWindowAttributes(m_hWnd,0,255,LWA_ALPHA);
				KillTimer(m_hWnd,TIMERID_AUTOCLOSE);
				SetTimer(m_hWnd,TIMERID_AUTOCLOSEDELAY,TIMER_DELAY,NULL);
				return 0;
			}
			nDelaycount--;
			if (nDelaycount==0)
			{
				KillTimer(m_hWnd,TIMERID_AUTOCLOSE);
				PostMessage(WM_CLOSE,0,0);
			}
			else
			{
				SetLayeredWindowAttributes(m_hWnd,0,255-(MAX_DELAYCOUNT-nDelaycount)*10,LWA_ALPHA);
			}
			return 0;
		}
	}
	if (uMsg==WM_DESTROY)
	{
		KillTimer(m_hWnd,TIMERID_AUTOCLOSEDELAY);
		KillTimer(m_hWnd,TIMERID_AUTOCLOSE);
	}
	return CStandardPageWnd::HandleMessage(uMsg, wParam, lParam);
}

CControlUI* CTipWnd::OnCreateCtrlTree()
{
	CDialogBuilder builder;
	return builder.CreateFromResource(MAKEINTRESOURCE(IDR_XML3),_T("XML"),this,m_hWnd);
}

void CTipWnd::Notify(TNotifyUI& msg)
{
	if( msg.sType == _T("windowinit") )
	{
		TCHAR szTmp[1024];
		CTextPanelUI* pTxt = static_cast<CTextPanelUI*>(m_pm.FindControl(_T("lblcaption")));
		if (pTxt)
		{
			wsprintf(szTmp,_T("<I %d>%s"),IDI_ICON1,_T("组件管理"));
			pTxt->SetText(szTmp);
		}

		pTxt = static_cast<CTextPanelUI*>(m_pm.FindControl(_T("lbltxt")));
		if (pTxt)
		{
			pTxt->SetText(_T("  在这里,您可以定制组件选项,调用多项强大的功能,让操作更自由,交流更轻松。"));
		}
		
		pTxt = static_cast<CTextPanelUI*>(m_pm.FindControl(_T("lblclose")));
		if (pTxt)
		{
			pTxt->SetText(_T("<a>关闭</a>"));
		}
		
		pTxt = static_cast<CTextPanelUI*>(m_pm.FindControl(_T("lblurl")));
		if (pTxt)
		{
			pTxt->SetText(_T("<a>查看新版</a>"));
		}

		SetTimer(m_hWnd,TIMERID_AUTOCLOSEDELAY,TIMER_DELAY,NULL);
		return;
	}
	if ( msg.sType == _T("link"))
	{
		if (msg.pSender->GetName() == _T("lblclose"))
		{
			PostMessage(WM_CLOSE,0,0);
			return;
		}
		if (msg.pSender->GetName() == _T("lblurl"))
		{
			ShellExecute(m_hWnd,_T("open"),_T("http://231la.com"),NULL,NULL,SW_NORMAL);
			return;
		}
	}
	if ( msg.sType == _T("click"))
	{
		if (msg.pSender->GetName() == _T("btnview"))
		{
			ShowSetDialog();
			PostMessage(WM_CLOSE,0,0);
			return;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -