亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wndx.cpp

?? nettalk
?? CPP
字號:
/*------------------------------------------------------------------------------*\
 =============================
   模塊名稱: WndX.cpp
 =============================                                              
\*------------------------------------------------------------------------------*/
//Download by http://www.codefans.net
#include <stdio.h>

#include "WndX.h"

/*------------------------------------------------------------------------------*/
HINSTANCE hInstX=0;
CWndMgr WndMgr;

CHash WndObjTable;

/*------------------------------------------------------------------------------*/
BOOL PreTranslateMessageX(MSG* pMsg)
{
	CWndX* pWnd;
	BOOL bRet=FALSE;
	if(pMsg->hwnd)
	{
		pWnd=(CWndX*)GetProp(pMsg->hwnd,WND_OBJ_ID);//得到窗口對象
		
		
		if(pWnd)
		{
			bRet=pWnd->PreTranslateMessage(pMsg);
		}
	}
		
	return bRet;
	
}
/*------------------------------------------------------------------------------*/
//把消息轉發給真正的窗口過程
LRESULT WINAPI MsgSender(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	LRESULT lRet=0;
	CWndX* pWnd;
	//get the WndX object
	pWnd=(CWndX*)GetProp(hWnd,WND_OBJ_ID);
	if(pWnd)
	{
		//invoke the window proc of wndx object
		lRet=pWnd->WndProc(uMsg,wParam,lParam);
	}
	//if the Window Handle does not contain the WndX object,
	//...
	else
	{
		//to make it fit for multi-thread application,we must protect the WndObjTable
		EnterCriticalSection(&WndMgr.m_cs);
		if(WndObjTable.QueryValue((int)GetWindowThreadProcessId(hWnd,0),(int&)pWnd))
		{
			
			if(pWnd)
			{
				SetProp(hWnd,WND_OLD_PROC,(HANDLE)pWnd->m_OldProc);
				pWnd->m_hWnd=hWnd;
				
				SetProp(hWnd,WND_OBJ_ID,(HANDLE)pWnd);
				WndMgr.RemoveObject(pWnd);
				
				lRet=pWnd->WndProc(uMsg,wParam,lParam);
			}
		}
		else
		{
			lRet=DefWindowProc(hWnd,uMsg,wParam,lParam);
		}
		LeaveCriticalSection(&WndMgr.m_cs);		
	}	
	
	return lRet;
	
}
/*------------------------------------------------------------------------------*/
void InitXSystem(HINSTANCE hInst)
{
	hInstX=hInst;
}
/*------------------------------------------------------------------------------*/
CWndX::CWndX()
{
	
	m_hWnd=0;
	m_OldProc=0;
	
}
/*------------------------------------------------------------------------------*/
CWndX::~CWndX()
{
	
	DestroyWindow(m_hWnd);

}
/*------------------------------------------------------------------------------*/
BOOL CWndX::Create(DWORD dwExStyle,LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwStyle,
				   const RECT& rect,HWND hParentWnd,HMENU hMenu,LPVOID lpParam)
{

	HWND hTemp;
	BOOL bRet=FALSE;
	if(!IsWindow(m_hWnd))
	{
		//if the wndx object is not a valid wnd,insert it into the WndObjTable
		WndObjTable.Insert((int)GetCurrentThreadId(),(int)this);
		//if not specify the class name,register a new class
		if(!lpszClassName)
		{
			char szClassName[50];
			WNDCLASSEX wcex;
			int iId=(int)this;
			do
			{
				sprintf(szClassName,"X:%d",iId);
				
				wcex.cbSize = sizeof(WNDCLASSEX); 
				wcex.style			= CS_HREDRAW | CS_VREDRAW;
				wcex.lpfnWndProc	= (WNDPROC)MsgSender;
				wcex.cbClsExtra		= 0;
				wcex.cbWndExtra		= 0;
				wcex.hInstance		= hInstX;
				wcex.hIcon			= 0;
				wcex.hCursor        =  LoadCursor(NULL, IDC_ARROW);
				wcex.hbrBackground	= (HBRUSH)(COLOR_WINDOW+1);
				wcex.lpszMenuName	= 0;
				wcex.lpszClassName	= szClassName;
				wcex.hIconSm		=0;
				iId++;
			}
			while(!RegisterClassEx(&wcex));
			lpszClassName=szClassName;
			
		}

		hTemp=CreateWindowEx(dwExStyle,lpszClassName,lpszWindowName,dwStyle,
			rect.left ,rect.top,rect.right-rect.left,rect.bottom-rect.top,
			hParentWnd,hMenu,hInstX,lpParam);
		
		if(hTemp)
		{
			m_hWnd=hTemp;
			bRet=TRUE;
		}
	}
	return bRet;

}
/*------------------------------------------------------------------------------*/

HWND CWndX::GetHwnd() const
{
	return m_hWnd;
}
/*------------------------------------------------------------------------------*/
CWndX::operator HWND() const
{
	return m_hWnd;
}
/*------------------------------------------------------------------------------*/
LRESULT CWndX::WndProc(UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_NCDESTROY:
		OnNcDestroy();
		return FALSE;
		break;
	
	default:
		return DefWindowProc(m_hWnd,uMsg,wParam,lParam);
	}
	if(m_OldProc)
	{
		return CallWindowProc(m_OldProc,m_hWnd,uMsg,wParam,lParam);
	}
	else
	    return 0;
}
/*------------------------------------------------------------------------------*/
void CWndX::operator =(HWND hWnd)
{
	Attach(hWnd);
}
/*------------------------------------------------------------------------------*/
BOOL CWndX::Attach(HWND hWnd)
{
	BOOL bRet=FALSE;
	if(!IsWindow(m_hWnd))//自己并不與窗口關聯
	{
		if(IsWindow(hWnd))//參數對應的窗口要有效
		{
			if(!GetProp(hWnd,WND_OBJ_ID))//不是CWndX創建的
			{
				m_OldProc=(WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC);
				
				//
				if(SetProp(hWnd,WND_OLD_PROC,(HANDLE)GetWindowLong(hWnd,GWL_WNDPROC)))
				{
					//將對象指針與窗口句柄關聯
					if(SetProp(hWnd,WND_OBJ_ID,(HANDLE)this))
					{
						//由于SetWindowLong成功時也有可能返回0
						SetLastError(0);
						SetWindowLong(hWnd,GWL_WNDPROC,(LONG)MsgSender);	
						if(GetLastError()==0)
						{
							m_hWnd=hWnd;
							bRet=TRUE;
						}
						else
						{
							RemoveProp(hWnd,WND_OLD_PROC);
							RemoveProp(hWnd,WND_OBJ_ID);
						}
					
					}
					else
					{
						RemoveProp(hWnd,WND_OLD_PROC);
					}
				}
			}
		}
	}

	return bRet;

}
/*------------------------------------------------------------------------------*/
HWND CWndX::Detach()
{
	HWND hRet=0;
	
	if(IsWindow(m_hWnd))//必須有效
	{
		SetLastError(0);
		SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)m_OldProc);//設置老窗口過程
		if(GetLastError()==0)
		{
			m_OldProc=0;
			
			RemoveProp(m_hWnd,WND_OBJ_ID);
			RemoveProp(m_hWnd,WND_OLD_PROC);
			hRet=m_hWnd;
			m_hWnd=0;
		}
							
	}
	else
		m_hWnd=0;
	return hRet;
		 
}
/*------------------------------------------------------------------------------*/
BOOL CWndX::PreTranslateMessage(MSG *pMsg)
{
	return TRUE;
}

/*------------------------------------------------------------------------------*/

void CWndX::OnNcDestroy()
{
	m_hWnd=0;
	m_OldProc=0;
	//除掉之后就不會有消息來了
	RemoveProp(m_hWnd,WND_OBJ_ID);
	RemoveProp(m_hWnd,WND_OLD_PROC);
	
}
/*------------------------------------------------------------------------------*/
/////////////////////////
CWndMgr::CWndMgr()
{

	InitializeCriticalSection(&m_cs);
	
}
/*------------------------------------------------------------------------------*/
CWndMgr::~CWndMgr()
{
	DeleteCriticalSection(&m_cs);
}
/*------------------------------------------------------------------------------*/
BOOL CWndMgr::AddObject(CWndX* pWndObj)
{
	BOOL bRet;

	EnterCriticalSection(&m_cs);
	bRet=WndObjTable.Insert((int)GetCurrentThreadId(),(int)pWndObj);
	LeaveCriticalSection(&m_cs);

	return bRet;
}
/*------------------------------------------------------------------------------*/
BOOL CWndMgr::RemoveObject(CWndX* pWndObj)
{
	BOOL bRet;

	EnterCriticalSection(&m_cs);
	bRet=WndObjTable.Remove((int)GetWindowThreadProcessId(pWndObj->GetHwnd(),0));
	LeaveCriticalSection(&m_cs);

	return bRet;
}
/*------------------------------------------------------------------------------*/
//對話框的實現
int CDialogX::Create(LPCTSTR lpszTemplateName,HWND hWndParent)
{
	if(IsWindow(m_hWnd))
		return 0;
	
	WndMgr.AddObject(this);
	return (int)CreateDialog(hInstX,lpszTemplateName,hWndParent,(DLGPROC)MsgSender);
}
/*------------------------------------------------------------------------------*/
int CDialogX::DoModal(LPCTSTR lpszTemplateName,HWND hWndParent)
{
	if(IsWindow(m_hWnd))
		return 0;
	
	WndMgr.AddObject(this);
	m_bModal=TRUE;
	return DialogBox(hInstX,lpszTemplateName,hWndParent,(DLGPROC)MsgSender);
}
/*------------------------------------------------------------------------------*/
void CDialogX::OnOK()
{
	if(m_bModal)
		EndDialog(m_hWnd,TRUE);
}
/*------------------------------------------------------------------------------*/
void CDialogX::OnCancel()
{
	if(m_bModal)
		EndDialog(m_hWnd,FALSE);
}

/*------------------------------------------------------------------------------*/
CDialogX::CDialogX()
{
	m_bModal=0;
}
/*------------------------------------------------------------------------------*/
CDialogX::~CDialogX()
{
}
/*------------------------------------------------------------------------------*/
LRESULT CDialogX::WndProc(UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch(uMsg)
	{
	case WM_COMMAND:
		return OnCommand(wParam,lParam);
		
		break;
	case WM_NCDESTROY:
		OnNcDestroy();
		break;
	case WM_CLOSE:
		OnClose();
		break;
	default:
		return FALSE;
	}
	return TRUE;
}
/*------------------------------------------------------------------------------*/
void CDialogX::OnNcDestroy()
{
	CWndX::OnNcDestroy();
	m_bModal=FALSE;
}

/*------------------------------------------------------------------------------*/

void CDialogX::OnClose()
{
	if(m_bModal)
		EndDialog(m_hWnd,FALSE);
	else
		DestroyWindow(m_hWnd);
}
/*------------------------------------------------------------------------------*/
BOOL CDialogX::OnCommand(WPARAM wParam, LPARAM lParam)
{
	switch(LOWORD(wParam))
	{
	case IDOK:
		OnOK();
		break;
	case IDCANCEL:
		OnCancel();
		break;
	}
	return TRUE;
}
/*------------------------------------------------------------------------------*/
/////
CMenuX::CMenuX()
{
}
/*------------------------------------------------------------------------------*/
CMenuX::~CMenuX()
{
	if(IsMenu(m_hMenu))
		DestroyMenu(m_hMenu);
}
/*------------------------------------------------------------------------------*/
HMENU CMenuX::GetHandle()
{
	return m_hMenu;
}
/*------------------------------------------------------------------------------*/
BOOL CMenuX::Attach(HMENU hMenu)
{
	BOOL bRet=FALSE;
	if((!IsMenu(m_hMenu))&&IsMenu(hMenu))
	{
		m_hMenu=hMenu;
		bRet=TRUE;
	}
	return bRet;
}
/*------------------------------------------------------------------------------*/
HMENU CMenuX::Detach()
{
	if(IsMenu(m_hMenu))
		return m_hMenu;
	return 0;
}


/*------------------------------------------------------------------------------*/



BOOL CCtrlX::Associate(HWND hWndParent, UINT uIDDlgItem)
{
	return Attach(GetDlgItem(hWndParent,uIDDlgItem));
}
/*------------------------------------------------------------------------------*/
LRESULT CCtrlX::WndProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	return CallWindowProc(m_OldProc,m_hWnd,uMsg,wParam,lParam);
}
/*------------------------------------------------------------------------------*/
BOOL CCtrlX::Create(DWORD dwStyleEx,LPCTSTR pszClass,LPCTSTR pszCaption,DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{
	BOOL bRet=FALSE;
	
	WNDCLASSEX wcx;
	char* pszNewClass=new char[strlen(pszClass)+2];
	sprintf(pszNewClass,"%sX",pszClass);
	
    if(!GetClassInfoEx(hInstX,pszNewClass,&wcx))
	{
		if(GetClassInfoEx(hInstX,pszClass,&wcx))
		{
			wcx.lpszClassName=pszNewClass;
			wcx.cbSize=sizeof(wcx);

			m_OldProc=wcx.lpfnWndProc;
			wcx.lpfnWndProc=MsgSender;
			if(RegisterClassEx(&wcx))
			{
				bRet=TRUE;
			}
		}
	}
	else
	{
		if(GetClassInfoEx(hInstX,pszClass,&wcx))
		{
			
			m_OldProc=wcx.lpfnWndProc;
			bRet=TRUE;
		
		}
		
	}
	
	if(bRet==TRUE)
	{
		if(!CWndX::Create(dwStyleEx,pszNewClass,pszCaption,dwStyle,
			rect,hParentWnd,(HMENU)nID,0))
		{
			bRet=FALSE;
		}
		
		
	}
	
	delete []pszNewClass;
	return bRet;
}
/*------------------------------------------------------------------------------*/
//
BOOL CButtonX::Create(LPCTSTR pszCaption,DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{
	return CCtrlX::Create(0,"BUTTON",pszCaption,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}
/*------------------------------------------------------------------------------*/
////////////////////////////////////////

BOOL CEditX::Create(LPCTSTR pszCaption,DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{	
	return CCtrlX::Create(0,"EDIT",pszCaption,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}


/*------------------------------------------------------------------------------*/

/////////////
BOOL CStaticX::Create(LPCTSTR pszCaption, DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{
	return CCtrlX::Create(0,"STATIC",pszCaption,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}
/*------------------------------------------------------------------------------*/
//

BOOL CComboBoxX::Create(LPCTSTR pszCaption, DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{
	return CCtrlX::Create(0,"COMBOBOX",pszCaption,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}
/*------------------------------------------------------------------------------*/
//

BOOL CListBoxX::Create(LPCTSTR pszCaption, DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{
	return CCtrlX::Create(0,"LISTBOX",pszCaption,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}

/*------------------------------------------------------------------------------*/

//

BOOL CScrollBarX::Create(DWORD dwStyle, const RECT &rect, HWND hParentWnd, UINT nID)
{
	return CCtrlX::Create(0,"SCROLLBAR",0,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}
//

/*------------------------------------------------------------------------------*/

BOOL CStatusBarX::Create(LPCTSTR pszCaption,DWORD dwStyle, HWND hParentWnd,UINT nID)
{
	RECT rect={0,0,0,0};
	return CCtrlX::Create(0,STATUSCLASSNAME,pszCaption,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}
/*------------------------------------------------------------------------------*/
BOOL CToolBarX::Create(DWORD dwStyle, HWND hParentWnd, UINT nID)
{
	RECT rect={0,0,0,0};
	return CCtrlX::Create(0,TOOLBARCLASSNAME,0,dwStyle|WS_CHILD|WS_VISIBLE,rect,hParentWnd,nID);
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区视频导航| 2022国产精品视频| 久久九九久精品国产免费直播| 国产精品进线69影院| 日韩二区三区在线观看| 成人精品小蝌蚪| 亚洲精品在线网站| 图片区小说区国产精品视频| 不卡电影一区二区三区| 精品免费视频一区二区| 日韩制服丝袜先锋影音| 97久久超碰精品国产| 国产日韩欧美一区二区三区乱码| 日本亚洲欧美天堂免费| 日本精品裸体写真集在线观看| 国产欧美在线观看一区| 免费观看久久久4p| 91精品国产乱码久久蜜臀| 亚洲一区二区欧美激情| 91蜜桃免费观看视频| 欧美国产一区二区在线观看 | 日本不卡123| 在线免费观看日本一区| 亚洲欧洲三级电影| www.亚洲精品| 国产精品美女久久久久久久| 国产传媒日韩欧美成人| 久久久综合视频| 国模少妇一区二区三区| 精品欧美一区二区三区精品久久| 日韩黄色片在线观看| 91精品国产综合久久精品app| 亚洲一区二区三区小说| 欧美天天综合网| 亚洲综合色视频| 欧美在线影院一区二区| 亚洲国产成人av| 欧美精品v国产精品v日韩精品 | 奇米色一区二区三区四区| 欧美日韩精品免费| 日本视频一区二区| 日韩欧美另类在线| 韩国女主播成人在线观看| 久久新电视剧免费观看| 国产.精品.日韩.另类.中文.在线.播放| 欧美sm极限捆绑bd| 国产91露脸合集magnet| 国产精品乱码久久久久久| av在线一区二区三区| 一区二区成人在线观看| 欧美另类z0zxhd电影| 奇米色777欧美一区二区| 2020国产精品自拍| av色综合久久天堂av综合| 一区二区三区电影在线播| 欧美撒尿777hd撒尿| 免费久久99精品国产| 国产亚洲综合av| 在线视频国内一区二区| 青青草原综合久久大伊人精品| 精品国产伦理网| 丁香激情综合国产| 午夜国产精品一区| 精品国产乱码久久久久久1区2区| 成人性生交大片免费看中文网站| 亚洲激情综合网| 久久免费电影网| 欧美中文字幕一区二区三区| 另类小说图片综合网| 亚洲女人****多毛耸耸8| 日韩一区二区在线观看| 99精品欧美一区二区蜜桃免费| 日日欢夜夜爽一区| 亚洲欧美综合网| 精品福利二区三区| 日本电影欧美片| 国产精品91一区二区| 一区二区三区精密机械公司| 日韩一本二本av| 欧美在线观看视频一区二区三区| 精彩视频一区二区| 亚洲福利一区二区三区| 国产人成亚洲第一网站在线播放| 欧美日韩在线亚洲一区蜜芽| 国产精品 日产精品 欧美精品| 亚洲第四色夜色| 亚洲视频小说图片| 久久婷婷综合激情| 日韩视频免费观看高清完整版 | 国产精品 日产精品 欧美精品| 亚洲国产wwwccc36天堂| 一区二区中文视频| 国产日产精品1区| 欧美电影免费观看高清完整版在线 | aa级大片欧美| 国产成人亚洲综合色影视| 免费观看91视频大全| 亚洲综合图片区| 中文字幕一区三区| 国产欧美日韩综合| 久久综合久久综合亚洲| 日韩视频一区在线观看| 欧美精品粉嫩高潮一区二区| 在线观看视频欧美| 色综合天天性综合| 97久久超碰精品国产| 亚洲图片欧美视频| 夜夜嗨av一区二区三区网页| 综合中文字幕亚洲| 中文字幕中文字幕一区| 国产精品区一区二区三| 国产午夜精品一区二区| 国产亚洲美州欧州综合国| 久久久久青草大香线综合精品| 日韩午夜激情av| 日韩欧美亚洲另类制服综合在线| 69久久99精品久久久久婷婷| 欧美老肥妇做.爰bbww视频| 欧美日韩精品一区二区天天拍小说 | 亚洲国产日韩综合久久精品| 一区二区国产视频| 午夜精品一区二区三区电影天堂| 亚洲国产欧美日韩另类综合| 一级做a爱片久久| 亚洲网友自拍偷拍| 麻豆精品一二三| 国产一区在线精品| av成人免费在线观看| 欧美午夜片在线观看| 欧美福利电影网| 日韩免费视频一区| 国产无人区一区二区三区| 国产精品久久久久久久久快鸭| 中文字幕视频一区| 亚洲第一福利一区| 国产在线精品不卡| 91蝌蚪porny九色| 欧美欧美午夜aⅴ在线观看| 日韩一区二区免费电影| 久久久午夜电影| 亚洲日本护士毛茸茸| 午夜精品aaa| 国产酒店精品激情| 色先锋aa成人| 欧美一级午夜免费电影| 国产欧美在线观看一区| 亚洲自拍欧美精品| 免费在线观看视频一区| 不卡一卡二卡三乱码免费网站| 日本精品免费观看高清观看| 欧美大片顶级少妇| 亚洲人123区| 久久成人精品无人区| 色综合天天综合网天天狠天天| 日韩三级在线观看| 一区二区三区在线影院| 久久精工是国产品牌吗| 色欧美片视频在线观看在线视频| 日韩一二在线观看| 一区二区三区色| 国产麻豆成人传媒免费观看| 91黄色免费版| 欧美激情中文不卡| 免费成人在线视频观看| 久久众筹精品私拍模特| 亚洲成人精品在线观看| 国产ts人妖一区二区| 欧美一区二区三区免费在线看| 国产精品青草久久| 国产揄拍国内精品对白| 欧美老年两性高潮| 一区二区在线电影| 成人免费黄色在线| 精品99久久久久久| 免费不卡在线视频| 欧美日韩国产一级二级| 国产精品久久久久久久岛一牛影视| 奇米色一区二区三区四区| 欧美亚洲动漫精品| 成人欧美一区二区三区视频网页| 麻豆久久久久久| 欧美三级电影网站| 依依成人综合视频| 色吊一区二区三区| 亚洲精品ww久久久久久p站| 国产 日韩 欧美大片| 久久久久久久久久久久久夜| 日韩va亚洲va欧美va久久| 欧美人动与zoxxxx乱| 一区二区三区精密机械公司| 99re热视频这里只精品| 国产精品美女久久福利网站| 国产精品亚洲人在线观看| 欧美大度的电影原声| 男人的天堂亚洲一区| 日韩欧美第一区| 麻豆精品一区二区综合av| 日韩欧美中文字幕制服| 日韩精品电影在线观看| 在线电影欧美成精品|