📄 cwin32window.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 + -