164 lines
4.2 KiB
C++
164 lines
4.2 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
// BaseWindow.cpp: Abstract window class.
|
|
//
|
|
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
|
|
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
|
|
// PARTICULAR PURPOSE.
|
|
//
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "wincontrol.h"
|
|
#include "BaseWindow.h"
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// BaseWindow constructor.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
BaseWindow::BaseWindow() : m_hwnd(NULL), m_hInstance(NULL)
|
|
{
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// BaseWindow::Register
|
|
// Description: Registers the window class.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
HRESULT BaseWindow::Register()
|
|
{
|
|
WNDCLASSEX wcex;
|
|
|
|
wcex.cbSize = sizeof(WNDCLASSEX);
|
|
|
|
wcex.style = CS_HREDRAW | CS_VREDRAW;
|
|
wcex.lpfnWndProc = WindowProc;
|
|
wcex.cbClsExtra = 0;
|
|
wcex.cbWndExtra = 0;
|
|
wcex.hInstance = m_hInstance;
|
|
wcex.hIcon = NULL;
|
|
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
|
|
wcex.lpszMenuName = MenuName();
|
|
wcex.lpszClassName = ClassName();
|
|
wcex.hIconSm = NULL;
|
|
|
|
ATOM atom = RegisterClassEx(&wcex);
|
|
|
|
if (atom == 0)
|
|
{
|
|
return __HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
else
|
|
{
|
|
return S_OK;
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// BaseWindow::Create
|
|
// Description: Creates an instance of the window.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
HRESULT BaseWindow::Create(HINSTANCE hInstance)
|
|
{
|
|
m_hInstance = hInstance;
|
|
|
|
HRESULT hr = Register();
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
HWND hwnd = CreateWindow(
|
|
ClassName(),
|
|
WindowName(),
|
|
WS_OVERLAPPEDWINDOW,
|
|
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,
|
|
NULL,
|
|
NULL,
|
|
m_hInstance,
|
|
this);
|
|
|
|
if (hwnd == 0)
|
|
{
|
|
hr = __HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// BaseWindow::Show
|
|
// Description: Show or hide the window.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
HRESULT BaseWindow::Show(int nCmdShow)
|
|
{
|
|
ShowWindow(m_hwnd, nCmdShow);
|
|
UpdateWindow(m_hwnd);
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// BaseWindow::WindowProc
|
|
// Description: Window procedure.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
LRESULT CALLBACK BaseWindow::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
BaseWindow *pWin = NULL;
|
|
|
|
if (uMsg == WM_NCCREATE)
|
|
{
|
|
// When we create the window, we pass in a pointer to this class
|
|
// as part of the CREATESTRUCT structure.
|
|
LPCREATESTRUCT lpcs = (LPCREATESTRUCT)lParam;
|
|
pWin = (BaseWindow*)lpcs->lpCreateParams;
|
|
|
|
// Set the window handle.
|
|
pWin->m_hwnd = hwnd;
|
|
|
|
// Set the pointer to the class as user data.
|
|
|
|
_SetWindowLongPtr(hwnd, GWLP_USERDATA, pWin);
|
|
}
|
|
else
|
|
{
|
|
// Get the pointer to the class.
|
|
pWin = _GetWindowLongPtr<BaseWindow*>(hwnd, GWLP_USERDATA);
|
|
}
|
|
|
|
if (pWin)
|
|
{
|
|
return pWin->OnReceiveMessage(uMsg, wParam, lParam);
|
|
}
|
|
else
|
|
{
|
|
return DefWindowProc(hwnd, uMsg, wParam, lParam);
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------
|
|
// BaseWindow::OnReceiveMessage
|
|
// Description: Handle window messages other than WM_NCCREATE.
|
|
//--------------------------------------------------------------------------------------
|
|
|
|
LRESULT BaseWindow::OnReceiveMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
case WM_NCDESTROY:
|
|
SetWindowLongPtr(m_hwnd, GWLP_USERDATA, 0);
|
|
return DefWindowProc(m_hwnd, uMsg, wParam, lParam);
|
|
|
|
case WM_PAINT:
|
|
OnPaint();
|
|
return 0;
|
|
|
|
}
|
|
return DefWindowProc(m_hwnd, uMsg, wParam, lParam);
|
|
}
|