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

📄 cwin32window.cpp

📁 mp3 频谱分析源码, mp3播放器开发必备源码,
💻 CPP
字号:
#include "stdafx.h"
#include "cwin32window.h"

CWin32Window::CWin32Window()
{
	m_hWnd   = NULL;
	m_hAccel = NULL;
	m_hDC    = NULL;

	m_ClassInfo.cbClsExtra = 0;
	m_ClassInfo.cbSize = sizeof(WNDCLASSEX);
	m_ClassInfo.cbWndExtra = 0;
	m_ClassInfo.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW);
	m_ClassInfo.hCursor = LoadCursor(NULL,IDC_ARROW);
	m_ClassInfo.hIcon = NULL;
	m_ClassInfo.hInstance = GetModuleHandle(NULL);
	m_ClassInfo.lpfnWndProc = DefWindowProc;
	m_ClassInfo.lpszClassName = "CWin32Window::DefaultClass";
	m_ClassInfo.lpszMenuName = NULL;
	m_ClassInfo.style = CS_DBLCLKS;
}

CWin32Window::~CWin32Window()
{
	
}	

LPWNDCLASSEX CWin32Window::GetClassInfo()
{
	return &m_ClassInfo;
}

bool CWin32Window::DoRegisterClass()
{
	return (RegisterClassEx(&m_ClassInfo)!=0);
}

bool CWin32Window::DoUnregisterClass()
{
	return (UnregisterClass(m_ClassInfo.lpszClassName, m_ClassInfo.hInstance)!=0);
}

int CWin32Window::EnterMessageLoop()
{
	MSG msg;
	while(GetMessage(&msg,NULL,0,0)) {
		if(m_hAccel) {
			if(!TranslateAccelerator(msg.hwnd,m_hAccel,&msg)) {
				TranslateMessage(&msg);
				DispatchMessage(&msg);
			}
		}
		else {
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
	return msg.wParam;
}

bool CWin32Window::Attach(HWND hWnd)
{
	if(hWnd && !m_hWnd) {
		char* lpClassName = new char[256];
		m_hWnd = hWnd;
		GetClassName(hWnd,lpClassName,256);
		GetClassInfoEx((HINSTANCE)GetWindowLong(hWnd,GWL_HINSTANCE),lpClassName,&m_ClassInfo);
		delete[] lpClassName;
		return true;
	}
	return false;
}

bool CWin32Window::FindAndAttach(LPCSTR lpClassName, LPCSTR lpWndName)
{
	if(!m_hWnd) {
		return Attach(FindWindow(lpClassName,lpWndName));
	}	
	return false;
}

bool CWin32Window::Minimize()
{
	if(m_hWnd) return (ShowWindow(m_hWnd,SW_MINIMIZE)!=0);
	return false;
}

bool CWin32Window::Restore()
{
	if(m_hWnd) return (OpenIcon(m_hWnd)!=0);
	return false;
}

bool CWin32Window::Maximize()
{
	if(m_hWnd) return (ShowWindow(m_hWnd,SW_MAXIMIZE)!=0);
	return false;
}

bool CWin32Window::Close()
{
	if(m_hWnd) {
		SendMessage(m_hWnd,WM_CLOSE,0,0);
		return true;
	}
	return false;
}

bool CWin32Window::Destroy()
{
	if(m_hWnd) return (DestroyWindow(m_hWnd)!=0);
	return false;
}

bool CWin32Window::Refresh()
{
	if(m_hWnd) return (UpdateWindow(m_hWnd)!=0);
	return false;
}

bool CWin32Window::Show()
{
	if(m_hWnd) return (ShowWindow(m_hWnd,SW_SHOW)!=0);
	return false;
}

bool CWin32Window::Hide()
{
	if(m_hWnd) return (ShowWindow(m_hWnd,SW_HIDE)!=0);
	return false;
}

bool CWin32Window::IsChildOf(HWND hWndParent)
{
	if(m_hWnd) return (::IsChild(hWndParent,m_hWnd)!=0);
	return false;
}

bool CWin32Window::IsChildOf(CWin32Window* Parent)
{
	if(Parent) return IsChildOf(Parent->GetSafeHandle());
	return false;
}

bool CWin32Window::IsMinimized()
{
	if(m_hWnd) return (IsIconic(m_hWnd)!=0);
	return false;
}

bool CWin32Window::IsRestored()
{
	return (!(IsMinimized() || IsMaximized()));
}

bool CWin32Window::IsMaximized()
{
	if(m_hWnd) return (IsZoomed(m_hWnd)!=0);
	return false;
}

bool CWin32Window::IsVisible()
{
	if(m_hWnd) return (IsWindowVisible(m_hWnd)!=0);
	return false;
}

bool CWin32Window::SetCaption(LPCSTR lpCaption)
{
	if(m_hWnd) return (SetWindowText(m_hWnd,lpCaption)!=0);
	return false;
}

bool CWin32Window::GetCaption(LPSTR lpBuffer, int nBufferMax)
{
	if(m_hWnd) return (GetWindowText(m_hWnd,lpBuffer,nBufferMax)!=0);
	return false;
}

int CWin32Window::GetCaptionLength()
{
	if(m_hWnd) return GetWindowTextLength(m_hWnd);
	return 0;
}

RECT CWin32Window::GetClientRect()
{
	RECT rcClient = {0,0,0,0};
	if(m_hWnd) ::GetClientRect(m_hWnd,&rcClient);
	return rcClient;
}

RECT CWin32Window::GetWindowRect()
{
	RECT rcWindow = {0,0,0,0};
	if(m_hWnd) ::GetWindowRect(m_hWnd,&rcWindow);
	return rcWindow;
}

int CWin32Window::GetLeft()
{
	RECT rc = {0,0,0,0};
	if(m_hWnd) ::GetWindowRect(m_hWnd,&rc);
	return rc.left;
}

int CWin32Window::GetTop()
{
	RECT rc = {0,0,0,0};
	if(m_hWnd) ::GetWindowRect(m_hWnd,&rc);
	return rc.top;
}

int CWin32Window::GetWidth()
{
	RECT rc = {0,0,0,0};
	if(m_hWnd) ::GetWindowRect(m_hWnd,&rc);
	return (rc.right - rc.left);
}

int CWin32Window::GetHeight()
{
	RECT rc = {0,0,0,0};
	if(m_hWnd) ::GetWindowRect(m_hWnd,&rc);
	return (rc.bottom - rc.top);
}

HWND CWin32Window::GetSafeHandle()
{
	if(IsWindow(m_hWnd)) 
		return m_hWnd;
	else
		return NULL;
}

HWND CWin32Window::GetParentHandle()
{
	if(IsWindow(m_hWnd)) return GetParent(m_hWnd);
	return NULL;
}

bool CWin32Window::MoveWindow(int X, int Y, int nWidth, int nHeight, bool bRepaint)
{
	if(m_hWnd) return (::MoveWindow(m_hWnd,X,Y,nWidth,nHeight,int(bRepaint))!=0);
	return false;
}

bool CWin32Window::SetWindowPos(HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
{
	if(m_hWnd) return (::SetWindowPos(m_hWnd,hWndInsertAfter,X,Y,cx,cy,uFlags)!=0);
	return false;
}

bool CWin32Window::SetParent(HWND hWndNewParent)
{
	if(m_hWnd) return (::SetParent(m_hWnd,hWndNewParent)!=NULL);
	return false;
}

bool CWin32Window::SetParent(CWin32Window* NewParent)
{
	if(NewParent) return SetParent(NewParent->GetSafeHandle());
	return false;
}

bool CWin32Window::SetForegroundWindow()
{
	if(m_hWnd) return (::SetForegroundWindow(m_hWnd)!=0);
	return false;
}

bool CWin32Window::LockUpdate()
{
	if(m_hWnd) return (LockWindowUpdate(m_hWnd)!=0);
	return false;
}

bool CWin32Window::UnlockUpdate()
{
	return (LockWindowUpdate(NULL)!=0);
}

bool CWin32Window::ShowInTaskbar(bool bShow)
{
	if(m_hWnd) {
		if(!bShow) 
			SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE)&~(WS_EX_APPWINDOW));
		else 
			SetWindowLong(m_hWnd,GWL_EXSTYLE,GetWindowLong(m_hWnd,GWL_EXSTYLE)|WS_EX_APPWINDOW);
		return true;
	}
	return false;
}

bool CWin32Window::ShowCaption(bool bShow)
{
	if(m_hWnd) {
		if(bShow) 
			SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)|WS_CAPTION);
		else
			SetWindowLong(m_hWnd,GWL_STYLE,(GetWindowLong(m_hWnd,GWL_STYLE)&~(WS_CAPTION))|WS_POPUP);
		return true;
	}
	return false;
}

bool CWin32Window::SetAlwaysOnTop(bool bAlwaysOnTop)
{
	if(m_hWnd) {
		if(bAlwaysOnTop) 
			return (::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE)!=0);
		else
			return (::SetWindowPos(m_hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE)!=0);
	}
	return false;
}


bool CWin32Window::SetWindowRect(LPRECT lpRect)
{
	if(m_hWnd && lpRect->right > lpRect->left && lpRect->bottom > lpRect->top && lpRect->left > 0 && lpRect->top > 0) {
		return (::SetWindowPos(m_hWnd,NULL,lpRect->left,lpRect->top,lpRect->right - lpRect->left, lpRect->bottom - lpRect->top, SWP_NOZORDER)!=0);
	}
	return false;
}

bool CWin32Window::SetWidth(int nWidth)
{
	if(m_hWnd) {
		RECT rc;
		::GetWindowRect(m_hWnd,&rc);
		return(::SetWindowPos(m_hWnd,NULL,0,0,nWidth,rc.bottom - rc.top,SWP_NOMOVE|SWP_NOZORDER)!=0);
	}
	return false;
}

bool CWin32Window::SetHeight(int nHeight)
{
	if(m_hWnd) {
		RECT rc;
		::GetWindowRect(m_hWnd,&rc);
		return(::SetWindowPos(m_hWnd,NULL,0,0,rc.right - rc.left,nHeight,SWP_NOMOVE|SWP_NOZORDER)!=0);
	}
	return false;
}

bool CWin32Window::Create(LPCSTR lpTitle, int X, int Y, int cx, int cy, DWORD dwStyle, DWORD dwStyleEx, HWND hWndParent)
{
	m_hWnd = CreateWindowEx(dwStyleEx,m_ClassInfo.lpszClassName,lpTitle,dwStyle,X,Y,cx,cy,hWndParent,NULL,m_ClassInfo.hInstance,NULL);
	if(m_hWnd) return true;
	return false;
}

bool CWin32Window::Create(LPCSTR lpTitle, int X, int Y, int cx, int cy, DWORD dwStyle, DWORD dwStyleEx, CWin32Window* Parent)
{
	if(Parent) 
		return Create(lpTitle,X,Y,cx,cy,dwStyle,dwStyleEx,Parent->GetSafeHandle());
	else
		return Create(lpTitle,X,Y,cx,cy,dwStyle,dwStyleEx,reinterpret_cast<HWND>(NULL));
}

bool CWin32Window::FlashWindow(DWORD dwFlags)
{
	if(m_hWnd) return (::FlashWindow(m_hWnd,dwFlags)!=0);
	return false;
}

HDC CWin32Window::GetDC()
{
	if(!m_hDC && m_hWnd!=NULL) {
		m_hDC = ::GetDC(m_hWnd);
		return m_hDC;
	}
	return NULL;
}

bool CWin32Window::ReleaseDC()
{
	if(m_hDC && m_hWnd) {
		::ReleaseDC(m_hWnd,m_hDC);
		m_hDC = NULL;
		return true;
	}
	return false;
}

bool CWin32Window::LoadAccelerators(LPCTSTR lpTableName)
{
	if(!m_hAccel) {
		m_hAccel = ::LoadAccelerators(m_ClassInfo.hInstance,lpTableName);
		if(m_hAccel) return true;
	}
	return false;
}

bool CWin32Window::SetAccelerators(HACCEL hAccel)
{
	if(!m_hAccel) {
		m_hAccel = hAccel;
		if(m_hAccel) return true;
	}
	return false;
}

bool CWin32Window::FreeAccelerators()
{
	if(m_hAccel) {
		DestroyAcceleratorTable(m_hAccel);
		m_hAccel = NULL;
		return true;
	}
	return false;
}

HACCEL CWin32Window::ReleaseAccelerators()
{
	if(m_hAccel) {
		HACCEL hc = m_hAccel;
		m_hAccel = NULL;
		return hc;
	}
	return NULL;
}

HACCEL CWin32Window::GetAccelerators()
{
	return m_hAccel;
}

⌨️ 快捷键说明

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