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

📄 pwnd.cpp

📁 一个更为先进的嵌入式操作系统.采用RMS线程调度算法,具有信号量等同步对象.亦包括GUI. 通过该系统您可以极大知道Windows的内部秘密.
💻 CPP
字号:
#include "gos.h"
#include "pwnd.h"


BOOL CPWnd::Create(DWORD nStyle,LPCRECT pRect,CPWnd* pParent,int nID)
{
	m_pActiveControl=NULL;
	m_pChild=NULL;
	nStyle|=WS_PARENT;
	return CWnd::Create(nStyle,pRect,pParent,nID);
}
BOOL CPWnd::Create(LPCTSTR pszText,DWORD nStyle,LPCRECT pRect,CPWnd* pParent,int nID)
{
	m_pActiveControl=NULL;
	m_pChild=NULL;
	nStyle|=WS_PARENT;
	return CWnd::Create(pszText,nStyle,pRect,pParent,nID);
}
CWnd* CPWnd::GetDlgItem(int nID)
{
	PWND pWnd,pChild=m_pChild;
	if(pChild)
	{
		pWnd=pChild;
		do
		{
			if(pWnd->m_nCtrlID==nID)
				return pWnd;
			pWnd=pWnd->m_pNext;
		}while(pWnd!=pChild);
	}
	return NULL;
}

void CPWnd::SetActiveControl(CWnd* pWnd,int nMode)
{
	PWND pAC,pChild=m_pChild;
	if(!pChild)
		return;
	pAC=m_pActiveControl;

	switch(DWORD(pWnd))
	{
	case 0:
		break;
	case PW_ACTIVECTRL:
		if(pAC)
		{
			pWnd=pAC;
			break;
		}
	case PW_FIRSTCHILD:
		pWnd=pChild;
		pChild=pChild->m_pPrev;
		while(pWnd->GetStyle()&WS_NOFOCUS)
		{
			if(pWnd==pChild)
			{
				pWnd=NULL;
				break;
			}
			pWnd=pWnd->m_pNext;
		}
		break;
	case PW_LASTCHILD:
		pWnd=pChild->m_pPrev;
		while(pWnd->GetStyle()&WS_NOFOCUS)
		{
			if(pWnd==pChild)
			{
				pWnd=NULL;
				break;
			}
			pWnd=pWnd->m_pPrev;
		}
		break;
	default:
		ASSERT(pWnd->GetParent()==this);
		break;
	}
	if(pAC==pWnd)
	{
		if(pWnd && !(pWnd->GetStyle()&WS_FOCUSED))
		{
			pWnd->AddStyle(WS_FOCUSED);
			pWnd->MsgProc(WM_SETFOCUS,nMode,0);
			if((nMode&PW_FOCUSCHAINSET) && (pWnd->GetStyle()&WS_PARENT))
				PPWND(pWnd)->SetActiveControl(HWND_ACTIVECTRL,nMode);
			MsgProc(WM_ACTIVECONTROL,WPARAM(pWnd),LPARAM(pWnd));
		}
	}
	else
	{
		if(pAC && pAC->GetStyle()&WS_FOCUSED)
		{
			if((nMode&PW_FOCUSCHAINKILL) && (pAC->GetStyle()&WS_PARENT))
				PPWND(pAC)->SetActiveControl(NULL,nMode);
			pAC->RemoveStyle(WS_FOCUSED);
			pAC->MsgProc(WM_KILLFOCUS,nMode,0);
		}
		if(pWnd)
		{
			m_pActiveControl=pWnd;
			pWnd->AddStyle(WS_FOCUSED);
			pWnd->MsgProc(WM_SETFOCUS,nMode,0);
			if((nMode&PW_FOCUSCHAINSET) && (pWnd->GetStyle()&WS_PARENT))
				PPWND(pWnd)->SetActiveControl(HWND_ACTIVECTRL,nMode);
		}
		MsgProc(WM_ACTIVECONTROL,WPARAM(pAC),LPARAM(pWnd));
	}
}

LRESULT CPWnd::MsgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch(message)
	{
	case WM_ADDCONTROL:
		OnAddControl(PWND(wParam));
		break;
	case WM_REMOVECONTROL:
		OnRemoveControl(PWND(wParam));
		break;
	case WM_DESTROY:
		OnDestroy();
		break;
	default:
		wParam=CWnd::MsgProc(message,wParam,lParam);
	}
	return wParam;
}

void CPWnd::OnAddControl(CWnd* pWnd)
{
	ASSERT(!pWnd->GetParent());
	if(m_pChild)
	{
		pWnd->m_pPrev=m_pChild->m_pPrev;
		pWnd->m_pNext=m_pChild;
		pWnd->m_pPrev->m_pNext=pWnd;
		pWnd->m_pNext->m_pPrev=pWnd;
	}
	else
	{
		pWnd->m_pNext=pWnd;
		pWnd->m_pPrev=pWnd;
		m_pChild=pWnd;
	}
	pWnd->m_pParent=this;
}

void CPWnd::OnRemoveControl(CWnd* pWnd)
{
	ASSERT(pWnd->m_pParent==this);
	DEBUG_ONLY(pWnd->m_pParent=NULL);
	if(m_pNext==pWnd)
		m_pChild=NULL;
	else
	{
		pWnd->m_pNext->m_pPrev=pWnd->m_pPrev;
		pWnd->m_pPrev->m_pNext=pWnd->m_pNext;
		if(m_pChild==pWnd)
			m_pChild=pWnd->m_pNext;
	}
	if(pWnd==m_pActiveControl)
	{
		if(m_pChild)
			SetActiveControl(m_pChild,TRUE);
		else
			m_pActiveControl=NULL;
	}
}

void CPWnd::OnDestroy()
{
	CWnd::OnDestroy();
	if(m_pChild)
	{
		CWnd *pWnd,*pChild;
		pChild=m_pChild;
		pWnd=pChild->m_pPrev;
		for(;;)
		{
			DEBUG_ONLY(pWnd->m_pParent=NULL);
			pWnd->DestroyWindow();
			if(pWnd==pChild)
				break;
			pWnd=pWnd->m_pPrev;
		}
		DEBUG_ONLY(m_pChild=NULL);
		DEBUG_ONLY(m_pActiveControl=NULL);
		
	}
}

⌨️ 快捷键说明

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