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

📄 wnd.h

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 H
字号:
//
// 傊側偪傚偙僂僀儞僪僂僋儔僗
//
// 宲彸偟側偄偲堄枴偑柍偄^^;
//
#ifndef	__CWND_INCLUDED__
#define	__CWND_INCLUDED__

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>

#include <string>
#include <list>
using namespace std;

// prototype
class	CWnd;

// 儌乕僪儗僗懠傪張棟偡傞堊偺僀儞僠僉僋儔僗
class	CWndList
{
public:
	CWndList();
	~CWndList();

	static	void	Add( CWnd* pWnd );	// 儕僗僩偵壛偊傞
	static	void	Del( CWnd* pWnd );	// 儕僗僩偐傜嶍彍偡傞

	static	BOOL	IsDialogMessage( LPMSG msg );
protected:
private:
	static	list<CWnd*>	m_WndPtrList;
};

// 晛捠偺僂僀儞僪僂
class	CWnd
{
public:
	CWnd();
	virtual	~CWnd();

	HWND	m_hWnd;
	HMENU	m_hMenu;

	// Override
	virtual	BOOL	Create( HWND hWndParent ) { return FALSE; };
	virtual	void	Destroy() {};

	// Override for ModalDialog
	virtual	INT	DoModal( HWND hWndParent ) { return 0; }

	// For message filtering
	virtual	BOOL	PreTranslateMessage( MSG* pMsg ) { return FALSE; }
protected:
	void	SetThis();

	// Static
	static	LRESULT	CALLBACK g_WndProc(  HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
	static	BOOL	CALLBACK g_DlgProc(  HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );

	// Override
	virtual	LRESULT	DispatchWnd( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
	{ return ::DefWindowProc(  hWnd, msg, wParam, lParam ); }

	virtual	BOOL	DispatchDlg( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
	{ return FALSE; }
private:
};

// 僂僀儞僪僂儊僢僙乕僕梡
// 僋儔僗掕媊儅僋儘
#define	WND_MESSAGE_MAP()	HRESULT DispatchWnd( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );

#define	WNDMSG			BOOL
#define	WNDCMD			void
#define	WNDNOTIFY		void

#define	WNDMSGPARAM		HWND hWnd, WPARAM wParam, LPARAM lParam, HRESULT& hResult
#define	WNDCMDPARAM		HWND hWnd, UINT uID
#define	WNDNOTIFYPARAM		HWND hWnd, UINT uID, NMHDR* pNMHDR, LRESULT& hResult

// 僀儞僾儕儊儞僩儅僋儘
#define	WND_MESSAGE_BEGIN(cls)	\
	HRESULT cls::DispatchWnd( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {\
		HRESULT	hResult = 0L;\
		switch( msg ) {
#define	WND_ON_MESSAGE(msg,fnc)	\
	case (msg): {\
		if( fnc( hWnd, wParam, lParam, hResult ) )\
			return	hResult;\
	}\
	break;
// 僐儅儞僪偼COMMAND_BEGIN() 乣 COMMAND_END()偺拞偵婰弎偡傞(扨側傞if側偺偱(^^;)
#define	WND_COMMAND_BEGIN() \
	case	WM_COMMAND: {
#define	WND_ON_COMMAND(id,fnc) \
	if( LOWORD(wParam) == (id) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
#define	WND_ON_COMMAND_RANGE(id,idend,fnc) \
	if( LOWORD(wParam) >= (id) && LOWORD(wParam) <= (idend) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
// Notify commands
#define	WND_ON_COMMAND_NOTIFY(id,nfy,fnc) \
	if( LOWORD(wParam) == (id) && HIWORD(wParam) == (nfy) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
#define	WND_ON_COMMAND_NOTIFY_RANGE(id,idend,nfy,fnc) \
	if( LOWORD(wParam) >= (id) && LOWORD(wParam) <= (idend) && HIWORD(wParam) == (nfy) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
#define	WND_COMMAND_END() \
	return	0L; }; break;

// WM_NOTIFY偼NOTIFY_BEGIN() 乣 NOTIFY_END()偺拞偵婰弎偡傞(扨側傞if側偺偱^^;)
#define	WND_NOTIFY_BEGIN() \
	case	WM_NOTIFY: { \
		LRESULT	hResult = 0L;
#define	WND_ON_NOTIFY(id,msg,fnc) \
	if( (UINT)wParam == (id) && ((NMHDR*)lParam)->code == (msg) ) {\
		fnc( ((NMHDR*)lParam)->hwndFrom, (UINT)wParam, (NMHDR*)lParam, hResult );\
		return	(BOOL)hResult; }
#define	WND_ON_NOTIFY_RANGE(id,idend,msg,fnc) \
	if( (UINT)wParam >= (id) && (UINT)wParam <= (idend) && ((NMHDR*)lParam)->code == (msg) ) {\
		fnc( ((NMHDR*)lParam)->hwndFrom, (UINT)wParam, (NMHDR*)lParam, hResult );\
		return	(BOOL)hResult; }
#define	WND_NOTIFY_END() \
	return	FALSE; }; break;

#define	WND_MESSAGE_END() \
	default: break; }\
	return	::DefWindowProc( hWnd, msg, wParam, lParam );\
	}

// 僟僀傾儘僌儊僢僙乕僕梡
// 僋儔僗掕媊儅僋儘
#define	DLG_MESSAGE_MAP()	BOOL DispatchDlg( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );

#define	DLGMSG			BOOL
#define	DLGCMD			void
#define	DLGNOTIFY		void

#define	DLGMSGPARAM		HWND hWnd, WPARAM wParam, LPARAM lParam, BOOL& bResult
#define	DLGCMDPARAM		HWND hWnd, UINT uID
#define	DLGNOTIFYPARAM		HWND hWnd, UINT uID, NMHDR* pNMHDR, LRESULT& hResult

// 僀儞僾儕儊儞僩儅僋儘
#define	DLG_MESSAGE_BEGIN(cls)	\
	BOOL cls::DispatchDlg( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {\
		BOOL	bResult = TRUE;\
		switch( msg ) {
#define	DLG_ON_MESSAGE(msg,fnc)	\
	case (msg): {\
		if( fnc( hWnd, wParam, lParam, bResult ) )\
			return	bResult;\
	}\
	break;
// 僐儅儞僪偼COMMAND_BEGIN() 乣 COMMAND_END()偺拞偵婰弎偡傞(扨側傞if側偺偱^^;)
#define	DLG_COMMAND_BEGIN() \
	case	WM_COMMAND: {
#define	DLG_ON_COMMAND(id,fnc) \
	if( LOWORD(wParam) == (id) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
#define	DLG_ON_COMMAND_RANGE(id,idend,fnc) \
	if( LOWORD(wParam) >= (id) && LOWORD(wParam) <= (idend) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
// Notify commands
#define	DLG_ON_COMMAND_NOTIFY(id,nfy,fnc) \
	if( LOWORD(wParam) == (id) && HIWORD(wParam) == (nfy) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
#define	DLG_ON_COMMAND_NOTIFY_RANGE(id,idend,nfy,fnc) \
	if( LOWORD(wParam) >= (id) && LOWORD(wParam) <= (idend) && HIWORD(wParam) == (nfy) ) \
		fnc( (HWND)lParam, LOWORD(wParam) );
#define	DLG_COMMAND_END() \
	return	FALSE; }; break;

// WM_NOTIFY偼NOTIFY_BEGIN() 乣 NOTIFY_END()偺拞偵婰弎偡傞(扨側傞if側偺偱^^;)
#define	DLG_NOTIFY_BEGIN() \
	case	WM_NOTIFY: { \
		LRESULT	hResult = 0L;
#define	DLG_ON_NOTIFY(id,msg,fnc) \
	if( (UINT)wParam == (id) && ((NMHDR*)lParam)->code == (msg) ) {\
		fnc( ((NMHDR*)lParam)->hwndFrom, (UINT)wParam, (NMHDR*)lParam, hResult );\
		return	(BOOL)hResult; }
#define	DLG_ON_NOTIFY_RANGE(id,idend,msg,fnc) \
	if( (UINT)wParam >= (id) && (UINT)wParam <= (idend) && ((NMHDR*)lParam)->code == (msg) ) {\
		fnc( ((NMHDR*)lParam)->hwndFrom, (UINT)wParam, (NMHDR*)lParam, hResult );\
		return	(BOOL)hResult; }
#define	DLG_NOTIFY_END() \
	return	FALSE; }; break;

#define	DLG_MESSAGE_END() \
	default: break; }\
	return	FALSE;\
	}

//
// 僟僀傾儘僌撪僐儞僩儘乕儖僿儖僷乕儅僋儘
//
#define	BTNCHECK(ctrlid,check)	::CheckDlgButton(m_hWnd,(ctrlid),(check)?BST_CHECKED:BST_UNCHECKED)
#define	IsBTNCHECK(ctrlid)	((::IsDlgButtonChecked(m_hWnd,(ctrlid))==BST_CHECKED)?TRUE:FALSE)

#define	CTRLENABLE(ctrlid,enable) ::EnableWindow(::GetDlgItem(m_hWnd,(ctrlid)),enable);

#endif	// !__CWND_INCLUDED__

⌨️ 快捷键说明

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